基因比對演算法
資訊系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認識基因通識
- 807