這周主要學習了kmp演算法
簡單來說呢,我覺得kmp演算法就是兩個部分,1是求next陣列,2是用next陣列
先說求next陣列
首先next【i】陣列代表的的意思是當第i位失配時,我的匹配串能跳轉的最優位置,什麼是最優位置呢,這就取決於第i位之前的字串自身了
如果它存在這樣的關係,這個圖說明了很多,對後面next陣列求得迴圈節問題也很有幫助
那麼next【i】就應該指向p【k】所在得下標處
接下來就是演算法實現了(注意得就是如果第一位就沒能匹配成功,那就得特判一下,即都同時往後移動一位)
void getnext(int len)//只需要獲得字串的長度
else}}
接下來就是使用next陣列進行匹配了,這個相應得就好理解了,無非就是跳不跳,跳到哪得問題了
int kmp(int len1,int len2)
else
}if(j == len2)
else
}
最後得return是返回得出現的位置,i - j + 1為匹配成功時母串得位置所在~~ KMP演算法學習
先貼上一點 等腦子清醒點再好好理解 求next陣列 public static int getnext string pattern else else return next public static int search string src,string pattern,int nextva...
KMP演算法學習
一 什麼是kmp演算法 knuth morris pratt 字串查詢演算法 常簡稱為 kmp演算法 是在乙個 主文字字串 s內查詢乙個 詞 w的出現,通過觀察發現,在不匹配 發生的時候這個詞自身包含足夠的資訊來確定下乙個匹配將在 開始 以此避免對以前匹配過的字元重新檢查。在原串中匹配模式串 二 k...
KMP演算法學習
1.kmp演算法簡介 2.樸素的匹配演算法 在介紹kmp演算法之前我們來看看那樸素的匹配演算法。定義 我們是在主串中搜尋模式串。如下圖當主串在e的位置與模式串發生失配時 e前面的都是匹配的 樸素的匹配演算法做的是,將模式串後移一位在去匹。我們可以思考這樣做是否有意義,因為模式串c前面是與主串匹配的,...