kmp演算法我在網上搜了很多說明,但論簡潔易懂還屬阮一峰的那篇文章,強烈推薦大家看看
個人覺得唯一不足之處在於《部分匹配值》的計算方法描述有些不清楚,在此按自己的理解更詳細的詳解一下
取阮總文章中的例子進行說明,搜尋詞及《部分匹配值》如下圖如示:
一開始我一直以為單個字元進行計算,後來經過查詢資料發現我錯了,每個字元下面記錄的部分匹配值不是這單個字元的值,而是從開頭字元到此字元這個字串的值,這樣說可能有點抽象,下面以上圖為例詳細講解一下
為了方便說明這裡把搜尋詞記為:p=
說明:
另外,"部分匹配值"就是"字首"和"字尾"的最長的共有元素的長度,這個已經在阮總的檔案中解釋,
這裡再強調一點,其前字尾都是表示完全前字尾,即不包含自身的字首或者字尾
。
KMP演算法求取部分匹配值的方法
複習過程中看到的乙個簡潔明瞭的求取部分匹配值的方法,比看圖要好理解。字串結構上的幾個概念 字首 指除最後乙個字元外,字串的所有頭部字串。字尾 指除第乙個字元外,字串的所有尾部子串。部分匹配值 為字串的字首和字尾的最長相等前字尾長度。以 ab aba ababa ababa 為例 a 的字首和 字尾都...
模式匹配,KMP 演算法精華部分
kmp 宗旨 i指標在整個匹配過程是沒有回溯。當主串中的第i個字元與模式中第j個字元失配時,主串中第i個字元 i指標不回溯 應與模式中哪個個字元再比較?假設此時對應於模式中第k k 哪個字元繼續比較。則模式中前k 1個字元的子串必須滿足下列關係式 4 2 j為模式串當前不匹配處。k為模式串下一趟與主...
模式匹配之KMP演算法
前面講到過bf演算法,雖然簡單,但是效率比較低,kmp演算法對此做了很大改進,該演算法是由knuth,morris,pratt同時設計的,所以簡稱kmp演算法 為什麼說bf演算法效率低呢?比如s 34343434345 t 345 在位置3時,s中字元為 3 t中為 5 不匹配,所以又重新從s中第2...