對kmp演算法的乙個小小的總結

2021-07-04 03:44:40 字數 733 閱讀 6120

今天重新回顧了 一下之前了解的那個kmp演算法。這個演算法來自資料結構的字串的模式匹配;

字串的模式匹配的最先是  得到乙個效率低的傳統匹配演算法。

int i=0;int j=0;

int l1,int l2;//定義目標的字串和我們現在的字串

if(l1while(iif(t[i]==p[j])

else

if(j>=l2)

return i-j+1;

這個是最先的乙個方法進行字串的匹配,但是效率低下;

所以又有了 優化

通過字串的模式匹配的思想,得到乙個特徵向量。 得到乙個next陣列。這個求陣列的方法不在此介紹

,具體可以參考張銘的資料結構。  

接下來詳細的分析下kmp 的**;

首先得到乙個優化的next陣列

void tonext()  //這個陣列的內容只與本身的字串有關,與目標串無關。

else next[i]=j;  //不需要優化,陣列的值為 匹配所在的位置

}else j=next[j];  //如果匹配失敗,則給j乙個next的值,作為偏移量}}

接下來就是 kmp 的具體操作 部分了

int kmp()

else i=next[i];  //否則的話 通過next陣列來選擇跳過i個值

}if(i>=m)  //判斷是否匹配完成

else return -1;

}小小的總結  留待更多的補充、

this乙個小小的迷惑

include using namespace std class b b b class b void virtual print 不知道為什麼列印的不一致呢 自己的理解 由於d繼承自b,構造d的時候需要先構造b,在b的建構函式中的this內部的具體情況如下圖,此時d還沒有構造出來,vfptr的詳...

小小的總結

知道了f12是重新命名的快捷鍵,shift ctrl n是建立新資料夾的快捷鍵。知道了乙個c語言程式包括哪些部分 標頭檔案 include主函式入口main 花括號 明白了建立場景不是建立資料夾,而是建立scene,將它重新命名為game,用於儲存遊戲。錨點是乙個影象本身方塊與本身方塊的距離。回憶了...

乙個小小的爬蟲技巧

寫過爬蟲的同學對 requests 庫應該非常熟悉了,這個庫是如此的好用。但今天我就遇到了使用瀏覽器可以正常訪問,一旦使用 requests 去 get 此 ip 就會被封,然後瀏覽器也無法訪問。需要等待幾個小時之後才能訪問。過了幾個小時,我又使用瀏覽器訪問了此 url a,開啟谷歌瀏覽器的開發者工...