• 沒有找到結果。

Dynamic programming

第二章 近似字串比對演算法

第一節 Dynamic programming

第二章 近似字串比對演算法

前一章簡述了字串比對的種類,近似字串比對與固定字串比對最大 的差異就是容許誤差。而實務應用中,使用者並非擁有詳盡的資訊,以 網際網路搜尋引擎為例,輸入關鍵字師範大學的結果,可能有台灣師範 大學、屏東師範大學或彰化師範大學等等,其應用較為廣泛。因此,本 章將著重於近似字串比對相關的演算法簡介,並配合範例來解說其運作 模式。本章分別介紹 dynamic programming、bit-parallelism 兩種演算法與 綜合分析,茲說明如下:

第一節 Dynamic programming

Dynamic programming是非常著名的近似字串比對演算法,其運用範 圍非常廣泛,尤其dynamic programming可以給予使用者非常詳細的資訊,

往後也有許多演算法是基於dynamic programming發展而來的。

傳統dynamic programming主要分為兩個步驟,第一個步驟為找出 edit distance,另一步驟為back-traverse table。

一. Edit distance i.

ii. 𝑗

iii. { ( ) 1 + 𝑚 𝑛( )

利用上述演算式得以計算edit distance,首先要求得字串樣式與輸入 文字兩個字串的edit distance,透過上述的方程式,將字串樣式以 表示,

輸入文字以 表示,以建置一個二維向量的表格。舉例來說,假設有一

個字串樣式為kittern,另有一個輸入文字為sitting,則利用運算式i與ii做

8

初始化的動作。如圖2-1所示:

圖 2-1 初始化 dynamic programming 以二維表格表示

初始化表格後,接著要循序漸進地透過運算式iii之結果來填滿表格。

的位置時,首先判別字串樣式的第i個字元是否與輸入字串的第j個 字元相同,若相同則將左上方的值填入此位置;若不相同則將正上方

、左上方 、左前方 三處的值,取其最小值加1後填入此

位置。以 為例,因為 為 與 為 不相同,且左上方的值為最小值,

因此將其加1後填入此位置,最後得 1。其他位置則以此類推,但 需依序由左至右,由上往下填表,索引值參照C程式語言從0開始。

9

圖 2-2 計算 dynamic programming

二. Back-traverse table

所謂back-traverse table即是利用圖2-2之結果,往回追蹤並記錄字串 樣式轉換成輸入文字之過程。經由前一步驟填滿表格後可以得到 , 換句話說,字串樣式kitten可透過三次前述之插入、刪除、替代等動作轉 換成輸入文字sitting,其追蹤準則如iv所示。

iv. 𝑚 𝑛( )

在運算式iv中, 表示最右下角之位置,即是指圖2-3中 之位置,

而左前方位置的值為最小值,故儲存其走向並繼續計算走向直到 為 止。

10

圖 2-3 透過 back-traverse 追蹤過程

圖2-3箭頭所指方向即是所儲存的走向,倘若往左前方走,表示插入;

往正上方走則表示刪除;若往左上方走,則須判別其值是否有減1,有 則表示替代,沒有則表示match。因此圖2-3所呈現的資訊,說明字串樣 式於 需插入一個g於n後面,並於 各需一個替代將e換成i、將 k換成s。

而其他位置的值各別表示,在其位置上字串樣式子字串與輸入文字 子字串相對的edit distance。如圖2-3, 1指出字串樣式子字串ki與 輸入文字子字串si的edit distance為1。

相關文件