关于编辑距离算法的疑惑?

勤勤勤能补拙 2017-08-29 12:21:44
昨天学习编辑距离算法,官方的状态转移方程是;
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了,可是这个方程对吗?
...全文
267 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤勤勤能补拙 2017-09-05
  • 打赏
  • 举报
回复
到现在还没弄明白.....难道就没有人来回答了吗
勤勤勤能补拙 2017-09-01
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
这个特例下是对的,因为如果i和j位置的字符相等,但是dp[i-1][j]策略比dp[i-1][j-1]严格优的话,那就得dp[i-1][j]+1<dp[i-1][j-1]。但是这是不可能的,因为如果a[0~i-1]能经过k次操作改变到b[0~j],那再来一次删除操作,也就是k+1次操作,就能做dp[i-1][j-1]也就是说dp[i-1][j-1]<=dp[i-1][j]+1。 要当心的是操作的权不是1的时候就不一定对了。
也就是说如果增或者删的代价是负数的时候,就不一定对了是吧?
FancyMouse 2017-08-29
  • 打赏
  • 举报
回复
这个特例下是对的,因为如果i和j位置的字符相等,但是dp[i-1][j]策略比dp[i-1][j-1]严格优的话,那就得dp[i-1][j]+1<dp[i-1][j-1]。但是这是不可能的,因为如果a[0~i-1]能经过k次操作改变到b[0~j],那再来一次删除操作,也就是k+1次操作,就能做dp[i-1][j-1]也就是说dp[i-1][j-1]<=dp[i-1][j]+1。 要当心的是操作的权不是1的时候就不一定对了。
赵4老师 2017-08-29
  • 打赏
  • 举报
回复
百度搜相关关键字。 “多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