- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了计算最小编辑距离(将一个单词转换为另一个单词所需的最小插入、删除和替换量),动态规划解决方案基于递归关系,其中检查两个字符串的最后一个字符。详情在https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm .
关于编辑距离,这个算法的描述在互联网上随处可见,但都只是在没有证明的情况下断言其正确性。根据编辑距离的定义,您可以在中间插入、删除或替换字符,而不仅仅是在末尾。那你怎么证明这个递推关系真的成立呢?
最佳答案
使用归纳证明递归算法正确
首先,正如我在评论中所说,您可以将动态规划视为加速递归的一种方式,证明递归算法正确的最简单方法几乎总是通过 induction : 证明它在一些小的基本情况下是正确的,然后证明,假设它对于大小为 n 的问题是正确的,那么它对于大小为 n+1 的问题也是正确的。通过这种方式,证明紧密地反射(reflect)了递归结构。
此问题的通常递归将问题“找到将字符串 A 编辑为字符串 B 的最小成本”分解为 (|A|+1)(|B|+1) 子问题“找到编辑前 i 个字符的最小成本”将字符串 A 转换为字符串 B 的前 j 个字符",对于所有 0 <= i <= |A|和 0 <= j <= |B|。
选择基本案例
通常通过归纳,我们可以选择少量简单的基本案例(也许只有一个),证明我们可以轻松地计算出它们的正确答案,并且很明显,所有其他案例的正确性将如何通过基本案例,因为无论我们从什么案例开始,都将只有一个需要满足的假设“链”,并且该链显然必须以我们的一个基本案例结束。然而,对于这个特定问题,为了表明算法最优地解决了 (i, j) 子问题,我们需要首先假设它解决了 (i-1, j)、(i, j-1) 和 (i-1 , j-1) 子问题的最优解(因为如果这些子问题的任何答案不正确,它可以很容易地为 (i, j) 子问题计算出完全错误的答案)。这将需要比通常更复杂的归纳:代替需要满足的单个假设“链”,我们现在有一个假设的分支“树”,每个点有(最多)3 个子节点。我们需要以这样的方式选择基本情况,即对于任何 (i, j),整个假设树最终“停止”,即其中的每条路径最终都会遇到满足其假设的基本情况。
回顾一下:为了证明我们对 (i, j) 的解是最优的,我们必须假设我们有 (i-1, j)、(i, j-1) 和 (i-1, j-1) 的最优解;为了满足对于 (i-1, j) 的假设(也就是说,为了证明我们对 (i-1, j) 的解是最优的),我们需要假设我们有 (i-2, j) 的最优解), (i-1, j-1) and (i-2, j-1), etc., etc. 如何选择有效的基本情况?在遍历这棵树时,即从证明我们对子问题 (i, j) 的解决方案正确到证明我们对其任何一个“子”子问题 (i', j') 的解决方案是正确的,我们注意到:
关于algorithm - 证明动态规划方法对最小编辑距离的正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35835942/
我正在创建我的第一个 WAR 文件。我一直在试验 ant buildfile 语法,我的 buildfile 的第一部分从我的 Eclipse 项目中获取内容并将其放入 /dist 文件夹中,然后将其
我是一名学习 SQL 和 PHP 的学生,我接到了一项任务,要使用 PHP 和 mySQLi 创建学生反馈表,我真的一直在思考如何为项目设计数据库! 我正在创建一个系统,用户可以在其中登录网页,如果用
这个问题在这里已经有了答案: Is it possbile to test for expected errors when the testee exits with failure using
我目前正在设计和开发一个 Web 应用程序,该应用程序有可能快速增长。我将提供一些一般信息,然后继续我的问题。我会说我是一名中级网络程序员。 以下是一些规范:MySQL - 数据库后端PHP - 用于
我不知何故无法在我的日志解析器应用程序中实现报告功能。 这是我目前所做的: 我正在编写一个应用程序,它读取日志文件并在字符串中搜索可以在用户配置文件中定义的多个正则表达式。对于从配置中解析的每个所谓的
我有兴趣学习如何在多开发团队场景中设计/规划 Web 应用程序开发。 假设“项目经理/负责人”的角色: 成功的 Web 应用程序开发需要哪些“文档”? 需要什么 UML 图,需要什么程度? 在设计/计
table a (t_a): id name last first email state country 0 sklass klass steve
我们建立了一个广泛使用 JQuery UI 的 AJAX 网站。我们有 30 多个自制的 JQuery UI 小部件(动态加载)。我们到处都使用 JQuery native 小部件:对话框、 slid
我是一名优秀的程序员,十分优秀!