我對kmp演算法過程中k next k 的理解

2021-10-01 04:18:33 字數 648 閱讀 2196

我是在看完這兩篇文章後,寫了一些對k=next[k]的理解。先看上面的文章再看下面的內容。

如果有誤,希望大佬們不吝指正

首先,先思考這幾個問題:

① 我們為什麼要求next陣列?

② k是個什麼東西?為什麼要賦給他?

求next陣列的初衷是希望,可以預處理在匹配字串時出現不匹配情況,從而快速跳過無需重複匹配的字元,它儲存的值是最長可匹配字首子串和最長可匹配字尾子串的長度(可以認為是其子串的結尾字元下標)

為每乙個模式串字元求對應的next值(cal_next函式)的求法與真實的字串與模式串匹配的求法是一致的,所謂的k=next[k]往前回溯,其實就是當我的str[k + 1] != str[q]時(下乙個字元不能匹配),希望通過之前已經求出的next陣列的值賦給k(此時模式串需要往前移動,怎麼移動?肯定是更改k的值呀,因為等等還要進行str[k + 1] 與 str[q]的比較呀)

k=next[k]中的第乙個k是什麼?

就是我移動之後的下標(最長字首子串移動到最長字尾子串的位置)

next中的k是什麼?

就是當我用str[k+1]去匹配下乙個字元時,發現不相等,但我的str[k]的時候是相等的,那在k之前(包括k)的字串我就需要知道讓他往前移動(也就是k需要被改變)

我對KMP演算法的理解

我對kmp演算法的理解 在過去的幾天,我讀了好幾篇關於 利用kmp演算法查詢字串的解釋 的文章。出於某些原因,沒有一篇是能令我接受和理解的。每當讀到 字首的字尾的字首.這些字眼時,我都有種拿頭撞牆的衝動。最後,經過30分鐘反覆閱讀clrs的幾段文章,我決定坐下來找一些關於文字串匹配的例子,並把過程寫...

我對KMP演算法的理解

kmp演算法的核心在於失配回溯表 pnext,相比於通過逐個比較來匹配字串的樸素演算法,kmp通過對模式串的分析,可以做到比較指標在主串上不回溯,一直向前。1.kmp如何實現不回溯?對於主串 t0 t1.tj,模式串 p在 pi處與 tj 失配,假設 p0 pi 1 存在最長相等前字尾,可以證明將模...

繼承過程中對函式中this的認識

1 doctype html 2 html lang en 3 head 4 meta charset utf 8 5 title document title 6head 7 body 8 script 9vara 14 15varb 20varc 25var ww b.cc 30 26var w...