基因比對演算法

資訊系108 梁祐承

Why better algorithm

  • 提高處理器時脈 => 溫度上升 造成限制
  • 改進製程降低溫度 => 目前製程已逼近物理極限
  • 平行計算取代單一處理器 => 部份效能損失,不一定符合要求

相似度分數

描述兩序列間相似度

  • 相同 => 加兩分
  • 不同 => 扣一分 
  • 填入空白 => 扣一分,可選擇性加上連續空白的額外扣分
 tcctctgcctctgccatcat---caaccccaaagt
 |||| ||| ||||| |||||   ||||||||||||
 tcctgtgcatctgcaatcatgggcaaccccaaagt

比對演算法

列舉法 (brute force)

序列A: ATC

序列B: TCG

配對 分數
ATC
TCG
-3
 
A-TC
-TCG
-4
A-TC
T-CG
-4
A-TC
TC-G
-4
...
ATC--
-TCG-
1

無法實用!

所需時間成指數成長

且基因組資料龐大

比對演算法

動態規劃 (Dynamic programming)

  • 先計算短序列的最高分數,再計算更長的序列
  • 避免重複計算
  • 時間複雜度:O(m*n)

Pseudo code

int dpScore(char *A, char *B, int lenA, int lenB) {
    // initialize
    int score[lenA + 1][lenB + 1];
    for(int i = 0;i < lenA;i++) score[0][i] = -i;
    for(int i = 0;i < lenB;i++) score[i][0] = -i;

    // calculate
    for(int i = 1;i <= lenA;i++) {
        for(int j = 1;j <= lenB;j++) {
            if(A[i] == B[j]) { // match
                score[i][j] = score[i - 1][j - 1] + 2;
            }
            else { // not match
                score[i][j] = max(score[i][j - 1],
                                  score[i - 1][j],
                                  score[i - 1][j - 1]) - 1;
            }
        }
    }
    return score[lenA][lenB];
}

序列A: ATCGGCC

序列B: ACGC

A C C G G C C
0 -1 -2 -3 -4 -5 -6 -7
A -1 2 1 0 -1 -2 -3 -4
C -2 1 1 3 2 1 0 -1
G -3 0 0 2 5 4 3 2
C -4 -1 1 2 4 4 6 5
ATCGGCC
A-CG-C-

基因比對演算法報告

By Liang Yu-Cheng

基因比對演算法報告

2018認識基因通識

  • 796