Algorithm Design
Transcript of Algorithm Design
系列アライメント (Sequence Alignment)
吉田康久
University of Tsukuba
May 27, 2009
吉田康久 系列アライメント (Sequence Alignment)
問題の背景、似ている単語
Web上の辞書で単語を引くスペルミス
occurranceを occurrenceGoogleの「もしかして」
「似ている単語」の類似度を定義したい直感的に’ocurrance’と’occurrence’は似ている
cを加えて aを eに置き変える
吉田康久 系列アライメント (Sequence Alignment)
ほぼそろえて整列
ギャップ (gap)「-」はそろえて整列させるために、一方の単語に一文字加えないといけないことを示すギャップ
ミスマッチ異なる文字が同じ位置を占めている状態例 : ’aaaaa’と’aabaa’では 3文字目がミスマッチ
吉田康久 系列アライメント (Sequence Alignment)
類似性が高いのは?
’o-curr-ance’と’occurre-nce’3個のギャップと 0個のミスマッチ
さっきのは 1個のギャップと 1個のミスマッチ
どちらがよりよい整列された状態か?あとでよさを決定するために、コストの概念を導入する
吉田康久 系列アライメント (Sequence Alignment)
応用先
辞書のインターフェイスやスペルチェッカーこの種類の問題に対する応用を最先端に目指しているわけではない
分子生物学では、中心的な計算問題となっている
吉田康久 系列アライメント (Sequence Alignment)
分子生物学
遺伝子におけるゲノム (genome)巨大な線形のDNA分子!染色体
{A, T, G, C}の文字からなるでっかいテープのようなもの
機能が分かっているDNAとの「類似する」部分文字列を見つけてくる実験をすることなく、その部分文字列を持つDNAもその機能を持つと仮定できる
吉田康久 系列アライメント (Sequence Alignment)
問題定義
2つの文字列 Xと Yが与えられたとするXは文字列 x1x2 · · · xm、Yは文字列 y1y2 · · · yn であるとする文字列 Xと位置集合 {1, 2, · · · ,m}と文字列Yの位置集合 {1, 2, · · · , n}について集合間のマッチングについて考える
吉田康久 系列アライメント (Sequence Alignment)
マッチング
Definition各要素が高々一個の対にしか出現しないという性質を満たす順序対の集合
Example{(1, 2), (2, 3), (3, 4)}
!マッチングになっている例{(1, 4), (1, 3), (3, 4)}
!マッチングになっていない例
吉田康久 系列アライメント (Sequence Alignment)
アライメント (alignment)
Definitionマッチングの集合Mに対して、「クロスする」対が存在しないとき、Mをアライメント" (i, j), (i#, j#) $ Mかつ i < i#ならば j < j#であるとき、Mをアライメント
Example{(1, 2), (2, 3), (3, 4)}
!アライメントになっている例{(1, 4), (2, 3), (3, 1)}
!アライメントになっていない例
吉田康久 系列アライメント (Sequence Alignment)
文字の整列の仕方とアライメント
アライメントは同じ位置に並ぶ文字を指定して、二つの文字列を整列する方法を与えている
Example’stop’と’tops’の 2つの文字列に対して、アライメント{(2, 1), (3, 2), (4, 3)}を与えてやると、以下の整列の仕方を得ることができる
s t o p -- t o p s
吉田康久 系列アライメント (Sequence Alignment)
類似度の定義
Mを Xと YのアライメントとするアライメントMのコスト (cost)は以下で定義するMにおける「ギャップコスト」と「ミスマッチのコスト」の総和これを最小にするようなアライメントを求めたい
吉田康久 系列アライメント (Sequence Alignment)
ギャップコスト
ギャップペナルティ(gap penalty)を定義するパラメータ ! > 0というものについて考えるMでマッチされていない Xと Yの各位置に対して、ギャップがあるので、!のコストをかけるようにする
Example’stop’と’tops’の例では、2つのギャップが発生しているので、ギャップコストは 2!である
s t o p -- t o p s
吉田康久 系列アライメント (Sequence Alignment)
ミスマッチコスト (1/2)
アルファベットの文字の各対 p, qに対して、pと qを同じ位置に整列するときのミスマッチコスト"pqというものについて考える各 (i, j) $ Mに対して xiと y jを同じ位置に整列するときのミスマッチコスト"pqがかかる同じ位置に同じ文字を整列した場合には"pq = 0とする
吉田康久 系列アライメント (Sequence Alignment)
ミスマッチコスト (2/2)
Example’stop’と’tops’の例では、(2, 1) $ Mに対して x2 = tかつy1 = tで"pq = 0。同様にやっていくと、このアライメントに関してはミスマッチコストの総和は 0であることが分かる
s t o p -- t o p s
吉田康久 系列アライメント (Sequence Alignment)
注意
最小コストのアライメントを最適なアライメントという
最適なアライメントを求めるプロセスは生物学の分野では系列アライメントと呼ばれることが多い
生物学の分野では、ギャップコスト !とミスマッチコスト"pqをどのように決定するかが重要で研究されているしかし、ここではこれらのパラメータは外部から与えられるものとして、最適なアライメントを得るアルゴリズムに注目していく
吉田康久 系列アライメント (Sequence Alignment)
系列アライメントのアルゴリズム
動的計画法のアプローチを用いて取り組むことにする以下の事実がその動機付けになるから
二つの文字列の最後の文字が互いにマッチされるか、マッチされないかのいずれかミスマッチしていても、マッチはしている
Fact最適なアライメントMにおいて、(m, n) $ Mあるいは(m, n) ! Mである
吉田康久 系列アライメント (Sequence Alignment)
系列アライメントのアルゴリズム
FactMを X = x1x2 · · · xmと Y = y1y2 · · · ynの任意のアライメントとすると、(m, n) ! Mならば、Xの位置mあるいは Yの位置 nのいづれかはMでマッチされていない
吉田康久 系列アライメント (Sequence Alignment)
系列アライメントのアルゴリズム
Proof.背理法で証明する。A! (B %C)の否定は
¬(A! B %C)! ¬(¬A % B %C)! A & ¬B & ¬C
である。これより、仮定を否定して「(m, n) ! Mであり、(m, j) $ M かつ (i, n) $ Mとなるような i < mとj < nが存在する」と仮定する。(i, n), (m, j) $ M、i < mかつ n > jとなっているので、(i, n)と (m, j)はクロスすることになり、これはアライメントの定義に反している。よって仮定が誤りである。 !
吉田康久 系列アライメント (Sequence Alignment)
補足
(m, n) ! Mであるから、mと nはマッチしていないmと nのそれぞれはマッチしているのだから、mとマッチしているものを j、nとマッチしているものを iとしようすると次のような状態になっているはず
X : · · · xm ' · · · ' xiY : · · · y j ' · · · ' yn
あとはアライメントの定義に反するのを使うだけ
吉田康久 系列アライメント (Sequence Alignment)
漸化式の定式化
先程までの 2つの命題を使うと、以下のように 3つの場合に分けて書くことができるこれを利用して漸化式を定式化
Fact最適なアライメントMにおいて、以下の (i)、(ii)、(iii)がのうち少なくとも一つが成立する
(i) (m, n) $ Mである(ii) Xの位置mではマッチしていない(iii) Yの位置 nではマッチしていない
吉田康久 系列アライメント (Sequence Alignment)
漸化式の定式化
Fact任意の 1 ( i ( m, 1 ( j ( nに対して、アライメントの最小コストOPT(i, j)は、漸化式
OPT(i, j) = min["xiy j + OPT(i ' 1, j ' 1),! + OPT(i ' 1, j), ! +OPT(i, j ' 1)]
を満たす。さらに、(i, j)がこの問題の最適なアライメントに属することと、最小値がこれらの値のうちの最初の値で達成させることとは、等価である。
吉田康久 系列アライメント (Sequence Alignment)
漸化式の定式化の証明 (1/3)
Proof.任意の 1 ( i ( m, 1 ( j ( nに対して、文字列x1x2 · · · xm'1と文字列 y1y2 · · · yn'1間のアライメントの最小コストをOPT(i, j)とする。前の命題において、三つの場合のうち、少なくとも一つが成立するという事実の着目する。 !
吉田康久 系列アライメント (Sequence Alignment)
漸化式の定式化の証明 (2/3)
Proof.(i)が成立するとする。この時は (m, n)でマッチしているので、"xmynのコストが発生する。(m, n)ではマッチしたので、それ以前の二つの部分文字列 x1x2 · · · xi'1とy1y2 · · · y j'1において、コスト最小化を考えればよい。ゆえに、(i)ではOPT(m, n) = "xmyn + OPT(m ' 1, n ' 1)が得られる。 !
吉田康久 系列アライメント (Sequence Alignment)
漸化式の定式化の証明 (3/3)
Proof.(ii)が成立するとする。Xの位置mではマッチしていないので、ギャップコスト !が発生する。そして、それ以前の二つの部分文字列 x1x2 · · · xm'1と y1y2 · · · ynについてのコスト最小化を考えればよい。ゆえに、(ii)ではOPT(m, n) = ! +OPT(m ' 1, n)が得られる。(iii)についても同様である。文字列 x1x2 · · · xiと文字列 y1y2 · · · y jの間の最小コストを求める部分問題も上と同様の議論ができるので、欲しい漸化式が得られることになる。 !
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
漸化式を利用して、m ) nの二次元配列のようなものを用意して、OPT(i, j)の値を書き込んでいけばよい。
吉田康久 系列アライメント (Sequence Alignment)
アルゴリズム
Alignment(X,Y):配列 A[0...m, 0...n]を用意各 iに対して A[i, 0] = i!とする各 jに対して A[0, j] = j!とするFor j = 1, · · · , n
For i = 1, · · · ,m漸化式 (6.16)を用いて A[i, j]を計算
Endfor
EndforA[m, n]を返す
吉田康久 系列アライメント (Sequence Alignment)
注意
初期設定のところでは、i個の文字の文字列と 0個の文字の文字列とのアライメントでは、i個のギャップが使われるから’aaa’と”だと’a a a’と’- - -’で 3!のギャップコスト
吉田康久 系列アライメント (Sequence Alignment)
必要な領域と計算量
配列 AがO(nm)個の要素からなるので、必要な領域はO(mn)
英単語とかなら問題ないしかし、分子生物学のような分野では 10万文字と 10万文字のようなアライメントを考えなければならない6.7では、線形領域でやる方法が紹介されている
計算時間は二重のループがあることからO(nm)とすぐに分かる
配列 Aの各要素は定数時間で得られるから
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
例として、’name’と’mean’で最適なアライメントを決定してみる
! = 2異なる母音と母音のマッチングコストは 1異なる子音と子音のマッチングコストは 1母音と子音のミスマッチコストは 3
配列 A[0...m, 0...n]を用意
naem-- n a m e
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
初期設定
n 8a 6e 4m 2- 0 2 4 6 8
- n a m e
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
{0, 2, 2}のところを見る漸化式を利用すると {1 + 0, 2 + 2, 2 + 2}となるので、最小となる 1を選ぶ
n 8a 6e 4m 2 1- 0 2 4 6 8
- n a m e
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
{4, 2, 1}のところを見る漸化式を利用すると {3 + 2, 2 + 4, 2 + 1}となるので、最小となる 3を選ぶ
n 8a 6e 4 3m 2 1- 0 2 4 6 8
- n a m e
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
{6, 4, 3}のところを見る漸化式を利用すると {3 + 4, 2 + 6, 2 + 3}となるので、最小となる 5を選ぶ
n 8a 6 5e 4 3m 2 1- 0 2 4 6 8
- n a m e
吉田康久 系列アライメント (Sequence Alignment)
漸化式を利用する
これを繰り返していく最小コストはA[m, n]となって、今回は6が最小コスト最適なアライメントは、A[0, 0]から A[m, n]にくるまでの道程を逆にたどっていけばよい
n 8 6 5 4 6a 6 5 3 5 5e 4 3 2 4 4m 2 1 3 4 6- 0 2 4 6 8
- n a m e
吉田康久 系列アライメント (Sequence Alignment)
最適なアライメント
今回は [0, 0]' > [1, 1]' > [2, 1]' > [3, 2]' >[4, 3]' > [4, 4]という経路を通って [0, 0]から [4, 4]まできている縦 or横に進んだときはギャップが発生しているので、「-」を挿入そうすると、最適なアライメントは以下のようになる
m e a n -n - a m e
ギャップコストが 2 ) ! = 4、母音同士のミスマッチが 2個なので、ミスマッチコストは 2。発生したコストは 6になっていて、A[m, n]と一致していることが確認できた
吉田康久 系列アライメント (Sequence Alignment)
実装
Rubyで実装1
Let us consider sequence alignmentbetweeen "mean" and "name".
==============================Array for sequence alignment is as follows.8 6 5 4 66 5 3 5 54 3 2 4 42 1 3 4 60 2 4 6 8==============================Result is as follows.Minimised cost is 6.m e a n -n - a m e
1http://d.hatena.ne.jp/syou6162/20090519/1242661982吉田康久 系列アライメント (Sequence Alignment)
おわり
吉田康久 系列アライメント (Sequence Alignment)