• 沒有找到結果。

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

第二節 Bit-parallelism

Bit-parallelism 利用位元運算子模擬 NFA 在讀取輸入文字時,狀態 啟動或關閉的結果,判斷是否有 match 發生。NFA 是指非確定有限狀態 自動機,與傳統確定有限狀態自動機(Deterministic Finite Automaton, DFA)不同之處在於 NFA 允許在同一時間點時,有多個狀態啟動;而 DFA 在同一時間點時,只允許一個狀態啟動。

11

就上述特質而言,NFA 的特有運作方式與近似字串比對極為相似,

皆可允許一些例外的情況發生。而 NFA 如同樹狀結構,需要定義資料結 構與運作規則。圖 2-4 中,𝐷𝑛的數量為字串樣式的長度﹘edit distance,

即 4﹘2 ﹦2。

圖 2-4 非確定有限狀態自動機(NFA)

註:圖中為字串樣式 ATCG,輸入文字 A 之狀態

圖 2-4 即是一非確定有限狀態自動機,以階層顯示容許之誤差值,

即 edit distance;灰色代表狀態啟動,白色狀態除了在𝐷 與𝐷 之內代表狀 態未啟動,其餘皆忽略其狀態。特別須注意的是,由於必須保證所有的 輸入文字都會進入此 NFA,因此特別設定一個循環的機制在起點位置上;

而 edit distance 由階層來顯示,故在 edit distance = 0 階層中,可忽視後 兩位字元,edit distance = 1 階層則忽視前後各一位字元,edit distance = 2 則忽視前兩位字元。以圖 2-4 來看,在比對近似字串時,只須關注在 Start、

𝐷 與𝐷 兩個對角線,甚至 Start 也可忽視,因為此對角線狀態會永遠啟 動。

由於只需儲存𝐷 與𝐷 的變動,在實作時,以 2 進制呈現 NFA 的運 作,0 表示狀態啟動,1 表示狀態未啟動。而為了避免位元運算時,造 成溢位(overflows),所以兩條對角線中間必須有一個 0 當作分隔位元,

12

圖 2-4 的狀態即是0𝐷 0𝐷 。但需特別注意𝐷 與𝐷 中數字的儲存位置,以 圖 2-5 說明如下:

圖 2-5 說明如何儲存𝐷 與𝐷

以 0 和 1 來表示,在 bit-parallelism 之中的𝐷 為001,𝐷 為 011,有 別於一般人直覺地對應位置。而最終判別字串樣式與輸入文字是否相似 的關鍵位置,在於𝐷 011中,左起第一個位元是否為 0,其位置稱為 最終狀態(final state);圖 2-5 中,則其最終狀態是最右下角 3的位置。

因此,圖 2-5 的 NFA 狀態為 00010011,其中左起第一位與第五位為分隔 位元,對應到每個狀態為0 40 3 。Bit-parallelism 之演算式,其 中有許多位元運算子,像是 AND、OR、XOR,而 k 代表容許的 edit distance,

m 則代表字串樣式的長度。

1. ← (𝐷 ≫ (𝑘 + 2))|𝑀𝑇𝑗 2. D ← ((𝐷 ≪ 1)|(0𝑘+ 1)𝑚 𝑘)

3. & ((𝐷 ≪ (𝑘 + ))|(0𝑘+ 1)𝑚 𝑘 01𝑘+ ) 4. & ((( + (0𝑘+ 1)𝑚 𝑘)^ ) ≫ 1)

5. &(01𝑘+ )𝑚 𝑘

13

上述各行運算式可以呈現 NFA 內部的運作,說明如下(Hyyrö, 2008):

1. 此行代表 NFA 水平的移動。x 記錄了𝐷 有哪些狀態已啟動,而𝐷需 依據 x 來決定要啟動哪些狀態,只有𝐷 中已啟動的狀態才可以針 對當下讀入字元作對應的啟動。

2. 此行代表 NFA 對角線λ的移動。向左移 1 位元,目的是檢查對角線 𝐷裡第(𝑑 − 1)個狀態是否已啟動,若已啟動則第𝑑個狀態也將啟 動。

3. 此行代表 NFA 垂直的移動。向左移(k+3)位元,目的是檢查𝐷 + 中第

(𝑑 − 1)個狀態是否已啟動,若已啟動則啟動𝐷 中第𝑑個狀態。

4. 此行代表 NFA 對角線ε的移動。若𝐷中第𝑑個狀態已啟動,則𝐷中 第(𝑑 ≤ ≤ 𝑘 + 1)個狀態也將啟動。

5. 此行代表遮罩,為避免溢位而設,要重新將分隔字元設為 0。

在演算式中,第 2、3 行可能會造成𝐷的第一個狀態產生錯誤,由於 沒有前一個狀態可供檢查,故在此情況下,皆設定成前一狀態未啟動。

此外,第 1 行的𝑀𝑇𝑗代表當 match 時,NFA 應啟動的狀態,必須在比對 之前預先處理。而第 3、4、5 行皆有一個由 0 與 1 組成的表示式,例如 第 3 行的(0𝑘+ 1)𝑚 𝑘 01𝑘+ 。此表示式之次方代表重複次數,以 m=4, k=2 為例,此表示式為 00010111。

以下將舉一簡單範例,分解每個循環 NFA 之運作。給定 k 為 2,輸 入字串為 ATCGGG,字串樣式為 ATCG,則 m 為 4。首先需設定𝑀𝑇𝑗, 如圖 2-6,𝑀𝑇𝑗分別為𝑀𝑇1為 01100111、𝑀𝑇2為 01010110、𝑀𝑇3為 00110101 及𝑀𝑇4為 01110011。

14

圖 2-6 設定𝑀𝑇𝑗遮罩

接下來便可進入比對程序,即根據上述演算式進行運算 。每當

𝐷𝑚 𝑘 中,由右邊算起第(𝑘 + 1)個狀態,即最終狀態 3為啟動時,

便回報 match,其過程如圖 2-7 所示。

15

圖 2-7 模擬 bit-parallelism 內部 NFA 運作流程

相關文件