Algorithm 最小编辑距离动态规划法的正确性证明
为了计算最小编辑距离(将一个单词转换为另一个单词所需的最小插入、删除和替换量),动态规划解决方案基于递归关系,其中检查两个字符串的最后一个字符。详情见附件 当涉及到编辑距离时,该算法的描述在互联网上随处可见,但所有这些算法都只是在没有证据的情况下断言其正确性。通过编辑距离的定义,你可以插入、删除或替换中间的字符,而不仅仅是在结尾。那么,如何证明这种递归关系实际上成立呢?使用归纳法来证明递归算法是正确的 首先,正如我在评论中所说,您可以将动态编程视为加速递归的一种方法,而证明递归算法正确性的最简单方法几乎总是:证明它在一些小的基本情况下是正确的,然后证明,假设它对大小为n的问题是正确的,那么它对大小为n+1的问题也是正确的。这样,证明与递归结构非常相似 对于所有0=2或j-j'>=2,此问题通常的递归将“查找将字符串A编辑成字符串B的最小成本”问题分解为(|A |+1)(|B |+1)子问题“查找将字符串A的前i个字符编辑成字符串B的前j个字符的最小成本”Algorithm 最小编辑距离动态规划法的正确性证明,algorithm,language-agnostic,dynamic-programming,Algorithm,Language Agnostic,Dynamic Programming,为了计算最小编辑距离(将一个单词转换为另一个单词所需的最小插入、删除和替换量),动态规划解决方案基于递归关系,其中检查两个字符串的最后一个字符。详情见附件 当涉及到编辑距离时,该算法的描述在互联网上随处可见,但所有这些算法都只是在没有证据的情况下断言其正确性。通过编辑距离的定义,你可以插入、删除或替换中间的字符,而不仅仅是在结尾。那么,如何证明这种递归关系实际上成立呢?使用归纳法来证明递归算法是正确的 首先,正如我在评论中所说,您可以将动态编程视为加速递归的一种方法,而证明递归算法正确性的最简单
基本上,如果我们沿着这棵树走一步,两个“子问题坐标”(i或j)中至少有一个会减少,但不会超过1。这意味着,如果我们继续沿着树往下走,那么不管我们在往下走的过程中选择了哪一个“子”子问题,我们最终必须找到一个坐标为(至少)0的子问题,也就是说,对于某些坐标为0的子问题,我找不到任何令人满意的证明,所以我做了一个。我读过的所有证据实际上并不能证明这些案例都是详尽无遗的 (A)始终存在至少一个最佳编辑序列,并将其称为Eo 这是微不足道的 (B)在Eo中,有些字符永远不会被插入或更改。最后一个这样的字符称为pivot 如果没有,我们可以使用字符串的开头作为轴。在Eo中,这个公共子序列从头到尾都不会改变。我们不是假定它是最长的公共子序列或任何东西 e、 (g)#小猫#坐着→ 枢轴:'#ITTN'[-1]='N' 这个轴心有一些特性,使问题变得更容易
由于(1)我们只需要考虑原始字符串和目标字符串的支点的右侧。让我们假设左侧是最优的(贪婪的),编辑的数量将添加到总数中。
e、 g)
#weofanbmcdepmqu->eopasbctdewni
只考虑PMQU→ wni
使用(2)这个子问题可以如下解决。
len(原始)>len(目标):asdfgh→qwer
删除len(原始)-len(目标)次以适应长度,替换len(目标)次以适应字符。这可以按任何顺序进行,因为它们在距离上都是相等的。在最后一次编辑时删除最后一个字符是这样的解决方案之一,它等于dp(原始[:-1]→目标)+1
len(原件)这是我的证明:
由于我们尝试了所有可能的操作,递归公式必须为真。您可以将DP视为加速递归的一种方法,证明递归算法正确性的最简单方法几乎总是通过归纳法:在一些小的基本情况下证明它是正确的,然后证明,假设它对大小为n的问题是正确的,这对于大小为n+1的问题也是正确的。这样,证明紧密地反映了递归结构