我遇到了编辑距离问题的这种变化:
找到从一个单词到另一个单词的最短路径,例如storm-gt; power,使用isValidWord()
函数验证每个中间单词。没有其他人可以访问单词词典,因此无法构建图表。
我试图解决这个问题,但它本身似乎不是一个与距离有关的问题。使用简单的递归可能吗?但是你怎么知道你正朝着正确的方向前进?
其他人觉得有趣吗?期待一些帮助,谢谢!
答案 0 :(得分:2)
这是刘易斯卡罗尔的一个难题,称为Word Ladders。唐纳德克努特在Stanford Graphbase中介绍了这一点。这也是
您可以将其视为广度优先搜索。您将需要访问单词词典,否则您将需要搜索的空间将是巨大的。如果您只能访问有效单词,则可以生成单词的所有排列,然后使用isValidWord()对其进行过滤(Norvig的“How to Write a Spelling Corrector”是生成编辑的一个很好的解释)。
您可以尝试最小化当前所处位置与可能位置之间的编辑距离来指导搜索。例如,生成要搜索的所有节点的空间,并按最小编辑距离排序。首先遵循与目标最接近的链接(例如,最小化编辑距离)。在示例中,请遵循最接近“power”的节点。
我发现这个也很有趣,所以有一个Haskell实现here,它运行得相当好。评论中有一个Clojure version的链接,它有一些非常好的可视化。
答案 1 :(得分:0)
您可以同时从两个方向搜索。即在风暴中更改一个字母并通过isValidWord()运行它,然后更改一个字母并通过isValidWord()运行它。如果这两个词是相同的,那么你找到了一条路径。