通過動態規劃來精確計算概率值

2021-06-18 18:52:32 字數 1116 閱讀 3532

對於乙個允許以特定概率進行插入、缺失和替換的測序過程模型,我們可以精確計算概率pr=pr【r|a】,即給定乙個拼接a觀察到read r的概率。總體上,我們 想要得到乙個read align到乙個拼接所有位置的概率之和。

可能的alignment的數目是read 長度的指數函式,大部分的alignment的概率極小,然而一些alignment的概率等同於或者接近於最優值。比方,當把acg對齊到accg上時,a-cg和ac-g都是最優對齊,有相同的概率。當計算乙個read的概率時,所有可能對齊的分布必須要加以考慮。

我們用一種動態規劃的方法按以下步驟計算把乙個read 對齊到拼接上所有概率的和,這種方法類似於隱馬模型的前向演算法。在公式3中,pr,j(forward)和pr,j(reverse)是把read r對齊到reference和reverse complement上,且在位置j終止的所有可能的概率的和。

我們把t【x,y】定義為觀察到的r的字首為【1....y】的概率,如果y鹼基是在reference上測序且終止於位置x。因此,pr,j=t【j,l】。t【x,0】意思是如果我們對零個鹼基測序,觀察到空序列的概率,定為1.t【0,y】表示從reference測序r個鹼基,觀察到read的字首是【1...y]且read終止與位置0.設定此概率為0.

對於x》=1和y》=1,t【x,y】被遞迴地定義為:t【x,y】=t【x-1,y-1】pr【substitute(a[x],r[y])】+t【x,y-1】pr【insert(r【y】)】+t【x-1,y】pr【delete(a【x】)】

r【y】和a【x】分別代表著核苷酸在read r的y位置和x在拼接a的概率。pr【substitute(a【x】,r【y】)】表示對核苷酸a【x】測序結果測到了核苷酸r【y】的概率。在我們的實驗中,我們不區分不同錯誤的種類,認為它們的概率都是e,而觀測到正確的核苷酸的概率是1-e。

上面列出的動態規劃演算法每個read的執行時間是o(ll)。儘管這個複雜度是多項式的,實際中卻執行很慢。但是,我們可以用alignment seeds來加速演算法。這些seeds可以告訴我們乙個read以較高概率align到拼接上的哪些區域。我們可以只對這些區域應用動態規劃演算法,這樣就能對整個概率做出良好估計。我們可以用給定長度的精確seeds(k-mers)來對拼接序列建立雜湊表。之後,每個read要和它與拼接序列有共同kmer的區域進行比較。

藍橋杯 概率計算 動態規劃解法

生成n個 a,b 的隨機整數,輸出它們的和為m的概率。輸入格式 一行輸入四個整數依次為n,a,b,x,用空格分隔。輸出格式 輸出一行包含乙個小數字和為m的概率,小數點後保留四位小數 2 1 3 4 0.3333 對於50 的資料,n 5.對於100 的資料,n 100,b 100.一開始我是直接記憶...

動態規劃 概率 期望

poj 2096 詳解見 view code includeusing namespace std const int n 2000 double dp n n intn,s double dfs int x,int y int main hdu 3853 詳解 view code view cod...

動態規劃 LCS計算

int findlcs string a,int n,string b,int m dp的第一行 for int j 0 j m 1 j 其他位置的dp值 for int i 1 i n 1 i else dp i j dp i 1 j dp i j 1 dp i 1 j dp i j 1 retu...