/*
* kmp 模式匹配演算法
*/#include #include using namespace std;
/* * 計算模式串的next陣列
* 模式串既做主串,又做模式串,進行匹配
* 時間複雜度為o(m),m為模式串的長度
*/void countnext(char* strpattern, int len, int* next)
else if (strpattern[i] == strpattern[j]) else
} else }}
/* * 利用kmp演算法進行模式匹配
* kmp演算法的時間複雜度為o(n)+o(m) = o(n+m)
* 其中n為主串的長度,m為模式串的長度,需要先算出next陣列
* kmp演算法的核心就是在搜尋模式串的過程中,主串的指標不會回朔
* 只會盡可能的不斷向後移,避免無效的回朔,節約了時間,適合於主串
* 中有較多部分匹配模式串的情況,否則如果沒有什麼回朔,也就不需要用kmp演算法了
*/int indexkmp(char* strmain, int lenmain, char* strpattern, int lenpattern, int pos, int* next)
else
} if (j >= lenpattern)
return -1;
}int main()
else
delete next;
return 0;
}
模式匹配演算法(KMP演算法詳解)
從主串s goodgoogle 中找到t google 這個子串的位置 public static intindex string s,string t else if j t.length else 思路 利用已經部分匹配這個有效資訊,保持i指標不回溯,通過修改j指標,讓模式串盡量地移動到有效的位...
模式匹配的KMP演算法詳解
這種由d.e.knuth,j.h.morris和v.r.pratt同時發現的改進的模式匹配演算法簡稱為kmp演算法。大概學過資訊學的都知道,是個比較難理解的演算法,今天特把它搞個徹徹底底明明白白。注意到這是乙個改進的演算法,所以有必要把原來的模式匹配演算法拿出來,其實理解的關鍵就在這裡,一般的匹配演...
模式匹配的KMP演算法詳解
from 模式匹配的kmp演算法詳解 這種由d.e.knuth,j.h.morris和v.r.pratt同時發現的改進的模式匹配演算法簡稱為kmp演算法。大概學過資訊學的都知道,是個比較難理解的演算法,今天特把它搞個徹徹底底明明白白。注意到這是乙個改進的演算法,所以有必要把原來的模式匹配演算法拿出來...