乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python | KMP算法的實(shí)現(xiàn)

       算法與編程之美 2021-06-24

      引言

      每一本《數(shù)據(jù)結(jié)構(gòu)》方面的書應(yīng)該都會(huì)講KMP算法,KMP算法可以說是知名度非常高的算法之一,為什么會(huì)叫做KMP算法?是因?yàn)?/span>KMP是由三位大牛:D.E.Knuth、J.H.MorrisV.R.Pratt幾乎同時(shí)發(fā)現(xiàn)的。所以取了每個(gè)人的第一個(gè)字母叫做KMP算法。

      問題描述

      給你一個(gè)母串和一個(gè)子串;請(qǐng)?jiān)谀复袑ふ易哟绻复写嬖谧哟畡t返回True,不存在則返回False。

      示例:母串:ababababcabc,子串:abababca

      輸入:ababababcabc

         abababca

      輸出:True

      解決方案

      KMP算法的時(shí)間復(fù)雜度為Om+n)比暴力破解的時(shí)間復(fù)雜度Om*n)小很多,這是因?yàn)樵?/span>KMP算法中子串和母串不匹配的時(shí)候不會(huì)將子串向右挪移1位,而是將子串向后挪移k位。

      如何確定子串向后挪移的位數(shù)呢?這個(gè)就像需要建立next數(shù)組來進(jìn)行匹配,next數(shù)組就是子串中每一個(gè)位置的最大公共長(zhǎng)度。最大公共長(zhǎng)度在算法導(dǎo)論里面就被記為next數(shù)組。

      計(jì)算next數(shù)組就是計(jì)算子串中每一個(gè)位置的最大公共長(zhǎng)度。簡(jiǎn)單來說可以理解為遮住這個(gè)元素,去查看這個(gè)元素前面的相同前綴和后綴的長(zhǎng)度,這個(gè)長(zhǎng)度就是該元素對(duì)應(yīng)的值,如圖。

      確定next數(shù)組后我們就可以開始子串與母串的匹配,當(dāng)匹配到的元素值不同時(shí),查找子串中該元素對(duì)應(yīng)的next值,根據(jù)next值來確定子串該如何移動(dòng),移動(dòng)后再開始新一次的匹配,一直循環(huán)這個(gè)過程直到匹配結(jié)束。

      結(jié)語

      KMP算法的核心就是在于next數(shù)組的建立,建立正確的next數(shù)組至關(guān)重要,通過next數(shù)組里面的next值可以幫助我們有效的減少循環(huán)次數(shù)和節(jié)約大量的時(shí)間。

      實(shí)習(xí)編輯:李欣容

      作者:陳東

      稿件來源:深度學(xué)習(xí)與文旅應(yīng)用實(shí)驗(yàn)室(DLETA)

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多