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

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

    • 分享

      輕松理解什么是KMP算法

       西北望msm66g9f 2019-08-31

      資源干貨,第一時(shí)間送達(dá)

      KMP算法 內(nèi)部涉及到的數(shù)學(xué)原理與知識太多,本文只會(huì)對 KMP算法 的運(yùn)行過程、 部分匹配表 、next數(shù)組 進(jìn)行介紹,如果理解了這三點(diǎn)再去閱讀其它有關(guān) KMP算法 的文章肯定能有個(gè)清晰的認(rèn)識。

      以下的文字描述請結(jié)合視頻動(dòng)畫來閱讀~

      定義

      Knuth-Morris-Pratt 字符串查找算法,簡稱為 KMP算法,常用于在一個(gè)文本串 S 內(nèi)查找一個(gè)模式串 P 的出現(xiàn)位置。

      這個(gè)算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977 年聯(lián)合發(fā)表,故取這 3 人的姓氏命名此算法。

      是不是感覺 Donald Knuth 這個(gè)名字很眼熟?沒錯(cuò),在前面 這或許是講解 Knuth 洗牌算法最好的文章 一文中也出現(xiàn)了他!

      KMP算法 的操作流程如下:

      • 假設(shè)現(xiàn)在文本串 S 匹配到 i 位置,模式串 P 匹配到 j 位置

      • 如果 j = -1,或者當(dāng)前字符匹配成功(即 S[i] == P[j] ),都令 i++,j++,繼續(xù)匹配下一個(gè)字符;
        如果 j != -1,且當(dāng)前字符匹配失敗(即 S[i] != P[j] ),則令 i 不變,j = next[j]。此舉意味著失配時(shí),模式串 P相對于文本串 S 向右移動(dòng)了 j - next [j]  位

      • 換言之,將模式串 P 失配位置的 next 數(shù)組的值對應(yīng)的模式串 P 的索引位置移動(dòng)到失配處

      運(yùn)行過程

      以下圖文本串 S 與模式串 P 為例:

      首先,列出模式串 P 的所有子串:

      a






      ab





      aba




      abaa



      abaab


      abaabc

      abaabca
      abaabcac

      然后,求得每一個(gè)子串的所有前綴與后綴。

      前綴 指除了最后一個(gè)字符以外,一個(gè)字符串的全部頭部組合;后綴 指除了第一個(gè)字符以外,一個(gè)字符串的全部尾部組合。

      以第五列為例進(jìn)行演示。

      前綴

      a


      ab

      aba
      abaa

      后綴

      b


      ab

      aab
      baab

      因此,它的前綴后綴的公共元素的最大長度為 2

      求得原模式串 P 的子串對應(yīng)的各個(gè)前綴后綴的公共元素的 最大長度表 下圖。

      根據(jù)最大長度表 去求 next 數(shù)組next 數(shù)組相當(dāng)于“最大長度值” 整體向右移動(dòng)一位,然后初始值賦為-1。

      好了,獲取了 next 數(shù)組 后,KMP 算法 的操作就很清晰了。

      將模式串 P 與文本串 S 的字母一個(gè)個(gè)進(jìn)行匹配,當(dāng)失配的時(shí)候,模式串向右移動(dòng)。

      怎么移動(dòng)?

      比如模式串的 b 與文本串的 c 失配了,找出失配處模式串的 next數(shù)組 里面對應(yīng)的值,這里為 0,然后將索引為 0 的位置移動(dòng)到失配處。

      后記

      市面上好多講解 KMP算法 的文章的寫的太混亂了,很多人因此產(chǎn)生了恐懼,這一章目的就是為了能讓大家能大概理解 KMP算法 的運(yùn)行過程,不會(huì)畏懼 KMP算法 。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多