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相同。所...