前面的文章中講述k m p演算法的的基本實現,這裡提供 了改進後的k m p演算法的實現 ,手動驗算過,靠譜!!
相比於之前,就是在計算next值的同時多了一次比較,如果a位字元與它的next值指向的b位字元相等,則a位的nextva就指向b位的nextval,如果不相等,則該a位的nextval值就是它自己a位的next值.新增鏈結描述
#include#include#includeint next[100];//全域性變數
int kmp(char s,char t)
return -1;
}//改進的next演算法
void get_next(char *ch,int *next)else
}else}}
int main()
int i=kmp(s,t);
if(i!=-1)else
}
KMP及KMP改進演算法
kmp 看毛片 演算法確實很難理解,上網搜了半天想了很久才大概想明白。kmp演算法精華在於next陣列 部分匹配值 即next陣列就是 字首 和 字尾 的最長的共有元素的長度。以 abcdabd 為例,a 的字首和字尾都為空集,共有元素的長度為0 ab 的字首為 a 字尾為 b 共有元素的長度為0 ...
KMP演算法中改進的nextval陣列
我們在上篇文章中講到的next陣列其實再某些情況下是有缺陷的,例如在模式串s aaaab 和主串t aaabaaaab 匹配時,當在i 4,j 4時,產生失配,由下圖的next陣列中指出還需進行 i 4,j 3 i 4,j 2 i 4,j 1這三次比較。但是我們發現這樣的比較是沒有意義的,因為s串中...
資料結構 改進的KMP演算法
ps 若不清楚kmp演算法的執行過程,可參考資料結構 kmp演算法 如果我們要對下面的主串p和模式串p進行匹配 步驟一 i 3,j 3 模式串 abab 對應的 next 陣列為 1 0 0 1 0 0 1 2整體右移一位,初值賦為 1 當模式串 p 和主串 s 進行匹配時,發現b跟c失配,於是模式...