首页 新闻 会员 周边 捐助

关于编辑算法转移方程的疑惑?

0
悬赏园豆:15 [已解决问题] 解决于 2019-01-07 14:48

昨天学习编辑距离算法,官方的状态转移方程是;
i==0 ... j==0 ....
当i>=1 && j>=1  dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]]+str1[i]==str2[j]?0:1);
我又在想, 这样的状态方程是否也正确呢?
当 i>=1 && j>=1
if(str1[i]==str2[j])  dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]]+1);
我自己证明不了,就拿去试着去oj测试了,结果是ac了,可是这个方程对吗?

Jinke2017的主页 Jinke2017 | 菜鸟二级 | 园豆:237
提问于:2017-08-29 12:59
< >
分享
最佳答案
0

我自己修改的编辑距离转移方程:
if(str1[i]==str2[j]) dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]]+1);
我认为 这个转移方程也是对的,原因如下:
假设上述方程成立,则 当str[i]==str2[j]时,dp[i-1][j-1] 一定 小于 dp[i-1][j-1]+1; √ 无需证明
所以只需要证明2个 ①dp[i-1][j-1] 一定<= dp[i-1][j] +1 且 ②dp[i-1][j-1] 一定<= dp[i][j-1] +1
使用 反证法证明①:
假设 存在 dp[i-1][j-1] > dp[i-1][j]+1 ,也就是 dp[i-1][j-1] - dp[i-1][j] > 1 ;
但这是不可能的,为什么?因为dp[i-1][j-1]加上str2j就可以跟dp[i-1][j]相等了,最多需要一步。所以 dp[i-1][j-1] - dp[i-1][j] > 1 ; 这是不可能的。
所以 dp[i-1][j-1] 一定<= dp[i-1][j] +1 ; ①成立
同理可证 ②dp[i-1][j-1] 一定<= dp[i][j-1] +1 成立。

所以
当 i>=1 && j>=1
if(str1[i]==str2[j]) dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]]+1);
这个转移也是对的。如果有错误,请指正。

Jinke2017 | 菜鸟二级 |园豆:237 | 2018-11-18 10:20
其他回答(1)
0

如果任意一个点的右边或下边或者右下边的值比在这个点大的话,这个是没问题的;否则,反之。

收获园豆:15
ninding | 园豆:206 (菜鸟二级) | 2017-08-29 14:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册