短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム

Slides:



Advertisements
Similar presentations
1 高速フーリエ変換 (fast Fourier transform). 2 高速フーリエ変換とは? – 簡単に言うとフーリエ変換を効率よく計算 する方法 – アルゴリズムの設計技法は分割統治法に基 づいている 今回の目的は? – 多項式の積を求める問題を取り上げ、高速 フーリエ変換のアルゴリズムを用いた解法.
Advertisements

A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
ゲノムアルゴリズム ゲノムの仕組み 応用問題 アラインメントアルゴリズム ミスマッチトレランス 遺伝子発見問題.
SPSS操作入門 よい卒業研究をめざして 橋本明浩.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
極小集合被覆を列挙する 実用的高速アルゴリズム
動的計画法 表の作成 制約の追加 練習問題.
動的計画法 表の作成 制約の追加 練習問題.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
On the Enumeration of Colored Trees
頻出集合列挙アルゴリズムに対する 実用的高速化技術について
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
An Algorithm for Enumerating Maximal Matchings of a Graph
分子生物情報学 動的計画法に基づく配列比較法 (ペアワイズアライメント法)
情報知能学科「アルゴリズムとデータ構造」
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
 Combinations(2)        古川 勇輔.
データ構造とアルゴリズム 分割統治 ~ マージソート~.
宇野 毅明 (国立情報学研究所 &総合研究大学院大学)
模擬国内予選2014 Problem C 壊れた暗号生成器
日本大学 文理学部 情報システム解析学科 谷研究室 益田真太郎
宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ
疑似頻出アイテム集合の 多項式遅延列挙アルゴリズム
最短路問題のための LMS(Levelwise Mesh Sparsification)
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
10.通信路符号化手法2 (誤り検出と誤り訂正符号)
回帰モデル・クラス分類モデルを 評価・比較するための モデルの検証 Model validation
7.時間限定チューリングマシンと   クラスP.
宇野 毅明 (国立情報学研究所 &総合研究大学院大学)
ゲノムアルゴリズム ゲノムの仕組み 応用問題 アラインメントアルゴリズム ミスマッチトレランス 遺伝子発見問題.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
生物統計学・第3回 全体を眺める(1) R、クラスタリング、ヒートマップ、各種手法
データ構造とアルゴリズム論 第6章 整列(ソート)のアルゴリズム
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
A Simple Algorithm for Generating Unordered Rooted Trees
アルゴリズムとプログラミング (Algorithms and Programming)
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
数独の解生成と 解に対する番号付け 理学部 情報科学科 渡辺研究室 戸神星也.
データ構造とアルゴリズム論 第5章 整列(ソート)のアルゴリズム
プログラミング 4 整列アルゴリズム.
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
新しい高速相同検索アルゴリズムを用いたゲノム解析ツールの開発
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
コーディングパターンの あいまい検索の提案と実装
ナップサック問題 クマさん人形をめぐる熱いドラマの結末.
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
アルゴリズムとプログラミング (Algorithms and Programming)
宇野 毅明 (国立情報学研究所 &総合研究大学院大学)
補講:アルゴリズムと漸近的評価.
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
重み付き投票ゲームにおける 投票力指数の計算の高速化
第16章 動的計画法 アルゴリズムイントロダクション.
構造的類似性を持つ半構造化文書における頻度分析
アルゴリズムとプログラミング (Algorithms and Programming)
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
4.プッシュダウンオートマトンと 文脈自由文法の等価性
ICML読む会資料 (鹿島担当) 教師ナシ の 構造→構造 マッピング 読んだ論文: Discriminative Unsupervised Learning of Structured Predictors Linli Xu (U. Waterloo) , … , Dale Schuurmans.
生物統計学・第14回 全体を眺める(6) -相関ネットワーク解析-
Q q 情報セキュリティ 第8回:2004年5月28日(金) の補足 q q.
参考:大きい要素の処理.
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム 宇野 毅明 (情報研) 2004年1月30日 COMP研

