python3 使用Edit distance(編輯距離)求兩個二進位制序列的相似性
阿新 • • 發佈:2019-01-23
編輯距離:
又稱Levenshtein距離(萊文斯坦距離也叫做Edit Distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數,如果它們的距離越大,說明它們越是不同。許可的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。
具體的執行過程參考點選開啟連結 這篇部落格
import math def minEditDist(sm,sn): m,n = len(sm)+1,len(sn)+1 # create a matrix (m*n) matrix = [[0]*n for i in range(m)] #初始化矩陣 matrix[0][0]=0 for i in range(1,m): matrix[i][0] = matrix[i-1][0] + 1 for j in range(1,n): matrix[0][j] = matrix[0][j-1]+1 for i in range(m): print (matrix[i]) print ("********************") cost = 0 for i in range(1,m): for j in range(1,n): if sm[i-1]==sn[j-1]: cost = 0 else: cost = 1 matrix[i][j]=min(matrix[i-1][j]+1,matrix[i][j-1]+1,matrix[i-1][j-1]+cost) for i in range(m): print (matrix[i]) return matrix[m-1][n-1] bit1='11010011010101011001011111011111001110111110111110000000001000100001100100001010011000111010000100101010011000110101110011111000' bit2='00111100011111100110100111111100111101111110111111001000001001001110011000011001100100010100110011010111001111100010101011110011' if __name__ == "__main__": mindist=minEditDist(bit1,bit2) print (mindist) len1=len(bit1) len2=len(bit2) print('the similarity is ',1-mindist/max(len1,len2 ))
最後輸出兩個序列的相似性。