當前位置:
首頁 >
字符串匹配之KMP---全力解析
發布時間:2025/3/11
29
豆豆
生活随笔
收集整理的這篇文章主要介紹了
字符串匹配之KMP---全力解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PS:文章是轉載的 下方的微信公號不是我的 是原作者的。附上原文鏈接:字符串匹配之KMP jeliy王的博客
近日,一同學面試被問到字符串匹配算法,結果由于他使用了暴力法,直接就跪了(現在想想這樣的面試官真的是不合格的,陳皓的一篇文章說的很好,點擊閱讀)。字符串匹配方法大概有:BF(暴力破解法), 簡化版的BM,KMP,BM,一般情況下,大家聽說最多的應該就是KMP算法了。之前學習過,由于時間間隔比較大,記不太清楚了,今天上網查了下,發現寫KMP的文章是不少,但是真正清晰簡潔就沒有了(july的文章太繁瑣),所以自己就研究了一晚上,弄清楚了kmp的計算過程,也就在此分享下。
1. 如果你現在完全不知道KMP是個神馬玩意,請先閱讀 阮一峰 的《字符串匹配的KMP算法》。
KMP算法最難理解的是就是next數組的計算過程,在此分享下我所理解的kmp算法以及next數組的計算過程(如果看前面理論比較頭大,可以先看后面例子的計算過程,在回過頭來看理論就會釋懷): 1. next數組的計算過程:? 申明:next數組下標從0算起,?定義next[0]=-1, next[1]=0; 模式串記為T[ ] 假如求 T中 j+1 位的next[j+1]: 將其 前一位(模式字符)的內容與其前一位的next值(next[j])的內容(T[next[j]])進行比較: 如果它們相等(T[j]==T[next[j]]),則next[j+1] = next[j]+1; 如果他們不相等,則繼續向前尋找,直到找到next值對應的內容與前一位相等為止,則在這個next值上加一; 如果直到第一位都沒有與之相等,則next[j+1] = 0;? ? ? ? ? ? 例: 有模式串 "abaababc" j=0時,next[0] = -1 ; j=1時,next[1] = 0; j=2時,t1!=t0, k=next[0]=-1, next[2]=0; j=3時,t2==t0, next[3] = next[2]+1 = 1; j=4時,k=next[3]=1, t3!=T[1], k=next[1]=0, T[3]==T[0], next[4]=next[1]+1 = 1; j=5時,k=next[4]=1, T[4]==T[1], next[5]=next[4]+1=2; j=6時,k=next[5]=2, T[5]==T[2], next[6]=next[5]+1=3; j=7時,k=next[6]=3, T[6]!=T[3], k=next[3]=1, T[6]==T[1], next[7]=next[3]+1 = 2;?????? 2. 上述算法的實現:
本篇文章主要關注next數組的計算及kmp主算法的實現。
要了解next數組是什么?
為什么要這么計算next數組?
參見下一篇文章(字符串匹配之KMP算法(續)---還原next數組 ).
如果你覺得本篇對你有收獲,請幫頂。
另外,我本人開通了微信公眾號--分享技術之美,我會不定期的分享一些我學習的東西. 你可以搜索公眾號:swalge或者掃描下方二維碼關注我
(轉載文章請注明出處:?http://blog.csdn.net/swagle/article/details/23969683 )
總結
以上是生活随笔為你收集整理的字符串匹配之KMP---全力解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计组学习笔记(一):浮点数的表示和运算
- 下一篇: 计算机图形学颜色表示,计算机图形学 颜色