ミスマッチトレランスとは ・ 文字列 L と ( L より短い) 文字列 S に対して L の中で S に最も似ている( S と同じ長さの)部分列との違いの大きさを「S のミスマッチトレンランス」という ・ 「似ている」の尺度には、ハミング距離を用いる      ATGCCG     ATGCTG      ATCCCG AATGCT        距離1        距離5

応用:ジェンチップとマイクロアレイ ・ 「DNAの中に、指定した20文字程度の部分列があると反応する試薬(ジェンチップ)」ができた ・ Q さんがXという遺伝子を持つか:   1.Xを20文字ずつにぶつ切り (オーバーラップするようにする)、   2.それらに反応するような試薬を作る   3.Q さんのDNAを入れて反応を見る ・ 全部に同じように反応するならば、 遺伝子があるだろう 遺伝子 QさんのDNA

精度の高い判定をするために ・標的の部分以外に類似する部分列があると、そこが反応してしまうかも ・なるべく固有な(似たものがない)部分列で判定したい ・ ミスマッチトレランスが大きい部分列に切る分ける

ミスマッチトレランスの既存研究 入力: 文字列 L と 文字列 S 出力: S のミスマッチトレランス ・O(|L|+|S|) 時間で簡単にできる ・suffix array のように、ある種のデータ構造を作成してから質問(Sのミスマッチトレランス)に高速に答えるようなことは難しいようだ (Queryと呼ぶ。ほんとはこれがしたい) ・「ミスマッチトレランスの下界」なら、データ構造で質問に高速回答できる(O(|S|K)時間、Kはパラーメータ、定数)(山田森下02) ・一般のエディット距離でできるともっとうれしい

今回の問題 入力: 文字列 L と 長さk 出力: L の各部分列のミスマッチトレランス (文字種は定数とする。総ミスマッチ計算と呼ぶ)   (文字種は定数とする。総ミスマッチ計算と呼ぶ) ・普通に計算すると O(|L|2) 時間かかる ・ゲノムのような長い文字列に対しては、動かない       ( 30億の2乗/1000MIPS ≒ 90億秒 ≒270年 ) ・もう少しオーダーの小さい、あるいは実際に速いアルゴリズムが欲しい

今回の結果 ・総ミスマッチ計算に対する O(|L|2k) 時間アルゴリズム (線形時間!K=20 なら 30億×100万、もとの300倍) ・実用的に高速にする改良     (K=20 なら 30億×100? 、もとの300万倍) ・こんなこともできる   ・類似するペアを列挙(複数の文字列間も可)      ⇒ ゲノムの比較に使える!   ・O(|L|2k)メモリを使うと Queryが O(2k) 時間で解ける   ・一般のエディット距離(係数が大きくなる)

基本のアイデア:類似の条件 子問題1: 各部分列 S に対して、異なりが d 文字以下の部分列があるか ・ Yes ⇔  S と i1,…, ik-d番目の文字が等しい部分列がある 子問題2: i1,…, ik-dを固定。i1,…, ik-d文字目が等しい 他の部分列が存在する部分列を列挙 ・Radix ソートで O(|L|k) 時間 AC T CG T AC G CG A GA G TG A GA C TG C TG G TG A

基本のアイデア2:分類 子問題3: 全てのi1,…, ik-dに対して、i1,…, ik-d文字目が等しい 他の部分列が存在する部分列を列挙 AC T CG T AC G CG A GA G TG A GA C TG C TG G TG A

基本のアイデア2:分類 子問題3: 全てのi1,…, ik-dに対して、i1,…, ik-d文字目が等しい 他の部分列が存在する部分列を列挙 AC T CG T AC G CG A GA G TG A GA C TG C TG G TG A

基本のアイデア2:分類 子問題3: 全てのi1,…, ik-dに対して、i1,…, ik-d文字目が等しい 他の部分列が存在する部分列を列挙 O(|L|k kCd) 時間でできる AC T CG T AC G CG A GA G TG A GA C TG C TG G TG A p=0,…,k 全てについて行うと O(|L|k 2k) 時間

