Aritalab:Lecture/Bioinformatics/PartialDigestion
m |
|||
Line 58: | Line 58: | ||
このアルゴリズムは、各ステップで常に左右の選択が生じるため、''n'' 点を予測するための計算時間を ''T(n)'' とすると | このアルゴリズムは、各ステップで常に左右の選択が生じるため、''n'' 点を予測するための計算時間を ''T(n)'' とすると | ||
: ''T''(''n'') = 2 ''T''(''n''-1) + ''O''(''n'') 時間 | : ''T''(''n'') = 2 ''T''(''n''-1) + ''O''(''n'') 時間 | ||
− | かかります。これは[[Aritalab:Lecture/ | + | かかります。これは[[Aritalab:Lecture/Algorithm/Towers of Hanoi|ハノイの塔問題]]で見たように、指数時間アルゴリズムです。 |
Revision as of 17:07, 2 June 2011
DNAの制限酵素による切断
DNAを制限酵素で処理したとき、制限酵素の認識配列部分は確率的に切断されたり、されなかったりします。 従って、処理後のDNA断片をゲル電気泳動で流して長さを確認すると、もとのDNA中の認識配列位置間を組み合わせ的に選んで生じる断片が出てくるはずです。 この断片からもとのDNA全体を推定する問題は、以下のように定式化できます。
- 問題 : 一次元上に配置された n 個の点からなる集合 X を、その全ての要素間の距離からなる(重複を含めた)多重集合 L ( |L| = n (n-1)/2 ) から求めよ。
例. X = { 0, 2, 5, 10} のとき
|
|
問題への解が一つみつかれば、それを一次元上で平行移動してもやはり解になります。上の L = { 2, 3, 5, 5, 8, 10 } なら、X = {0, 2, 5, 10} としても {1, 3, 6, 11} としても Lを構成します。ですから一般に、解は無限個存在します。ここでは、同じ距離集合 L を生成する点集合はホモメトリックで(homometric) である、と定義しましょう。 集合 U, V から U Θ V, U ⊕ V として作成した二つの集合であれば、ホモメトリックであることを示します。
- 証明
与えられた集合 U に対して、Vに要素を一つずつ加えていく場合を考えます。 V に順次新しい要素 v を加え、v + u と v - u (u ∈ U) で新たに生成される距離集合を、数学的帰納法で考えましょう。
- V = {} のとき
生成される点集合は U の要素を -v, +v して平行移動するだけなので、同じ距離集合 L をつくることは自明。
- V ≠ {} のとき
帰納法の仮定から U Θ V, U ⊕ V の作る距離集合が同じとし、V に要素 v を追加する場合を考えます。点集合には U の要素を -v, +v した点がそれぞれ追加されます。一般形として、 U に既に含まれていた要素 u ' を v ' だけシフトした点と、要素 u を v だけシフトする点との間の距離を考えましょう。シフトが正の場合の距離は以下のように、負のシフトに変形できます。
- ( u ' + v ' ) - ( u + v ) = ( u ' - v ) - ( u - v ' )
U 中の値は、V 中の値と総当りで組み合わせて点集合を形成するため、上記の対応によって生成される距離集合が同じことがわかります。上記の式は u = u' の場合も成立します。これで証明が終わりました。
アルゴリズム
距離集合 L から点集合を予測するアルゴリズムを考えましょう。距離集合の情報は全て正確に与えられると仮定します。
- 式 |L| = n (n-1)/2 から点集合のサイズを決定し、X = { x1, x2, ... xn } とします。
- L 中の最大値 M1 を求め、一般性を失わずに x1 = 0, xn = M1 とします。L からは M1 を消去します。
- 次に L 中の最大値 M2 を求め、一般性を失わずに xn-1 = Mn-1 とします。L からは M2 を消去し、同時に M1 − M2 も消去できます。
- 以降、順次 L 中の最大値を求め、xi とできる i を見つけて配置していきます。
もし生成されるはずの断片が L の中に見つからない場合、左右の選択が誤っていたことになります。その場合はバックトラックして、もう一方の選択を選ばなくてはなりません。
このアルゴリズムは、各ステップで常に左右の選択が生じるため、n 点を予測するための計算時間を T(n) とすると
- T(n) = 2 T(n-1) + O(n) 時間
かかります。これはハノイの塔問題で見たように、指数時間アルゴリズムです。