序列比對 levenshtein distance

2021-09-24 15:50:12 字數 1043 閱讀 9036

一、兩個字串a和b,將a變為b需要經過最少幾次編輯(包括插入、刪除、替換)?

解決問題,俄羅斯人levenshtein設計了乙個演算法,名為levenshtein距離,具體如下:

levenshtein的具體演算法是:

1.獲取字串a的長度為n,獲取字串b的長度為m,如果m=0,返回n;如果n=0,返回m。

初始化乙個二維陣列d[m+1,n+1],將第一行填充為0至n,將第一列填充為0至m。注意這裡的填充不是0。

2.迴圈比對a的每乙個字元與b的每乙個字元。對於字元ai與bj,如果a[i]==b[j],那麼cost為0,否則cost為1。這時比較二維陣列d中的三個值:d[i-1,j]+1(左側值+1), d[i,j-1]+1(頂部值+1), d[i-1,j-1]+cost(左上角+cost);這三個值分別代表刪除,插入或者替換。取三個值中的最小值填充d[i,j]

3.返回d陣列最右下角d[m+1,n+1]的值就是levenshtein距離。

下面通過乙個例項來進行說明:

求:atctg變為agct需要經過多少步驟?

取得兩個字串的長度,分別為5和4,並且建立乙個二維陣列[5,6]

開始比對:

可知,a=a.故cost=0,對比其左上和正左邊以及正上方三個值,會發現左上的最小,所以加其加0,做為此補充位置的distance,如此類推,第二列補充完畢將是這樣的:

。如此補充完畢,得到其結果為:

所以,atctg變為agct需要經過兩步,即1,把g換成t,在最後加上g。

Michael Schatz 序列比對課程

michael schatz cold spring harbor laboratory 最近在研究 bwa mem 序列比對演算法,直接去看 看不懂,就3頁,太精簡了,好多背景知識都不了解。通過google,發現了一系列序列比對的課程,講得真是太好了,真是撿到寶了!如果你想搞透生物資訊的基石 序列...

Michael Schatz 序列比對課程

michael schatz cold spring harbor laboratory 最近在研究 bwa mem 序列比對演算法,直接去看 看不懂,就3頁,太精簡了,好多背景知識都不了解。通過google,發現了一系列序列比對的課程,講得真是太好了,真是撿到寶了!如果你想搞透生物資訊的基石 序列...

序列比對 七 序列比對之線性空間演算法

原創 hxj7 一般而言,運用動態規劃演算法進行序列比對對記憶體空間的要求是 o mn 階的,本文介紹了一種線性空間要求的序列比對方法。前文如 序列比對 一 全域性比對needleman wunsch演算法 所介紹的運用動態規劃演算法進行序列比對時,對記憶體空間的要求是o mn 階的。如果只是要求最...