3.kmp演算法(knuth-morris-pratt )
該演算法的與rabin-karp一脈相承。也就是先排除可能不是的,在可能中逐一比較。
i.π函式的得到:
compute-prefix-function(p)1 m ← length[p]
2 π[1] ← 0
3 k ← 0
4 for q ← 2 to m
5 do while k > 0 and p[k + 1] ≠ p[q]
6 do k ← π[k]
7 if p[k + 1] = p[q]
8 then k ← k + 1
9 π[q] ← k
10 return π
ii.偽**演算法:
kmp-matcher(t, p)
1 n ← length[t]
2 m ← length[p]
3 π ← compute-prefix-function(p)
4 q ← 0 ▹number of characters matched.
5 for i ← 1 to n ▹scan the text from left to right.
6 do while q > 0 and p[q + 1] ≠ t[i]
7 do q ← π[q] ▹next character does not match.
8 if p[q + 1] = t[i]
9 then q ← q + 1 ▹next character matches.
10 if q = m ▹is all of p matched?
11 then print "pattern occurs with shift" i - m
12 q ← π[q] ▹look for the next match.
c語言演算法實現:
第 2 章 演算法
演算法 是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。指演算法在執行有限的步驟後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。演算法的每一步驟都具有確定的含義,不會出現二義性。演算法的每一步都必須是可行的,也就是說,每一步都能夠通過...
第2章 演算法分析
知識點 2.1 數學基礎 法則1 如果t1 n o f n 且t2 n o g n 那麼 a t1 n t2 n o f n g n 或者t1 n t2 n o max f n g n b t1 n t2 n o f n g n 法則2 如果t n 是乙個k次多項式,則t n n k 法則3 對於任...
第2章 演算法分析
最大子串行和問題的求解 演算法1 時間複雜度為o n 3 1 public static int maxsubsum1 int a 21617 return maxsum 18 演算法2 時間複雜度為o n 2 1 public static int maxsubsum2 int a 216 171...