由公式可以看出,(i-1,j)對應刪除操作,(i,j-1)對應插入操作。
可以這樣理解,現在耗費了di-1,j步操作將字串a(1,i-1)轉換成了b(1,j),則在將a(1,i)轉換成b(1,j)時,我們可以直接刪掉字元a(i),
問題變成a(1,i-1)轉換成b(1,j),從而dij就等於di-1,j+1。同理,現在耗費了di,j-1步操作將字串a(1,i)轉換成了b(1,j-1),
則在將a(1,i)轉換成b(1,j)時,我們可以將b(j)新增到a(1,i)末尾(此時a(1,i)已轉換成b(1,j-1))構成b(1,j)。對應的**實現如下:
#include
#include
#include
int dist[100][100];//表示長度為i的字串變為長度為j的字串需要的編輯距離
int min(int i,int j)
int edit_distance(char* a,char* b)
//a為空字串,將a變為b需要不停地新增b的字元
for ( j=0;j<=len_b;j++)
for ( i=1;i<=len_a;i++)
}for(i=0;i<=len_a;i++)
printf("\n");
}return dist[len_a][len_b];
}int main()
--
編輯距離問題(動態規劃)
問題描述 設a和b是兩個字串,要用最少的字元操作將字串a轉換為字串b,這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 修改乙個字元。將a轉換為b所用的最少字元運算元稱為a到b的編輯距離,記為d a b d中的a,b指的是a和b的長度,設計乙個演算法對任給的a,b,計算出d a b 問...
動態規劃 編輯距離問題
設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計算其編輯距離 d a,b 第一行是字串...
動態規劃之編輯距離
演算法問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計算其編輯距離 d a,...