String 匹配演算法(2) 第32章

2021-05-24 10:40:12 字數 1141 閱讀 3856

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...