• 沒有找到結果。

字串的比對

在文檔中 中 華 大 學 碩 士 論 文 (頁 30-34)

第二章 文獻探討

第二節 字串的比對

本研究所發展的電腦輔助評分系統中,有許多的技術必須使用到 到文字、圖形及表格的比對,以下就字串比對的文獻探討說明如下。

字串搜尋在文書處理(Word processing)佔有非常重要的角色,

而各種演算法都是希望從長度為 N 的本文(text)中,找出長度為 M 之樣式字串(pattern),通常本文就是一段文章,而樣式可能是某 段文字,事實上字串的搜尋和樣式的比對(pattern matching)兩者 息息相關[12] [14]。

在此先下個字串比對的定義:給定兩個字串 T 及 P,長度分別是 t 及 p,其中 t≧p,在字串 T 中尋找所有字串 P 出現之處,以下說明 字串比對相關的演算法[31] [33]:

壹、Brute-Force 演算法

Brute-Force 比對方法就是測試本文字串可能與樣式(pattern)

字串的每個位置比對,以檢查是否比對成功。此種演算法如圖 2-1 所示。將字串 T 與另一字串 P 按照位置依次比對,若 P 字串的每個字 元其位置均比對成功,則輸出其比對成功之起始位置,否則就將字串 P 移至字串 T 的下一個位置再重新比對。圖 2-1 中藍色框表示比對成

T a b c a b c b d P a b c b

a b c b a b c b

a b c b a b c b 圖 2-1 Brute-force 演算法

貳、Knuth,Morris 和 Pratt 演算法

1970 年由 Knuth、Morris 和 Pratt 三位學者所發現的一種新字 串搜尋法,演算法是經由上演算法做一些技巧上的改良,即使在最壞 的情況下,只需要 N 次字元的比較。可能發生以下三個狀況[31] [32]

[36] [37]。

狀況一:

字串的第一個字元在 P 中沒有重複出現,如圖 2.2 所示, P1=a 在字串 P 中沒有重複出現,而 P4與 T4發生比對失敗,則我們可以直 接將 P1 移至 T4的位置,重新比對。

1 2 3 4 5 6 7 8 9

T a b c d a b c b d P a b c b d

1 2 3 4 5

a b c b d

1 2 3 4 5

圖 2-2 Knuth、Morris 和 Pratt 演算法:狀況一 move

狀況二:

字串的第一個字元在 P 已經比對成功的子字串中有重複出現,如 圖 2.3 所示, P1=a=P4,而在 P5發生比對失敗,則我們可以將 P1移 至剛才 P4之處,重新比對。

1 2 3 4 5 6 7 8 9

T a b c a a b c b d P a b c a d

1 2 3 4 5

a b c b d

1 2 3 4 5

圖 2-3 Knuth、Morris 和 Pratt 演算法:狀況二

狀況三:

在 P 已經比對成功的子字串中有字首重複出現,如圖 2.4 所示,

P1,2=P5,6,而 P7發生比對失敗,則我們可以移動字首重複之處,做下 一次的比對。

1 2 3 4 5 6 7 8 9 10 11

T a b c d a b c b d a e P a b c d a b e

1 2 3 4 5 6 7

a b c d a b e

1 2 3 4 5 6 7

圖 2-4 Knuth、Morris 和 Pratt 演算法:狀況三 move

move

其減少比對次數。如圖 2-5 所示,若在第 j 個位置發生比對失敗,則 可移至有重複之字首的位置上,繼續比對。這個演算法的時間複雜度 是 O(t+p)。

T:

P:

圖 2-5 Knuth、Morris 和 Pratt 演算法之基本想法

參、Boyer、Moore 演算法

這是由 Boyer 和 Moore 二位學者所提出之演算法,如同 KMP 演 算法一般,它也是先對字串 P 做處理,訂出一些移動規則,而最大的 不 同 之 處 為 它 是 由 字 串 P 的 末 端 向 左 比 對 。 我 們 大 致 敘 述 Boyer-Moore 演算法的法則[30] [31] [36] [37]。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

T: a b c

P: a d b c

1 2 3 4 5 6 7 8 9 10

shift

P: a d b c

1 2 3 4 5 6 7 8 9 10

圖 2-6 Boyer、Moore 演算法 shift

match mismatch

1 j p

j p 1

t

如圖 2-6 所示,假設字串 T 與字串 P 分別在第 12 與第 8 個位置 發生比對失敗,則我們在 P8的左邊找是否有和 T12一樣的字元(如 P4, 超過 2 個字元的話,取位置最大的),若有,則可將它移至剛才發生 比對失敗之處(如將 P4移至 T12),從新開始比對。

所以 Boyer-Moore 演算法是從 P 字串的末端由右至左比對,在比 對字串前,先對 P 的每個位置其三個法則的值給計算出來,一旦發生 比對失敗時,就可以參考而計算出下一次要比對的位置,節省比對次 數。此演算法的時間複雜度與 KMP 演算法一樣,為 O(t+p),不過 實際應用上,比 KMP 演算法較有效率。

肆、字串比對問題與文件比對問題之比較

基本上就字串比對問題來說,為在一個很長的字串之中尋找一小 段文字,就好比關鍵字在一長串文字搜尋一般,就我們的問題來說,

文件 A 及 B 的字數 m 及 n 均遠大於 k,若要套用如上所述之字串比對 演算法,必需先將一份文件(如 B)從頭依次取 k 個字元和另一個文 件(如 A)做字串比對,如此要做 n-k+1 次,則時間複雜度為 O((m

+k)×(n-k+1)),即為 O(m×n),所以並不實際。

在文檔中 中 華 大 學 碩 士 論 文 (頁 30-34)

相關文件