編輯距離問題

問題描述:設A和B是2個字符串。要用最少的字符操作將字符A轉化爲字符B。

字符操作包括:
(1)刪除一個人字符。
(2)插入一個字符。
(3)將一個字符改爲另一個字符。
將字符串A變換爲字符串B所用的最少字符操作數稱爲字符串A到B 的編輯距離,記爲d(A,B)。設計一個算法,對給定的任意兩個字符串A和B計算出他們的編輯距離d(A,B).
例如:
輸入:
        fxpimu
        xwrs
輸出:
        5
分析:


動態規劃算法代碼:

 

// 編輯距離問題.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#define maxNum 65535
using namespace std;
int minValue(int a,int b,int c)
{
	int min=a;
	if(min>b)
		min=b;
	if(min>c)
		min=c;
	return min;

}
int _tmain(int argc, _TCHAR* argv[])
{
	string a, b;
	cin>>a>>b;
	int m=a.size ();
	int n=b.size ();
	int h;
	int **d=new int *[m+1];
	for(int i=0;i<=m;i++)
		d[i]=new int [n+1];
	for(int i=0;i<=m;i++)
		d[i][0]=i;
	for(int j=0;j<=n;j++)
		d[0][j]=j;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			d[i][j]=maxNum ;
			if(a[i]==b[j])
				h=0;
			else
				h=1;
			d[i][j]=minValue(d[i-1][j-1]+h,d[i-1][j]+1,d[i][j-1]+1);
		}
	}
	cout<<d[m][n]<<endl;
	return 0;
}


發佈了25 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章