动态规划(算法竞赛)--线性DP编辑距离

1、B站视频链接:E07 线性DP 编辑距离_哔哩哔哩_bilibili

题目链接:编辑距离 - 洛谷

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
char a[2010],b[2010];
int f[2010][2010];
int main(){
	scanf("%s %s",a,b);
	int m=strlen(a),n=strlen(b);
	//初始化 
	for(int i=1;i<=m;i++)f[i][0]=i;//对第0列赋值,进行删除查找 
	for(int j=1;j<=n;j++)f[0][j]=j;//对第0行赋值,进行插入操作 
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(a[i-1]==b[j-1]){
				f[i][j]=f[i-1][j-1];//相等则不需要操作 
			}else{
				f[i][j]=min(f[i-1][j],min(f[i][j-1],f[i-1][j-1]))+1;
			}
		}
	}	
	printf("%d\n",f[m][n]);
	return 0;
}

降低空间复杂度优化代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
char a[2005],b[2005];
int f[2005];
int t1,t2;
int main(){
	scanf("%s %s",a,b);
	int m=strlen(a),n=strlen(b);
	for(int j=1;j<=n;j++)f[j]=j;//等价于第0行初始化
	for(int i=1;i<=m;i++){
		t1=f[0]++;//t1等价于f[i-1][0]
		for(int j=1;j<=n;j++){
			t2=f[j];
			if(a[i-1]==b[j-1]){
				f[j]=t1;
			}else{
				f[j]=min(t1,min(f[j-1],f[j]))+1;
			}
			t1=t2;//t1等价于f[i-1][j-1] 
		} 
	} 
	printf("%d\n",f[n]);
	return 0;
}
相关推荐
1000世界小札3 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
2601_956121975 小时前
背包基础篇(01、完全、分组、多重、混合)
c++·算法·动态规划
兴通物联科技7 小时前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
月华路9 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
我想走路带风9 小时前
LRU和最长前缀和(计算机网络算法)
计算机网络·算法
M78佐菲9 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
徐小夕11 小时前
表格、文档、甘特、大屏、表单一站打通:pxcharts超级表格4.0正式上线!
前端·算法·github
TechLee12 小时前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法
月华路13 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法