《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(35)山河社稷图展开 - 编辑距离(字符串DP)

devtools/2025/3/15 5:24:25/

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(35)山河社稷图展开 - 编辑距离(字符串DP)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的山河社稷图,图中有一卷古老的山河社稷图,图面闪烁着神秘的光芒。图前有一块巨大的石碑,上面刻着一行文字:“欲展此图,需以山河社稷图之力,编辑距离,字符串DP显真身。”

哪吒定睛一看,石碑上还有一行小字:“字符串"intention""execution"的编辑距离为5。”哪吒心中一动,他知道这是一道关于计算两个字符串之间最小编辑距离的难题,需要通过动态规划的方法来解决。

暴力解法:山河社稷图的初次尝试

哪吒心想:“要计算两个字符串之间的编辑距离,我可以尝试所有可能的编辑操作。”他催动山河社稷图之力,通过递归的方式,枚举所有可能的插入、删除和替换操作,计算最小编辑距离。

int minDistance(string word1, string word2) {int m = word1.size();int n = word2.size();if (m == 0) return n;if (n == 0) return m;if (word1[0] == word2[0]) {return minDistance(word1.substr(1), word2.substr(1));}int insert = minDistance(word1, word2.substr(1));int deleteOp = minDistance(word1.substr(1), word2);int replace = minDistance(word1.substr(1), word2.substr(1));return 1 + min({insert, deleteOp, replace});
}

哪吒成功地计算了编辑距离,但山河社稷图的光芒却黯淡了下来。他意识到,这种方法虽然可行,但时间复杂度极高,尤其是当字符串很长时,灵力消耗巨大。

C++语法点

在C++中,动态规划是解决编辑距离问题的常用方法。以下是一些重要特性:

  • 二维数组

    • 使用vector<vector<int>>表示动态规划表。
    • 常用操作:
      • dp[i][j]:访问第i个字符、第j个字符时的最小编辑距离。
      • 初始化二维数组:vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0))
  • 动态规划

    • 通过状态转移方程dp[i][j] = min(dp[i-1][j] + 1, dp[i][j-1] + 1, dp[i-1][j-1] + (word1[i-1] == word2[j-1] ? 0 : 1))计算当前状态的最小编辑距离。

高阶优化:字符串DP的智慧

哪吒元神中突然浮现金色铭文——「山河社稷图展开,字符串DP显真身」。他意识到,可以通过动态规划的方法,优化编辑距离的计算过程。

哪吒决定使用动态规划,创建一个二维数组dp,其中dp[i][j]表示将word1的前i个字符转换为word2的前j个字符所需的最小编辑距离。通过状态转移方程,他成功地计算了最小编辑距离,而且灵力消耗大幅减少。

int minDistance(string word1, string word2) {int m = word1.size();int n = word2.size

http://www.ppmy.cn/devtools/167208.html

相关文章

【C++标准库类型】深入理解C++中的using声明:从基础到实践

目录 一、using声明基础 1.1 基本语法形式 1.2 典型应用场景 1.3 作用域规则 二、关键注意事项 2.1 命名冲突处理 2.2 头文件使用规范 2.3 与typedef的对比 三、面向对象中的应用 3.1. 解除派生类名称隐藏&#xff08;核心应用&#xff09; 3.2. 构造函数继承&#…

Windows 发票闪印 PrintPDF-v3.6.10-第三方发票打印辅助工具,无需安装阅读器即可使用

PrintPDF_发票闪印 链接&#xff1a;https://pan.xunlei.com/s/VOLCPVsJiYRh9GDPHK_jd5ZoA1?pwdb399# 使用说明&#xff1a; 1、文件导入数量不限&#xff0c;但单个文件限制是10页。支持PDF、OFD和图片版电子发票&#xff08;非以上三种文件会自动跳过&#xff09;。文件导入…

L2-4 吉利矩阵

输入样例&#xff1a; 7 3输出样例&#xff1a; 666 这道题是暴力纯搜&#xff0c;但是很难想&#xff0c;我这个是看的别人的代码 #include "bits/stdc.h" using namespace std; int x[20][20]; int l, n; int cnt 0; int sumx[5], sumy[5]; void dfs(int x, in…

Office Word高质量导出pdf(Word 2010版本)

1 文件-选项-高级-高保真 2 打印机设置 a导出为WPS PDF b文件-打印-打印机属性-质量2400 c然后打印

[Python爬虫系列]bilibili

[Python爬虫系列]bilibili 具体逻辑 bv号 -> 处理多P视频 -> 拿到cid -> sign -> 请求下载&#xff0c;其中sign参考前人算法&#xff08;https://github.com/SocialSisterYi/bilibili-API-collect&#xff09; b站视频下载链接 https://api.bilibili.com/x/pl…

【实战ES】实战 Elasticsearch:快速上手与深度实践-6.1.2TLS加密通信配置

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 6.1.2 TLS加密通信配置深度实战指南1. TLS核心配置原理1.1 加密层对比矩阵1.2 证书管理方案对比 2. 全链路配置实战2.1 证书生成模板2.2 集群加密配置 3. 高级安全策略3.1 加…

Fuel 爬虫:Scala 中的图片数据采集与分析

互联网上的图片资源丰富多样&#xff0c;涵盖了从社交媒体到新闻媒体、从艺术作品到科学研究的各个领域。这些图片不仅是视觉信息的载体&#xff0c;更是数据挖掘和分析的重要对象。通过爬取和分析图片数据&#xff0c;我们可以实现图像识别、内容分类、情感分析等多种应用。本…

计算机视觉|首次写入政府工作报告!这个科技新词“具身智能”到底是什么?

一、具身智能与视觉-动作联合建模简介 具身智能&#xff08;Embodied Intelligence&#xff09; 是人工智能领域的关键研究方向&#xff0c;强调智能体通过物理实体与环境交互实现认知和智能行为。与传统人工智能基于静态数据和符号推理不同&#xff0c;具身智能依赖动态感知与…