実用上の高速化 1 ・ 全てのi1,…, ik-dに対して、毎回律儀にソートする必要は無い 実用上の高速化 1 ・ 全てのi1,…, ik-dに対して、毎回律儀にソートする必要は無い ・ まず1文字目でソートしておけば、i1,…, ik-dが1文字目を含むなら、このソートの結果を共同利用できる ・ 同様に、再帰的に i文字目のソート結果を再利用できる ・ 何文字かでソートした際に、すでに等しい部分列がないものがでたら、以後それは考慮しなくて良い  ⇒ 計算時間の短縮

実用上の高速化 2 ! 早めに共通部分のソートをした方が、同値類が小さくなる ・ 添え字集合 i1,…, ik-dを分類 実用上の高速化 2 ! 早めに共通部分のソートをした方が、同値類が小さくなる ・ 添え字集合 i1,…, ik-dを分類  1.k/2 以下の添え字がk/2+1 以上のものより同じか少ない  2.k/2+1以上の添え字がk/2以下の添え字より少ない 1.は 1,…,k/2 文字目を先にソート 2.は k/2+1,…,k 文字目を先にソート これを再帰的に繰り返す

実用上の高速化 3 ・ 何文字かでソートした際に、すでに等しい部分列がないものがでたら、以後それは考慮しなくて良い 実用上の高速化 3 ・ 何文字かでソートした際に、すでに等しい部分列がないものがでたら、以後それは考慮しなくて良い ・ 何文字かでソートした際に、等しい部分列が少なくなったら、直接比較したほうが速い (等しい部分列のグループ =  同値類)

実用上の高速化 4 ・ i文字目までをソートした ・ そこまでの同値類で、全てのメンバーのミスマッチトレランスがd以下だとすでにわかっている 実用上の高速化 4 ・ i文字目までをソートした ・ そこまでの同値類で、全てのメンバーのミスマッチトレランスがd以下だとすでにわかっている ⇒ その同値類は以後計算する必要はない

実験 ・ 東芝ノートPC ・ Pentium III 750MHz、RAM 256MB(実際は80MB) ・ C で組み、Windows上のLinux、Cygwin で実行 ・ Radix sort を2k 回行ったもの、改良1,2,3,4を順々に加えたものを比較 ・ d を k の1-2割とし、ミスマッチトレランスがそれ以上のものは「それ以上」とだけ答えるようにした (実用性&計算時間から)

実験:k=20, d=2

実験:k=20, d=3

実験:k=40, d=4

実験:長さを200万、ミスマッチ率10% で固定、kを変化させる

Query に答える ・ 計算の再帰構造をメモリに記憶する ・ 与えられた文字列 S に対して、 S に関係する再帰だけをトレースすると、S を含む同値類が列挙できる   ⇒ S のミスマッチトレランスがわかる ・ 人間のY染色体で行うと、10GBくらいのメモリを使うことになるようだ。

類似する部分列のペアを列挙 ・ 各 i1,…, ik-pでの同値類を計算し、大きさ2以上の同値類のメンバー同士は、ハミング距離がp 以下。そういうペアを全部出力 ・ ハミング距離がp 未満だと、複数回出力される (ちょうどp だと、ちょうど1回出力される)   ⇒ ハミング距離がちょうどp のペアのみ出力     p を 1 から k まで順に大きくする ・ ゲノムAの部分列と B の部分列で似ているものを列挙、 ということもできる

一般のエディット距離に拡張 ・ 各 i1,…, ik-pでと j1,…, jk-pの組に対して、i1番目とj1番目、i2番目とj2番目,…,ik-p番目とjk-p番目が同じ部分列の組を見つければよい      A T G C C G     A T G C T G      A T C C C G A A T G C T        距離1        距離2

まとめ ・ 文字列の、長さ k の各部分列のミスマッチトレランスを線形時間で計算する、分類型アルゴリズムを提案した ・ 実用上速くなる手法を提案した (再帰的に分類、無用な再帰の省略) ・ 計算実験の結果を示した(ノートPCでも、何とかゲノムが扱える) ・ 類似する部分列のペアの列挙、一般の距離への拡張などの応用を示した