バイオインフォマティクスにおける初等的な配列解析アルゴリズムのプログラムを作成し、その振る舞いを考察せよ。なお、本課題の主な目的は、アルゴリズム設計の代表的なテクニックの1つである動的計画法(Dynamic Programming, DP)を理解した上で、プログラムを書く能力を習得してもらうことにある。
DNAの塩基配列はA(アデニン)、C(シトシン)、G(グアニン)、T(チミン)の4種類の塩基(文字)から構成される。DNA配列のアラインメントとは、2本の異なる塩基配列の類似性を判定するため、配列を構成する各文字(塩基)同士の対応付けをとる操作である。具体的には、2本の配列において適切な場所にギャップと呼ばれる空白記号("–"で表す)を挿入することにより,両者で対応する文字のスコアおよびギャップに科すペナルティの和(アラインメントスコア)が最大になる並べ方を求める。これを最適アラインメントと呼ぶ。
最適アラインメントを効率的に求めるために、Needleman-Wunsch法と呼ばれる動的計画法(DP)に基づくアルゴリズムが提案されている。扱う2本の配列をそれぞれx = x1 ... xn、y = y1 ... ymとし、2本の部分配列x1 ... xi (1 ≤ i ≤ n)、y1 ... yj (1 ≤ j ≤ n)に対するアラインメントスコアの最大値をF(i, j)で表す。このとき、F(i, j)はF(i, j) = 0という初期条件の下で、以下のDPの漸化式で再帰的に計算できる。
F(i, j) = max{F(i – 1, j) – d, F(i, j – 1) – d, F(i – 1, j – 1) + s(xi, yj)}
ここで、d > 0はギャップペナルティで、s(xi, yj)はxi = yjのときに正の値を、xi ≠ yjのときには負の値をとるスコア関数(一致・不一致スコア)である。反復の最後の段階でF(n, m)が得られ、その値が入力配列全体に対する最大アラインメントスコアとなる。ただし、このままでは最適アラインメントスコアが得られたのみであることに注意されたい。実際にアラインメントそのものを得るためには、DPの漸化式の右辺において、3つの場合のどれを選択したのかを記憶しておき、F(n, m)の値からF(0, 0)まで、どの場合を適用したのかの情報を後戻りで復元するトレースバックと呼ばれる操作が必要である。
(1) Needleman-Wunsch法の時間計算量および領域計算量を( n と m を用いて)評価せよ。また、n = mと仮定したときの可能なアラインメントの数を求め、Needleman-Wunsch法の利点を考察せよ。
ヒント: Stirlingの公式n! ≈ (2πn)1/2 (n/e)nを使えばn!の見積もりが容易になる。
(2) Needleman-Wunsch法を実現するプログラムを作成せよ。ただし、ギャップペナルティをd = 1とし、スコア関数をs(xi, yj) = {1 (xi = yj), – 1 (xi ≠ yj)}とする。入力例はExample sequence 1、Example sequence 2であり、プログラム上でテキストファイルを読み込む設定にすること。また、アラインメント結果をこのようなフォーマットでファイル出力できるようにすること。
(3) (2)の入力例の各々に対し、塩基組成を保存したまま(つまりA、C、G、Tの各個数を保存したまま)ランダムシャッフルした塩基配列を生成するプログラムを作成せよ。また、入力配列、パラメータをいろいろ変えてみて、アラインメント結果を考察せよ。
参考文献
上記内容で不明な点がある場合は以下の文献を参照されたい。
C、C++、Java言語のいずれかを用いて実装すること。実行環境はWindows、Mac OS、Linuxのどれを用いても構わない。
本課題の受講希望者は以下のような形式のメールを2011年5月9日(月)までに送ること。(締め切りました。)
以下のような形式のメールを2011年8月3日(水)までに送ること。
(注)バイナリ添付のメールが Gmail へうまく転送できない旨のメールが返ってくるようですが、一応加藤の NAIST アカウントには届いていますので安心してください。加藤は8月6日まで出張中で全ての課題提出メールをチェックすることが難しいですが、もしメールが届いているか不安な人は加藤まで問い合わせてください。
当然のことながら、他の人のコピーを提出したことが判明した場合は、コピー元、コピー先ともに不合格とする。
情報科学研究科 計算メカニズム学研究室 加藤 有己