动态规划(算法竞赛)--线性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;
}
相关推荐
zlinear数据采集卡4 分钟前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
杨石兴29 分钟前
31、玩具MoM:用2x2矩阵串起全套流程
人工智能·算法·矩阵·电磁学
江畔柳前堤36 分钟前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
Navigator_Z38 分钟前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
zander2581 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
2601_955759881 小时前
如何降低 Claude API 批量生产返工率
大数据·人工智能·算法
rannn_1111 小时前
【力扣hot100】链表专题下|138、148、23、146
java·算法·leetcode·链表·开发
ly76891 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
阿维的博客日记2 小时前
保姆级教程-BBPE分词算法
算法·bbpe
不会就选b2 小时前
算法日常・每日刷题--<优先级队列>2
数据结构·算法