kmp學習心得

2021-08-21 22:13:07 字數 910 閱讀 5951

kmp是一種模板字串跟文章對比,查詢文章是否有模板字串的演算法。

kmp最重要的就是對next陣列的理解跟建立:

首先看暴力的演算法,對於模板串乙個個去跟文章對比,如果不匹配,則退回模板串最開始重新對比,這樣的演算法顯然時間複雜度很高,因此就有了kmp的誕生。

next陣列是對於長度為s的字串他的前i個字母構成的子串中,最長的即使子串字首又是字尾的長度記為next[i]。

構建next陣列的方法:

int nex[1000005];

char a[1000005];

void get_next()

else

j=nex[j];

}}

next陣列的應用:

1.對於迴圈節問題,n長度的字串是由部分子串迴圈構成的,求最小迴圈節即為:字串總長減去最大相同的字首字尾,即n-next[n]得到的結果就是最小迴圈節長度。

求最大迴圈次數也是相同思路,最後用n/(n-next[i])

2.找最短的相同前字尾,對於乙個字串,next陣列直接求值求出來的必然是最長的相同前字尾,那麼怎麼求最短的相同前字尾呢,可以從最長的入手,向前遞推,直到next[j]=0,則j的長度就是我們想要的最短的相同前字尾。可在求出j值後優化next陣列:

for(int i=1;i<=n;i++)

kmp演算法:

void get_next(int len)

else

j=net[j];

}}int kmp()

else

j=net[j];

if(j==len2)

ans++,j=0,flag=1;;

}return ans;

}

學習心得 python學習心得

自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...

學習心得 我的學習心得

我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...

字串匹配演算法 KMP學習心得

2009年4月22日 12 56 slyar kmp演算法是一種改進的字串匹配演算法,由d.e.knuth與v.r.pratt和j.h.morris同時發現,因此人們稱它為克努特 莫里斯 普拉特操作 簡稱kmp演算法 這週的資料結構課講的是串,本以為老師會講解kmp演算法的,誰知到他直接略過了.沒辦...