計算字串的距離

2021-07-23 17:05:14 字數 1160 閱讀 2849

levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。編輯距離的演算法是首先由**科學家levenshtein提出的,故又叫levenshtein distance。

對於兩個字串a和b,我們需要進行插入、刪除和修改操作將a串變為b串,定義ic,dc,rc分別為三種操作的代價,請設計乙個高效演算法,求出將a串變為b串所需要的最少代價。 給定兩個字串a和b,及它們的長度和三種操作代價,請返回將a串變為b串所需要的最小代價。 

求解過程: 

首先生成大小為(n+1)*(m+1)的矩陣dp. dp[x][y]表示a前x個字串編輯成 b前y個字元所花費的代價.

對於第一行來說,dp[0][y]表示將乙個空串變為b的前y個字元組成的子串,花費的代價為ic*y; 

同理,對於第一列dp[x][0] = x*dc;

對於其他的位置,dp[x][y]可能有以下幾種取值: 

dp[x-1][y-1]+rc;//a[x-1]!=b[y-1] 將前x-1個字元變為b前y-1個字元,再將最後乙個字元替換. 

dp[x-1][y-1];//a[x-1]==b[y-1] 將前x-1個字元變為b前y-1個字元,最後乙個不用修改. 

dp[x-1][y]+dc;//刪除乙個字元,將前x-1個字元變為b的前y個字元 

dp[x][y-1]+ic;//將a前x-1個字元變為b的前y個字元,再插入乙個字元 

dp[x][y]的值就為以上四者最小的乙個. 

求解完畢,dp[n][m]即為所求.

ex:字串a:abcdefg

字串b: abcdef

輸出:1

【**】

#include

#include

using namespace std;

int change(string a, string b)

}return dp[n][m];

}int main()

注:1. 二維陣列的初始化:

dp[0][0] = 0      等價於   memset(dp, 0, sizeof(dp));  //標頭檔案string.h

2. 計算兩個字串的相似度,相似度等於距離+1的倒數,所以

cout<<'1'<<'/'<

計算字串的距離

levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。編輯距離的演算法是首先由 科學家levenshtein提出的,故又叫levenshtein distance。輸入描述 ...

計算字串的距離

題目 levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。編輯距離的演算法是首先由 科學家levenshtein提出的,故又叫levenshtein distance。ex...

計算字串的編輯距離

levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由乙個轉換成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。如bankcomm和bocomm的距離為3,只要將 o 改為 a 再增加 nk bocomm就和bankcomm相同。所...