bf算法和kmp算法的優(yōu)缺點 kmp算法什么意思?
kmp算法什么意思?KMP算法之所以被稱為KMP算法,是因為這個算法是由三個人提出的,取三個人名字的首字母作為算法的名字。實際上,KMP算法與BF算法的區(qū)別在于,KMP算法巧妙地消除了指針I(yè)的回溯問題
kmp算法什么意思?
KMP算法之所以被稱為KMP算法,是因為這個算法是由三個人提出的,取三個人名字的首字母作為算法的名字。實際上,KMP算法與BF算法的區(qū)別在于,KMP算法巧妙地消除了指針I(yè)的回溯問題,只需確定下一個匹配J的位置,將問題的復雜度從O(MN)降低到O(MN)。在KMP算法中,為了在匹配失敗時確定J在下一次匹配中的位置,引入了next[]數組。next[J]的值表示P[0]中最長后綴的長度。。。J-1]等于相同字符序列的前綴。next[]數組的定義如下:1)next[J]=-1,J=0.2)next[J]=max(k):0<K<J P[0。。。K-1]=P[J-K,J-1]3)next[J]=0,例如:P a B a J 0.12.34 next-1.001 2,即next[J]=K>0時,表示P[0。。。K-1]=P[J-K,J-1]。因此,KMP算法的思想是:在匹配過程中,如果存在不匹配,如果next[J]>=0,則目標字符串的指針I(yè)不變,模式字符串的指針J移到next[J]的位置繼續(xù)匹配;如果next[J]=-1,則I移到右邊,將j設置為0以繼續(xù)比較。
什么時候用bf算法好,什么時候用kmp算法好?
如果要匹配的模式字符串中幾乎沒有重復字符,則BF正常。普通字符串幾乎是這樣的。當模式串中存在多個重復子串時,KMP的效率比BF高很多