动态规划——编辑距离问题
来源:互联网 发布:网络计划图关键线路 编辑:程序博客网 时间:2024/06/06 08:40
算法原理分析:
代码实现:
#include "stdio.h"
#include "string.h"#define N 100
int min(int a,int b,int c)
{
int t = a < b ? a : b;
return t < c ? t : c;
}
void Distance(char *s1,int m,char *s2,int n) //编辑最短距离算法代码
{
int k;
int** d=new int*[n+1]; // 申请二维动态数组
for( k=0;k <=n;k++)
d[k]=new int[m+1];
int i,j;
for(i = 0;i <= m;i++)
d[i][0] = i;
for(j = 0;j <= n;j++) d[0][j] = j;
for(i = 1;i <= m;i++)
for(j = 1;j <= n;j++)
{
int cost = s1[i-1] == s2[j-1] ? 0 : 1;
int del = d[i-1][j] + 1; //删除操作
int ins = d[i][j-1] + 1; //添加操作
int sub = d[i-1][j-1] + cost; //替换操作
d[i][j] = min(del,ins,sub);
}
printf("字符串A转换为字符串B所需的最少次数为%d\n",d[m][n]);
}
void main()
{
char A[N];
char B[N];
char C[N];
char D[N];
int i,m,n;
FILE *fp;
fp=fopen("input.txt","w");
printf("字符串A =");
scanf("%s",A);
fflush(stdin);
printf("字符串B =");
scanf("%s",B);
fputs(A,fp);
fputs(B,fp);
fclose(fp);
m=strlen(A);
n=strlen(B);
Distance(A,m,B,n);
//将文件中的内容读出来
for(i=0;i<m;i++)
C[i+1]=A[i];
C[i+1] = '\0';
strcpy(A,C);
for(i=0;i<n;i++)
D[i+1]=A[i];
D[i+1] = '\0';
strcpy(B,D);
fp=fopen("output.txt","w");
fprintf(fp,"%d",n);
fclose(fp);
}
运行结果:
1 0
- 动态规划——编辑距离问题
- 编辑距离问题——动态规划
- 动态规划-编辑距离问题
- 动态规划:编辑距离问题
- 编辑距离算法——动态规划
- 编辑距离——动态规划
- 动态规划——编辑距离
- 动态规划——编辑距离
- 动态规划求解编辑距离问题
- 动态规划求解编辑距离问题(转)
- 动态规划之编辑距离问题
- 动态规划求解编辑距离问题
- 动态规划求解编辑距离问题
- java--动态规划--编辑距离问题
- 算法:编辑距离问题(动态规划)
- 动态规划 编辑距离
- 编辑距离 动态规划
- 编辑距离--动态规划
- POJ3684——Physics Experiment
- 苹果(01背包题目5)
- UML用例建模学习文档
- LeetCode-Isomorphic Strings:判断两个字符串是否同构(hashtable实现)
- Matlab代码优化
- 动态规划——编辑距离问题
- net_device详解
- 通过Java HTTP连接将网络图片下载到本地
- Reverse Linked List
- Java-二分查找算法
- QT学习笔记
- hadoop集群的负载均衡配置与添加DataNode节点和TaskTracker节点
- HDU5211——Mutiple
- 链表findMid方法总结