bi-interval匹配演算法詳解
一、引數說明
T=ACGTCTCGAGACGT
|T|=14
T[i]=第i個鹼基
T[i,j]=第i到第j個鹼基的字串
Ti 整個的字串
S:S(i)是第i小的陣列的位置
B[i]=尾綴陣列
C(a)共四個值,分別為C(A)C(C)C(G)C(T) C(A)={0<=i<=n-1:T[i]<A} 的個數
O(a,i)=從B[]表從0~i中,a 的個數,大小為4*N
P·W表示:字串P和W的直接連線
Pa 表示:字串P和鹼基a 的連線
P(上橫線)表示P的補
二、演算法舉例
問題:reference:ACGTCTC; read:GTC;
由read的T開始去匹配,那麼在bi-interval模型中他是怎麼實現的呢?
先對reference取反:TGCAGAG,再前後調換位置:GAGACGT
reference 右移:
- ACGTCTCGAGACGT
- TACGTCTCGAGACG
- GTACGTCTCGAGAC
- CGTACGTCTCGAGA
- ACGTACGTCTCGAG
- GACGTACGTCTCGA
- AGACGTACGTCTCG
- GAGACGTACGTCTC
- CGAGACGTACGTCT
- TCGAGACGTACGTC
- CTCGAGACGTACGT
- TCTCGAGACGTACG
- GTCTCGAGACGTAC
- CGTCTCGAGACGTA
排序:
- ACGTACGTCTCGAG
- ACGTCTCGAGACGT
- AGACGTACGTCTCG
- CGAGACGTACGTCT
- CGTACGTCTCGAGA
- CGTCTCGAGACGTA
- CTCGAGACGTACGT
- GACGTACGTCTCGA
- GAGACGTACGTCTC
- GTACGTCTCGAGAC
- GTCTCGAGACGTAC
- TACGTCTCGAGACG
- TCGAGACGTACGTC
- TCTCGAGACGTACG
BWT表建立完畢,從read(GTC)的中間鹼基T開始匹配,其interval為:[12,1,3]。
- Backward匹配:
演算法分析:
b從0~5表示$,0,1,2,3,4,N。先算出k上面有多少b,加上O(b)記為Kb,同事算出在[k,k+s]這個範圍內,有多少b,記為Sb。
L遞推求,L0與W的L相同,L4=L0+S0,L3=L4+S4,L2=L3+S3......
針對具體問題:T:bi-interval:[12,1,3] a:G
K0=C($~0)+O(0,11)=0 ; S0=0
K1=C(A~1)+O(1,11)=1+3=4 ; S1=O(1,14)- O(1,11)=0(不存在)
K2=C(C~2)+O(2,,11)=4+3=7 ; S2=O(2,13)- O(2,11)=1 (有1個)
K3=C(G~3)+O(3,11)=8+2=10 ; S3=O(3,13)-O(3,11)=2(有2個)
K4=C(T~4)+O(4,11)=12+3=15 ; S4=0 (不存在)
K5~沒有奇異值,不算。
L0=L=1;
L4=L0+S0=1+0=1
L3=L4+S4=1(即A右邊有C)
L2=L3+S3=1+2=3~即T的反變換:A右邊有G的是第3行
L1=L2+S2=3+1=4~即T的反變換:A右邊有T的是第4行。但s4=0,也是不存在
根據輸入的a=G,則得到的bi-interval[k3,l2,s3]=[10,1,2]
- Forward匹配:
Forward匹配要做的就是利用backward 的公式,改變輸入引數,得到forward(向右)匹配的bi-interval結果。
1.首先:將a=C變成a(補)=G,
2.再將原bi-interval的k和l換位置,得到[1,10,2]。
這樣就得到了一個新的backward匹配工作。
針對具體問題:GT(補)=AC,它的bi-interval是:[1,10,2] ; a=C->a(補)=G
L0=C($~0)+O(0,0)=0 ; S0=0
L1=C(A~1)+O(1,0)=1+0=1 ; S1=O(1,2)- O(1,0)=0(不存在)
L2=C(C~2)+O(2,,0)=4+0=4 ; S2=O(2,2)- O(2,0)=0 (不存在)
L3=C(G~3)+O(3,0)=8+0=8 ; S3=O(3,2)-O(3,0)=1(有1個)
L4=C(T~4)+O(4,0)=12+0=12 ; S4=O(4,2)-O(4,0)=1 (有1個)
L5~沒有奇異值,不算。
K0=K=10;
k4=K0+S0=10+0=10(即GT右邊有A)
k3=k4+S4=10+1=11(即GT右邊有C)
K2=k3+S3=11+1=12~S2=0所以不存在
K1=K2+S2=12+0=12~S1=0所以不存在
根據輸入的a=G,輸出的時候,要調換K和L 的位置,則得到的bi-interval[k3,l3,s3]=[11,8,1]
匹配流程走完。