字串查詢 KMP演算法 優化next陣列

2021-10-10 14:22:35 字數 470 閱讀 7998

#include #include int getnextval(char *partner, int *next)

else

}else

}return 0;

}int kmp(char *str, char *partner)

else

}if (j == plen)

return pos;

}int main()

如果碰到匹配串類似"aaaac" next陣列([-1,0,1,2,3]) 目標串是"aaaababaa"時 此時i=4 j=4  c和b匹配不成功,j = next[j] ----> j = 3 下一輪迴圈時 str[i] 依然和 par[j] 不想等 繼續next[j] 一直等到j = -1 也不成立  所以有點浪費

getnextval  做了優化  得到的nextval陣列為[-1,-1,-1,-1,0]

KMP 演算法並非字串查詢的優化

演算法書和資料結構書對kmp演算法多有介紹,稱只需對字串掃瞄一遍不需回溯云云.然而,它恐怕只應該作為一種思想存在 用於實際的字串查詢並不理想.要費勁心血實現和優化它,才能在特定的字串上略微超過 也可能略微遜過 std search.kmp演算法的基本思想,是利用需要匹配字串的自身資訊來避免回溯.這裡...

字串查詢演算法kmp

字串查詢最簡單的方法就是乙個乙個地 滑動 查詢。這樣查詢演算法複雜度可定很高,假設pattern的長度為m,文字txt的長度為n,那麼演算法複雜度為o m n m 1 kmp模式搜尋演算法 kmp knuth morris pratt 我只認識knuth,大名鼎鼎的高納德老頭子嘛。kmp演算法的基本...

字串查詢演算法kmp

給定乙個文字串s,和乙個匹配串p,要求查詢p第一次在s中出現的位置。常見的方法如暴力搜素,逐個匹配s i p j 若匹配,下標後移。不匹配,i回溯到這次匹配前的下一位置,j置為0,重新匹配。最壞情況,時間複雜度o n m int violencesearch char s,char p else i...