KMP演算法之我見

2022-03-22 19:18:35 字數 683 閱讀 2533

預備談談下面這些,可能有補充

kmp演算法的用途;

kmp演算法之前的暴力;

kmp演算法預備知識與概念;

kmp演算法模板:

kmp演算法的習題。

主要用於模式匹配(字串匹配)。給定乙個長的字串(target string)和乙個短的字串(pattern string),要求判斷pattern string是否是target string的子串,若是,則返回子串的首個字元的下標,若否,則返回-1。

解決這個問題最常想到的辦法是brute force,即從target string第乙個字元開始與pattern字元比較,如果相等則比較target string和pattern string的下乙個字元,若不等則返回到target string中相等的字元的下乙個字元。換句話說,假設我們用target和pattern分別表示兩個字串的指標,那麼每一次比較不管兩個string匹配到何種程度,只要不是完全匹配,那麼target永遠只能增加1,這個演算法的複雜度為o(mn)。

m = strlen(target string)

n  = strlen(pattern string)

而這個接近n2的演算法在n與m較大時顯得非常效率低下。於是kmp演算法粉墨登場,其實kmp演算法與bf演算法的區別在於kmp演算法巧妙地消除了指標i的回溯問題,只需要確定下次匹配j的位置即可,是的問題複雜度由o(mn)下降到o(m+n)

KMP演算法之我見

kmp演算法 時間複雜度o m n 最核心的是求next陣列,然後再根據next陣列來進行模式匹配。因此分為兩部分 next陣列記錄的是模式串的特徵,即最長相同前字尾 考慮如下模式串p abcdabc 它的字首有 a,ab,abc,abcd,abcda,abcdab 它的字尾有 c,bc,abc,d...

包子演算法之我見

幾天前發了乙個部落格,包子演算法,討論很熱烈,今天我來說說我的看法 首先,我們從問題的特點分析一下 1 包子製作的工藝上,菜包子和肉包子有不同,肉包子蒸的時間要更長,且在蒸的過程中一般不會打斷,換包子這種情況,代價太大。2 從購買者的角度上看,購買者的需求各異,搭配購買的概率比較大,只賣一種包子的雖...

BPE演算法之我見

bpe演算法本質是基於合併的,而不是基於切分的,理解這一點很重要。在bpe整個迭代的過程中,是基於 詞表 的,但是最後要生成的是 子詞表 拿來用的也是 子詞表 拿 裡的例子來說,最開始詞表長這樣 l o w 5 l o w e r 2 w i d e s t 6 n e w e s t 3 如果你不...