輪講 第3回 Chapter 3 Exact Matching: A Deeper Look at Classical Methods 山田 崇 2002/10/25 Overview (1) Apostolico-Giancarlo の方法 (1986) 比較の回数は高々 2m 回. BM 法の最悪の計算量に関するおはなし Cole による証明 (1994) • 比較の回数は高々 4m 回. KMP 法の前処理 パターンが複数あるときのマッチング Aho-Corasick の方法 (1975) Overview (2) マッチングの応用 DNA,たんぱく質のマッチング ワイルドカードを含むマッチング 2 次元のマッチング 正規表現を用いたパターンマッチ なぜ PowerPoint なのか? 論文構成法でプレゼンの講義がなくなった. 「時間の制約」(マクドナルド先生) 人前でプレゼンする機会の減少 観衆がいらっしゃる中でプレゼンの練習をしたい 研究室の ノートPC,プロジェクタの使用方 法の習得 アニメーション Apostolico-Giancarlo 法 AG 法 概要 T 上のどの文字も,P 上のどれかの文字といったん マッチしたら,2 度比較されることはない 比較の回数は高々 2m • すべての比較の結果は「マッチ」か「ミスマッチ」 • ミスマッチは高々 m 回しか発生しない • マッチも高々 m 回しか発生しない. 全体の計算量も O(m) ここでは AG 法をさらに改善したものを紹介 シフトの方法は BM 法をシミュレート BM 法がみつけるミスマッチはすべて発見 冗長なマッチを減らすことで比較回数を削減 Key Ideas アルゴリズムを phase ごとに分割(1) アルゴリズムを分割 分割したものを compare/shift phase と呼ぶ. 各 compare/shift phase には順番に 1, 2, …, q (≦ m) と番号をふる. それぞれのフェーズでの仕事 1. P の右端が T のある文字のところにある 2. P と T を右から左に比較していく 3. 「すべての P がマッチする」か「ミスマッチが見つ かる」状態まで 2. を繰り返す 4. P を BM 法のルールに従ってシフトし次 phase へ Key Ideas アルゴリズムを phase ごとに分割(2) 先週導入した図を今回も利用 T の position ×○○○ 1 ×○○○○ 2 3 ○:マッチ ×○○○ ×:ミスマッチ compare/shift phase [Nakayama, 2002] Key Ideas BM 法からの修正(1) 1. 長さ m の配列 M を用意する M( j ): P の suffix が T の [ j -M( j )+1.. j ]の範 囲に現れることを保証 各 phase ごとに M の要素は (少なくとも 1 つ) 書き換えられる P の suffixj T × ○ ○ ○ ○ P × ○ ○ ○ ○ M( j ) には k ≦ 4 を満たす k を代入 Key Ideas BM 法からの修正(2) 2. N と M を利用してマッチ・ミスマッチを予 測する 例: M( h ) = α,Ni = β,α > β のとき (下図) h α T j i β P この範囲は○ ここで× 比較しなくても (過去の遺産から) 情報を得ることができる Key Ideas BM 法からの修正(3) さらにわかること Ni = i のとき ここに P が出現 h j α T i β P 予測により○ 比較により○ ここで× Ni > i のとき h α T j i P β 予測により○ 比較により○ ここで× ミスマッチを 予言できる One phase in detail 詳細を述べるにあたっての準備 P の右端は T の j の位置にいるものとして, phase は始まる h=j i=n BM 法と同様に 右から左に向かって順番に比 較する ミスマッチが見つかったら BM 法と同様にシフト P が T 中に見つかったら BM 法と同様にシフト シフトしたら その phase は終了 One phase in detail アルゴリズム(1) 1. M(h) がまだ定義されていない,もしくは M(h) = Ni = 0 のとき T(h) と P(i) を下記に従って比較 1. T(h) = P(i) かつ i = 1 のとき T [h..j] に P が存在している M(j) = n としてシフトし,phase を終了する j T ○ P ○ すでに○ One phase in detail アルゴリズム(2) 1. M(h) がまだ定義されていない,もしくは M(h) = Ni = 0 のとき T(h) と P(i) を下記に従って比較 2. T(h)=P(i) かつ i > 1 のとき h := h-1,i := i - 1 として同じ phase を繰り返す j ○ T P ○ ここはまだわからない すでに○ One phase in detail アルゴリズム(3) 1. M(h) がまだ定義されていない,もしくは M(h) = Ni = 0 のとき T(h) と P(i) を下記に従って比較 3. T(h)≠P(i) のとき ミスマッチが発生していることに他ならない M(j) := j - h として BM 法と同様のシフトを行い phase 終 了 P の suffix j × T P × すでに○ One phase in detail アルゴリズム(4) 2. M(h) < Ni のとき P は T と [i - M(h) + 1.. n] の範囲でマッチして いることが予測できる i := i - M(h),h := h - M(h) として繰り返す 予測により○ h j M(h) T P Ni i ここはまだわからない すでに○ One phase in detail アルゴリズム(5) 3. M(h) ≧ Ni かつ Ni = i > 0 のとき 予測によりP は T と [i - Ni + 1.. j] の範囲で マッチしている(= T のその範囲で P が現れる) ことがわかる M(j) := j - h としてシフト,phase 終了 予測により○ h j M(h) T P Ni i すでに○ One phase in detail アルゴリズム(6) 4. M(h) > Ni かつ Ni < i のとき 予測によりP は T と [i - Ni +1 .. n] の範囲で マッチし, i - Ni でミスマッチすることがわか る M(j) := j - h としてシフト,phase 終了 予測により○ h j M(h) T P Ni i 予測により× すでに○ One phase in detail アルゴリズム(7) 5. M(h) = Ni かつ 0 < Ni < i のとき 予測によりP は T と [i - Ni +1 .. n] の範囲で マッチすることがわかる h := h - M(h), i := i - M(h) として同じ phase を繰り 返す 予測により○ h j M(h) T P Ni i ここはまだわからない すでに○ BM 法の計算量 Cole による解析 概要 BM 法の計算量が worst-case で O(m) となる ことを示す シフトは good suffix rule のみ使い,かつ P が T に現れない場合に O(m) となることを示して P が T に現れる場合にも O(m) となることを示し そのあと bad character rule も使った場合にも O(m) となることを示す 準備(1) 新しい変数の導入 AG 法のときと同様に BM 法を compare/shift phase に分割 phase i で si : phase の最後でシフトする量 ti : 比較してマッチした T の substring gi : 以前のphaseで比較されたことのある文字の 数 g’i : phase i で初めて比較した文字の数 Σi(gi + g’i ) : 比較した延べ文字数→この値が O(m) であることを示すことが goal 準備(2) string に関する補題 βi:=βββ…βとおく(β: string) i個 Lemma 1 γ,δを空ではない string とする.このとき,γδ=δγが成り立つならば,ある string ρとある整数 i, j が存在して,δ=ρi,γ=ρjとなる. 【証明】|δ|+|γ| に関する帰納法により示す. |δ|+|γ|=2 のとき: δ=ρ,γ=ρ,i = j =1 のとき,またそのときのみγδ=δγが成り立つ. 以下 |δ|+|γ| > 2 のときについて考える. |δ| < |γ| ならば γδ=δγより,δはγの prefix となる.γ=δδ’ とおけば,γδ=δγよりδδ’δ= δδδ’.両辺左からδを取り除いても等号が成立.すなわちδ’δ=δδ’.ここで,|δ’|+|δ|=|γ| < |δ| +|γ| であるから,帰納法の仮定よりあるρ,i,j が存在してδ=ρi,δ’=ρj.このときγ =ρi + j. |δ|=|γ| ならばδ=γ=ρ,i = j = 1.|δ| > |γ| のときの証明は省略.□ 準備(3) semiperiodic とは string α が period βについて semiperiodic で あるとは… αが string βの (空ではない) suffix (β全体でもOK) を含み,その後ろに 1 個以上 β が続くこと 例 アルファベット Σ = {今,井,浩} string α=井浩今井浩今井浩 は, period β=今井 浩 に対してsemiperiodic α 井 浩 今 井 浩 今 井 浩 βのsuffix β β 準備(4) prefix semiperiodic とは string αが period γ に関して prefix semiperiodic であるとは… αが 1 個以上の string γ のコピーを含み,その後 ろには (空ではない) γの prefix (全体でもOK) が 1 つ続くこと 例 string α=今井浩今井浩今井 は, period γ=今 井浩 に対して prefix semiperiodic 準備(5) semiperiodic と prefix semiperiodic Lemma ある string α が period βに関して semiperiodic ならば,また,そのときに限っ て,αはβと同じ長さを持つ period に関して prefix semiperiodic である. 例 string 今井今今井今今井今今井今今井 は,priod 今今井 に関して semiperiodic であり,period 今井今 に関して prefix semiperiodic である. Lemma text T において, pattern P が位置 p, p’(≧ p) の 2 箇所に出現するとき (ただし, p’ - p ≦ floor (n / 2)),P は period p’-p に関して semiperiodic である. Cole の証明 (1) 本題に戻る Goal を再確認 Goal はΣi(gi + g’i ) が O(m) であることを示すこと • Σi g’i ≦ m を示すのは簡単 – どの文字も最初に比較できるのは 1 回限り • Σi si ≦ m も定義より自明 – シフト量の合計は高々m • Σi gi ≦ 3m となることを今から示したい – si ≧ gi /3 が各 phase i で成り立つことを示せばよい. Cole の証明(2) T に P が現れない場合 i 番目の compare/shift phase を考える T の substring ti が P の suffix とマッチ P を si だけ右にシフト si ≧(| ti |+1)/3のときは • T のうち phase i で比較される文字すべてが過去に比 較されたことのあるものだったとしても si ≧ gi /3 が成 り立つ よって, si < (| ti |+1)/3 のとき,すなわち | ti |+1 > 3si のときのことについて以下で考える Coleの証明(3) いくつかの約束ごと α: 長さsi の P の suffix β: ある j が存在して,α=βj を満たすような 最小の substring α=β,j =1,というのもOK P:=P[n- |ti|+1..n] 長さ|ti|+1の P の suffix P のうち,phase i で比較される部分 (結果は問わ ない) Coleの証明(4) good suffix rule のみ+PはTにない場合 Lemma 2 | ti |+1 > 3si のとき,P,ti はともにαに関して semiperiodic である. 【証明】 P を右端から順番に |α|=si 個ずつ左側にはみ出るまで分けていく. |P|=| ti |+1 > 3si より,P には すくなくとも 3 つの区切りができるはずである (図).phase i は si だけ P を右シフトすると終了する(次頁に続く) P α P 区切り 区切り 区切り Coleの証明(5) good suffix rule のみ+PはTにない場合 (前頁から続く) si だけ右シフトしたあとの状態を考えると(図), si とαの定義から, αは phase i の P から右シフトしたあとの(phase i + 1の) P の一部分となる. good suffix rule の定義より,図で phase i + 1 の P のうち,ti の下にある部分は, phase i において ti の下にある部分とマッチしなくてはならない. 以上の 2 つの事実から,si ごとに区切ったブロックは実は全部αであることがわか る. よって,P も ti もαに関して semiperiodic である.□ × T α ti α P α α α α P α P P α Coleの証明(6) 先の補題から言えること P と ti は αについて semiperiodic → βについ ても semiperiodic である. α=βj より明らか Coleの証明(7) さらに補題 Lemma 3 | ti |+1 > 3si のとき,各 phase h < i では,P の右端は ti 中のどのβの右端にも そろえられることはない. 【証明】ti はβに関して semiperiodic であることはすでに示した(図).また, phase h ではP の右端が ti より右側に来ることはありえない.phase h で P の 右端が ti中のあるβの右端にそろえられていると仮定して矛盾を導く. このとき,P の右側にあるβの数を q とおく.また,このとき,P は q|β|の位置 にあると呼ぶことにする. (次頁に続く) ti T β β β β β β β β Coleの証明(8) 証明 (前頁から続く) phase h において,k’ を ti のジャスト左側の位置とし,その位置に 対応するPの位置を k とする.このとき,P と T の比較は,ti の左側までマッチ し,T(k’)とP(k)を比較したときにミスマッチする.なぜならば 1. P と ti はβに関して semiperiodic である. 2. 仮定より,phase h において P の右端はβのどらかの右端と位置がそろえられて いる. からである.(さらに続く) ti β T β β β k’ P k ここで× P ここまで○ β β β β Coleの証明(9) さらに証明 (前頁から続く) もっと詳しく言うと,P はβに関して semiperiodic であること,P の右端がちょうど q|β| にあることから,次の式が成り立つ. P(k) = P(1) = P(1+|β|) = … = P(1+q|β|) しかし P(k) = P(1) と T(k’) を比較したときにミスマッチするので, P(k) = P(1) ≠ T(k’) 従って,T(k’) と P(k) を比較したときにミスマッチが発生し,このミスマッチを もって phase h は終わるはずである. 以下の証明ではこの事実を利用する.(まだまだ続く) Coleの証明(10) まだまだ証明 phase h でシフトが終わったあと,P の右端がどこにあるか考えると,次の 2 通り 1. P の右端は q|β|より右側のどれかのβの右端にそろう 2. P の右端は どれかのβの右端ではないどれかの文字にそろう 前者に関しては,シフト後に T(k’) に対応する文字は,ある r を持ってきて P(k r|β|) とかける.ところが,P はβに関して semiperiodic なので,P(k - r|β|)= P(k) が成り立つ.このことは good suffix rule に矛盾する. 後者の場合,下図のように β=γδ とかける(もっと続く) ti β T β β β β β γ δ P β β β Coleの証明(11) もっと証明 (前頁から続く) γはβの prefix,δはβの suffix であるから |γ|+|δ|=|β|.よって,γδ= δγが成立し,β=ρj とかける.これはβの定義に矛盾. いずれの場合にも矛盾が生じることから,このようは phase h は存在しないことが 示せた.□ Coleの証明(12) 補題はあと2つ Lemma 4 | ti |+1 > 3si のとき,各 phase h < i では,P は T 中の ti と高々 |β|-1 文字 マッチする. 【証明】|β| 文字以上マッチしたとすると,P の右端は先の補題によりどのβの右 端にもそろえられていないから,P の右側の |β| 文字はβの prefix γ のあとにβの suffix δ が続く形となって,|γ|+|δ|=|β|となる.先ほどと同様,これはβの定義 に矛盾する.□ Coleの証明(13) 最後の補題 Lemma 5 | ti |+1 > 3si のとき,各 phase h < i では,もし P の右端が ti に含まれる文字 とそろっていたとすると,P の右端は ti の左側の |β|-1 文字 のうちのどれか か,ti の右側 |β| 文字 のどれかにそろえられる. 【証明】石関さんのレジュメを参照してください. Coleの証明(14) そしてこれが求めていた定理 Theorem P が T に現れないと仮定するならば,任意の phase i において si ≧ gi /3 【証明】 | ti |+1 > 3si のときのみ示せば十分.Lemma 5 より,phase h < i で は,P の右端は ti の左 |β|-1 文字もしくは 右|β|文字のどれかにそろえられる. また,Lemma 4 より, phase h では高々|β| 回の比較しか行われない. よって,phase i では以前の phase で比較された可能性のある ti 中の文字は, 左の |β|-1 文字か右の 2|β|文字である.すなわち gi ≦ 3|β| = 3si.□ Coleの証明(15) 以上のことよりいえること Theorem P が T に現れないと仮定するならば,BM 法の比較回数は最悪でも高々4m. 【証明】 ・Σi g’i ≦ m を示すのは簡単 どの文字も最初に比較できるのは 1 回限り ・Σi si ≦ m も定義より自明 シフト量の合計は高々m ・Σi gi ≦ 3m となることをさっき示した. よって,全体の比較回数は, Σi(gi + g’i ) ≦ 4m となる.□ Galilの方法(1) PがTに現れるときは? Pのn文字とTのm文字がすべて同じ文字であ るとき,比較の回数はΘ(mn) O(m) で抑えられる方法を Galil が考案 • phase i で P の右端が T の 位置 k に対応する位置にあ るとする. • P と T を右から左に比較していって,比較が位置 s で 終わったとする (結果は不問) • phase i のシフトで P の左端が s の右となるように good suffix rule に従って,移動すると,phase i+1 で は P の prefix が T(k)までマッチする – phase i+1 では T(k) まで比較すればよい. Galilの方法(2) BM法の計算量 Theorem Galil の方法を使えば,BM 法の比較回数は P が T に現れるかどうかに関係な く O(m) となる. bad character rule を許す場合 計算量はO(m) Theorem good suffix rule,bad character rule の両方のシフトを用いたとしても,BM 法 の worst-case の計算量は O(m) となる. KMP 法の前処理 オリジナル版 前回紹介された前処理 Z-based method spi の値を Zi を用いて計算していた Ziを用いる方法は • 概念的にシンプル • さまざまな手法の前処理に応用が効く KMP 法の前処理 オリジナル版 概要 sp1 = 0 spi (i = 2,3,4,…n)を計算 spi (i ≦ k) が既知であるとして spk+1 の値を計算 • α: 長さ spk の P のprefix – αは P [1..k] の suffix と等しい P の prefix のうち最長のもの P α’ α spk k 準備 βの導入 x = P[k+1] とする β=βx とは 長さ spk+1 の P のprefix • まさにこれから計算しようとしているもの • βは P[1..k] の suffix とマッチし,その後ろにP(|β|+1) が続く最長の P の prefix • spk+1 を見つけることは string β を見つけることにほか ならない P β x β x k The easy case αの次が x である場合 P(spk+1) = x (= P(k+1)) である場合 String αx は P の prefix であり,P[1..k+1] の suffix でもある • spk+1 ≧ |αx| = spk+1 は明らか • spk+1 = spk+1 は成り立つのか? P α x spk α’ x k The easy case spk+1 = spk+1 Lemma 6 任意の k について, spk+1 ≦ spk +1.さらにいうと, spk+1 = spk +1.iff. P(spk+1) = P(k+1) 【証明】 spk+1 > spk +1 だったとすると,βはαよりも長くなる.ところが,定 義より βもP[1..k] の suffix であるから spk の定義に矛盾.よって, spk+1 ≦ spk +1. 以上より明らかにαの次の文字が x ならば spk+1 = spk +1である.逆も成り立つ. □ The general case αの次が x ではない場合 P(spk+1) ≠ x (= P(k+1)) である場合 Lemma 6 より spk+1 < spk +1,すなわち spk+1 ≦ spk • βはαの suffix (β=αはOK) • βはαの proper suffix (β=αはNG) βは位置 k+1 で終わって長さ高々spk のsubstring • βはα’の suffix • βはαの suffix でもある P α β y spk α’ β x k The general case βはαの prefix でもある P(spk+1) ≠ P(k+1) のとき βはαの suffix としても,P[|β|+1]=x となるよう なαの proper prefix のうち最長のものとしても現 れる β P x α 拡大 β β α’ y k spk x β α 再帰的に spk+1 を計算できる β y spk spk+1 を求めるアルゴリズム x = P(k+1); v = spk; while (P(v + 1) != x && v != 0) { v := spv; } if (P(v + 1) == x) spk+1 = v + 1; else spk+1 = 0; 例 アルファベット Σ= {い, ま, ひ, ろ, し} α α’ いまひいまろいまひいましいまひいまろいまひいまひ spk+1 k k+1 spk パターンが複数の場合 Aho-Corasick 法 概要 exact set maching problem P がいくつかあるときに,それぞれが T に存在す るかどうか調べる • P の数 z – それぞれの pattern に対して それぞれ linear time にマッチン グすると O(n + zm) – Aho-Corasick 法を用いれば O(n + m + k) » k: P が T に現れる回数 準備 P = {P1, P2, … Pi} パターンの集合 keyword tree P のkeyword tree とは,次の条件を満たす rooted directed tree K のこと それぞれの edge はちょうど 1 文字のラベルがつ けられている 同じ node から出る任意の 2 つの枝には違ったラ ベルがついている P 中のすべての pattern Pi は K のある node v に map される • K の root からの v への path を辿ることで,Pi をつづ ることができ, • K のすべての leaf は,P のある pattern に対応する 例 P = {potato, poetry, pottery, science, school} s p o t a c i e h h t t e t h e n r o r 1 h c y 5 e y 2 3 4 keyword tree の作り方 1. root だけの tree を用意する 2. 1. に root から 長さ|P1|の path をのばす.これを K1とする path の最後には 「1」と書く Ki から Ki+1を作る 3. Ki の root から始まる path で,Pi+1 の prefix にマッチ するものを探す Pi+1 と完全にマッチした path があれば,path の終点となった node に 「i+1」 とかく path がなければ,最後にマッチしたところから新たに枝を伸ば して path をつくり,終点の node に 「i+1」 とかく 木の構築にかかる時間はO(n) Naïve use of keyword trees for set matching Tにあわせて木を辿る 初期状態 • T の位置は最初の文字 • K の位置は root T の prefix にマッチするだけ 木を辿っていく • 番号がついている node にたどり着いたら P 発見 • 行き場がなくなったら or T の最後まで行き着いたら 発見できな かったことを意味する 次の状態 • T の位置は 2 文字目 • K の位置は root 最後まで繰り返す O(mn) 時間で結果が出る 例 P = {potato, poetry, pottery, science, school} T=potpotato s p o t a c i e h h t t e t h e n r o r 1 h c y 5 e y 2 3 4 The speed-up: generalizing KMP Naïve method では T の初期位置 l を毎回 1 ずつ increment していくのみ 無駄な検索は省きたい spi をpattern が増えても対応できるように一般化 Aho-Corasick 法 O(n + k + m) P のどの pattern も P のほかの pattern の proper substring を持たないという仮定のもとでの方法 仮定を取り除いても計算量が変わらないことを示 す 準備(1) node にラベルをつける K の各 node v にラベルをつける K の root から node v に至る path についている 文字を順番につなげたもの L(v): node v につけられたラベル 例 P = {potato, poetry, pottery, science, school} s p o t a t i e h h t v c t e h e n r o r 1 L(v) = pott h c y 5 e y 2 3 4 準備(2) lp(v) K 上の各 node v について, lp(v): P に属する,ある pattern の prefix となって いる L(v) の proper substring のうち,最長のも のの長さ 例: 石関さんの資料の p.8 • P={potato, tattoo, theater, other} 準備(3) failure link K 上の各 node v について, nv: 長さ lp(v) の L(v) の suffix でラベル付けされ た K 上の node directed edge v→nv を failure link と呼ぶ. 例: 石関さんの資料 p.8 The failure links speed up the search Tにおいて j :これから pattern 探そうとしている文字列の最 初の位置 k: まさに今から調べようとしている文字の位置 アルゴリズム AC 法 j:= 1; k:= 1; w := K の root do { while (there is an edge (w, w’) labeled char. T(c)) { if (w’ is numbered by pattern i) { report that Pi occurs in T starting at position l; } w:= w’; c++; } w:= nw; l:= c – lp(w); } while (c <= m); アルゴリズム 補足 root で mismatch したら c を increment して root からやり直す node v まで探索して行き場がなくなったら string L(v) は nv の定義よりT[c-lp(v)..c-1]まで マッチすることを保証 nvに飛んでnvから出る edge とT(c) を比較 例: 石関さんの資料 p.8 時間計算量 O(m) ← KMP 法のときと同様に示せる Linear Preprocessing for the failure function K 上の各 node v について nv を見つける v が root から 1 文字分しか離れていないとき • nv = root ある k について,root から k 文字はなれた node まですべての nv がすでに計算されているとする • v’: v の親 • x: edge v’ → v についているラベル – KMP 法の解析のときと同様に再帰的に調べる O(n) 時間ですべての探索が終了 The full Aho-Corasick algorithm: relaxing the substituting assumption P のどの pattern も P のほかの pattern の proper substring を持たないという仮定を取 り払う. 次の lemma が成立 Lemma 7 keyword tree K が node v から pattern i の番号がついた failure link を持ってい るとき,AC 法で node v に到着したら,pattern Pi が T に存在し,その出現の 最後尾の位置は T[c] となる. アルゴリズムを改良 j:= 1; k:= 1; w := K の root do { while (there is an edge (w, w’) labeled char. if (w’ is numbered by pattern i || there is a directed path of falure from w’ to a node numbered with i) report that Pi occurs in T starting position l; } w:= w’; c++; } w:= nw; l:= c – lp(w); } while (c <= m); T(c)) { links { at さらに改良 前処理に付け加え ある node v について, • v からいくつかの failure link を辿ると番号がついた node に行き着くことがわかる場合には,v から直接リ ンクをはる • このリンクを output link と呼ぶ Output link を付け加えた場合 全体で O(n + m + k) 時間 マッチングの応用 o Matching against a DNA or protein library of known patterns o Exact matching with wild cards o Two-dimensional exact matching Matching against a DNA or protein library of known patterns (1) Sequence-tagged-site (STS) Human Genome Project が開発 200 から 300 の長さをもった DNA の両端 (それ ぞれ 20-30 の長さ) は,ゲノム全体で 1 度しか現 れない STSs: STS の複数形 100,000 以上の長さを持つゲノムの任意の substring をみたときに STSs の中の少なくとも 1 つを含んでいる,そういう STS の組を見つけ たい Matching against a DNA or protein library of known patterns(2) expressed sequence tags (EST) 遺伝子から得られる STS • mRNA,cDNA から 得られる • 遺伝子の sequence の一部分からコーディングされる たんぱく質を見つけることができる. EST や STS には keyword tree, AC 法が有効 • 速い (DNA の長さに比例) • 実際にはエラーが存在するので考える必要あり – 詳しいはなしは16 章で Exact Matching with wild cards φ: wild card 任意の 1 文字とマッチ pattern に wild card が入っていても T 中に出現す る pattern をすべて検索可能 例: abφφcφ は,テキスト xabvcbababcax に2 度 マッチする DNA transcription factor DNA の特定の場所に bind するたんぱく質を transcription factor(転写因子)と呼ぶ DNA を RNA に転写 • enhancing • suppressing Zinc Finger: transcription factor のひとつ 例: CYS**CYS*************HIS**HIS • CYS: アミノ酸 シスチン(1文字) • HIS: アミノ酸 ヒスチジン(1文字) Leucine Finger: これも transcription factor アルゴリズム Exact Matching with wind cards 1. 長さ |T| の配列 C を用意し,0で初期化 2. wild card を含まない P の substring の集合P ={P1,P2,…Pk},各 Pi の出現位置の左端を li とおく. 3. AC 法を用いて, P の各Pi を探す T に Pi が位置 j を開始位置として出現するとき は,C(j-li+1)++ 4. C の中で値が k になっているものを探す C(p) =k iff. P が T[p..] に出現している Two-dimensional exact matching こんなときに使います 長方形の絵 T T より小さな長方形の絵 P • T, P ともにデジタル化されている T 中の P の出現をすべて見つけたい 準備 m: T の総ポイント数 • 例: 640*480=307,200 n: P の点の数 n’: P の列の数 • それぞれの列は異なっていると仮定 – のちにこの仮定は取り払う アルゴリズム(1) 2 つの phase に分ける T の列(複数)の中のPの列(単数)の出現を探索 • 列ごとに終端記号をくっつけてTを1列にする.これを T’ とする • AC 法で P の各列がT’ に出現するか探索 O(m+n)時間 • P の i 列目 がT’中から発見されたら – 開始位置(p, q) – T と同じ次元の配列 Mの位置(p, q)にi を書き込む – 仮定より,M の各要素には高々1回しか値が書き込まれない アルゴリズム(2) M を 行ごとに scan • 値 1,2,…,n’ が順番に入っているセルの群を探す. • linear exact matching algorithm を各行に対して適用 • O(n’+m)=O(n+m) 仮定を取り払う 重複のある行は同じ行だとみなしてラベルをつけ れば解決 正規表現のマッチング Formal definitions 正規表現とは(アルファベット Σ) Σに属する文字1文字は正規表現 εは正規表現 正規表現のあとに他の正規表現が続く表現は正規 表現 +で正規表現をくっつけたものも正規表現 regexp*は正規表現 これ以外のものは正規表現ではない *のことを Kleene closure と呼ぶ 正規表現のマッチング 正規表現 R にマッチするT中の部分文字列を 求めたい 有向グラフG(R)を作る • 例 土井さんの資料 p.3 • s が始点,終点は t • R の文字数を n とすれば G(R) の枝数は高々 2n. 考え方 N(i): N(i-1)からラベルT(i)の枝1本と0回以上 のε遷移でいくことのできるnode の集合 N(0) s s からε遷移可能なノード T のprefix T[1..i] が R とマッチ iff. N(i) が Node t を含む 計算量(結果のみ) N(i) i=0..mを計算する G(R) の枝数を e とすれば,O(me)時間 全体の計算量はO(mn) 後ろの部分も調べたい R にマッチする T の non-prefix substring を 調べたい場合には, Σ*R に対してマッチングを行う おしまい
© Copyright 2024 ExpyDoc