動態規劃之編輯距離問題

2021-08-30 15:30:14 字數 765 閱讀 1894

由公式可以看出,(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,...