情報生命科学特別講義 III (1) 文字列マッチング
description
Transcript of 情報生命科学特別講義 III (1) 文字列マッチング
情報生命科学特別講義 III
(1) 文字列マッチング
阿久津 達也
京都大学 化学研究所バイオインフォマティクスセンター
講義予定 第1回 : 文字列マッチング 第2回: 文字列データ構造 第3回: たたみ込みとハッシュに基づくマッチング 第4回: 近似文字列マッチング 第5回: 配列アラインメント 第6回: 配列解析 第7回: 進化系統樹推定 第8回: 木構造の比較:順序木 第9回: 木構造の比較:無順序木 第10回: 文法圧縮 第11回: RNA 二次構造予測 第12回: タンパク質立体構造の予測と比較 第13回: 固定パラメータアルゴリズムと部分 k 木 第14回: グラフの比較と列挙 第15回: まとめ
講義目的 バイオインフォマティクスにおける主要な離散アルゴリズムにつ
いて理解する 乱拓アルゴリズム、近似アルゴリズム、固定パラメータアルゴリ
ズムなど、現代的なアルゴリズム設計技法について理解する 計算時間および解の最適性もしくは近似精度に理論的保証のあるア
ルゴリズムを主対象とする 成績評価
出席4割、レポート6割 レポートは最終日の講義において出題
教科書(主に第 5-8 回、第 11-12 回) 阿久津達也:バイオインフォマティクスの数理とアルゴリズム、共
立出版、 2007 参考書
第1,3回: Crochemore & Rytter: Jewels of Stringology, World Scientific, 2002
第 2 回: 岡野原大輔:高速文字列解析の世界、岩波書店、 2012 その他は講義ノートにおいて該当トピックの最初に参考文献を記載
講義目的、成績、教科書
文字列マッチング問題
文字列マッチング問題(1) 入力
パターン文字列: テキスト文字列:
出力 を満たす
、すべての j
mpppP 21
ntttT 21
1121 mjjjm tttppp
例acgtP tgtacgtcatactgcacgtcT 20
4
n
m
j=6 j=14
acacP cacacgctaaacacgctaT
j=3 j=10 j=12
18
4
n
m
文字列マッチング問題(2)
jtttppp
n-mj
mjjjm output
1 1
1121 thenif
dotofor
単純アルゴリズム
一文字ずつ、ずらしながらチェック
全部で、 4+1+1+2+4+1=13 回の比較
例
文字列マッチング問題(3)命題: 単純アルゴリズムの時間計算量は Θ(mn)
証明: 時間計算量が O(mn) なのは明らか。以下の例の場合、 m(n-m+1) 回の比較が必要なので、 Ω(mn) 時間。
ただし、平均的には O(m+n) 時間で動作することが知られている。
nm
abaaaaaTabaaaP ,
jtttppp
n-mj
mjjjm output
1 1
1121 thenif
dotofor
Knuth-Morris-Pratt アルゴリズム
KMP アルゴリズム: アイデア
アイデア: 以前の結果を利用 j=2 ではグレーのところだけをチェックすれ
ば良い
表 h[i] : 次を満たす最大の k (無い時は h[i]=0 )
ikikik pppppp かつ1111
KMP アルゴリズム: テキスト処理 表 h[i] : 次を満たす最大の k (無い時は
h[i]=0 )ikikik pppppp かつ1111
`no'output `yes'output)(
;1;1
)(#];[)0(
)(
;1;1
elsethenif
doandwhile
doandwhile
mi
jjii
ihitpi
njmi
ji
ji
KMP アルゴリズム (テキスト処理)
上記はマッチの有無のみを判定。すべての j の出力は宿題
KMP アルゴリズム: 実行例(1)
a a a bp
h[i]
1 2 3 4
0 0 0 3
i a a a b
a a a b
h[4]=3
表 h[i] : 次を満たす最大の k (無い時は h[i]=0 )
ikikik pppppp かつ1111
a a a b a a a b
a a a b
t
h[4]=3
h[3]=0
h[5]=0
h[3]=0
KMP アルゴリズム: 実行例(2)
Match!
h[6]=2
h[2]=1
KMP アルゴリズム: 実行例(3)
h[12]=7
h[7]=4
h[4]=2
h[2]=1
h[1]=0
KMP アルゴリズム: 解析定理: KMP アルゴリズム(テキスト処理)の時間計算量は O(n)証明:
明らかに (#) にかかる時間が問題。その時間は・ j が1増えた時のみ、 i も1増える・ i←h[i] を1回実行すると、 i は少なくとも1減る・ i は増えた回数以上に減ることはないより、 O(n) 。よって、全体の計算量も O(n)
解析のアイデア: 計算量のならし解析( amortized analysis ) ここでは「稼いだ分しか使えない」が基本的アイデア
KMP アルゴリズム: パターン処理表 h[i] の作り方テキスト処理と似た手続き自分自身とのマッチをとりながら、 h[i] を作っていく
ijhihjhpp
jjii
ihippi
mj
hji
ji
ji
][][][)(
;1;1
];[)0(
)(
;0]1[;1;0
elsethenif
doandwhile
dowhile
定理: KMP アルゴリズムは文字列マッチング 問題を O(m+n) 時間で解く
Boyer-Moore アルゴリズム
BM アルゴリズム: アイデア、例
例
まず、 c と d を比較。 d は P 中には現れないので、 P が d と重なることはない。よって、次のようにずらして、最後の文字を比較。
KMP ではテキスト中の文字を全て1回は調べている BM では、パターンを後から前に調べることでテキス
ト中の一部の文字しか見ないようにする
P 中の c の位置に T 中の a があるので、 P 中の最後の a が重なるようにずらす
BM アルゴリズム: 計算量 詳細を工夫することにより、最悪の場合を
O(m+n) とすることができる 平均的には KMP よりずっと速い BM と似たアルゴリズムでは、平均的に
O((n/m) logkm) 時間を達成(ただし、 k はアルファベットのサイズ(文字種の個数))
Aho-Corasick アルゴリズム
複数文字列マッチング問題 入力
キーワード集合: テキスト文字列:
出力 を満たす、すべて
の j
},,,{ 21 kwwwW
ntttT 21
))(( 1 jhhi tttwi
KMPや BM を k 回実行 ⇒ O(kn) 時間 Aho-Corasick アルゴリズムなら、 O(m+n) 時間
)||||||( 21 kwwwm
これ以降の講義では、アルファベット Σ (文字種の集合)は固定と仮定
Aho-Corasick アルゴリズムアイデアキーワード集合から DFA (決定性有限オートマトン)を構成
例: W={ he, she, his, hers }
0 に戻る失敗関数は省略
実線: 前方遷移関数 f 点線: 失敗関数 g
Aho-Corasick アルゴリズム: 実行例W={ he, she, his, hers }, T = ushers
0 に戻る失敗関数は省略
u s h e r s 0 0 3 4 5 8 9 2
Aho-Corasick アルゴリズム: テキスト処理
is
tsgs
sfsfailtsg
ni
i
i
output)statematch a is(
);,(
);()),((
1
thenif
dowhile
dotofor
W={ he, she, his, hers } T = ushers
O(n) 時間
Aho-Corasick アルゴリズム: 例題W={ he, she, his, hers }, T = rhishers
0 に戻る失敗関数は省略
r h i s h e r s 0 0 1 6 7 4 5 8 9 3 2
Aho-Corasick アルゴリズム: DFAの構成 (1)1. パターン集合からトライを構成2. 前方遷移関数 g を作成3. 幅優先探索を用いて失敗関数 f を作成4. 最適化された失敗関数 h を作成(これは無くても OK )
Aho-Corasick アルゴリズム: DFAの構成 (2)
O(m) 時間定理Aho-Corasick アルゴリズムは複数文字列マッチング問題をO(m+n) 時間で解く
まとめ 文字列マッチング: 線形時間で可能
KMP アルゴリズム: 失敗関数の利用 Boyer-Moore アルゴリズム:パターンの最後から検索 Aho-Corasick アルゴリズム:オートマトンを構成
補足 平均的には線形時間より高速に可能 近年では圧縮文字列の検索が盛んに研究 Aho-Corasick では O(log |Σ|) だけアルファベットサ
イズに依存していたが、前処理( DFA の構成)に関しては依存しないアルゴリズムも存在 [Dori & Landau: Inf. Proc. Lett. 2006]