动态规划——编辑距离

参考博客:https://blog.csdn.net/ghsau/article/details/78903076

题目

编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。

编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:

    插入一个字符
    删除一个字符
    替换一个字符

举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替换为s) -> sittin(e替换为i) -> sitting(插入g),至少要做3次操作。


思路

用lev(i,j)来表示a和b的Leveinshtein距离(i和j分别代表a和b的长度),则:

  1. 当min(i,j)=0时,lev(i,j)=max(i,j),一个字符串的长度为0,编辑距离自然是另一个字符串的长度
  2. 当a[i]=b[j]时,lev(i,j)=lev(i−1,j−1),比如xxcz和xyz的距离=xxc和xy的距离
  3. 否则,lev(i,j)为如下三项的最小值:
    1. lev(i−1,j)+1(在a中删除ai),比如xxc和xyz的距离=xx和xyz的距离+1
    2. lev(i,j−1)+1(在a中插入bj),比如xxc和xyz的距离=xxcz和xyz的距离+1=xxc和xy的距离+1
    3. lev(i−1,j−1)+1(在a中把ai替换bj),比如xxc和xyz的距离=xxz和xyz的距离+1=xx和xy的距离+1

 

转移方程

动态规划——编辑距离_第1张图片

 

代码:

#include
#include
#include
using namespace std;
#define maxSize 100
int lev[maxSize][maxSize]={0};
int LEV(string str1,string str2,int len1,int len2)
{
	for(int i=0;i>str1;
	cin>>str2;
	int len1=str1.length();
	int len2=str2.length();
	cout<

 

你可能感兴趣的:(经典算法,动态规划,算法)