作者回复: (2)基本是对的,只是明确一下,“如果相等不需要替换则编辑距离 “加” 0”
(1)中的情况比较绕,你可以这么来看,一开始A、B都是空串,A增加一个字符m,两者编辑距离是1,然后B增加一个字符m,即使两个m相等,编辑距离也会由1变为2,而不是维持在1,也不会降到0。因为编辑距离2表示的是A添加一个m字符,B再添加一个m字符。虽然在人看来两者相等,但对于计算机而言要遍历这种情况。至于两者相等的情况,由替换操作表示,因此可以取到最小值0
作者回复: 分析的很好,在实际项目中还可以考虑其他因素,例如用户搜索的次数、对应的搜索结果数量等等。
作者回复: 应该是2,2,0。我稍后改一下
具体的分解你可以看图表中的注释,分三种情况,每种情况都对应于红色箭头的指向
作者回复: 结合表格会更容易理解
作者回复: 我会写篇加餐,给大家推荐几本书
作者回复: 很好的思考,在不同的应用场景我们可以考虑不同的侧重点。比如你这里说的前缀更重要,你可以考虑一下如何修改编辑距离的定义,以及对应的状态转移方程,来体现前缀更重要。
除基于编辑距离的相似度,还可以考虑其他的因素,例如查询的次数(热度),查询对应的搜索结果数量、个性化等等,不过这是另一个很大的话题
作者回复: 可以这么说,适应动态规划的要求是每一状态的最优解都可以由上一个状态的最优解推导出来,所以动态规划最核心的步骤是找出状态转移方程。如果没有办法通过上一个状态的最优解推导出当前状态的最优解,那么就不适合使用动态规划方法。
ES或者Solr中计算搜索结果的相似度,是使用的信息检索理论,不是简单的“编辑距离”。不过在一些query autocomplete的功能中可能会用到“编辑距离”。编辑距离更适合拉丁文,所以中文的拼音也可用到它,但是中文词就不太适合了。
作者回复: 是个很好的想法,不过这里有个假设就是比较相似度的词它们拥有同样的前缀,对吧?例如,我们可以比较mouse和mouuse,但是可能没法处理mouse和nouse
作者回复: 感谢你关于斐波那契数列的建议,我之前也考虑过,由于这个例子非常直观,也可以使用迭代实现,所以担心无法体现状态转移的特点。
作者回复: 你问题的第一句,具体是指表格中三种情况的第一种,是吧?这是指AB两者一开始都为空,那么A字符串增加1个m,编辑距离加1,然后B再增加一个m,所以编辑距离再加1变为2,当然这种不是最小值,最小值是0,也就是表中第三种情况
作者回复: 我会在下一期放出sample code
作者回复: 没错,这是最基本的原则,很高兴课程对你有帮助
作者回复: 动态规划穷举了到当前状态的所有的可能性,然后去最优的。所以虽然都是m,有一种可能是先删除1个m,再添加1个m。从人的角度看这是多于的,不过机器需要这样一个过程,确保不会漏掉最优解
作者回复: 是的
作者回复: 过程上确实有类似,但是本质上有点不同。数学归纳法是可以归纳出结论的,而动态规划有的时候不行,我们需要把整个动态规划的过程跑完才能知道最终的结果。
作者回复: 是的,更详细的解释