查找双峰/单词阶梯的最佳算法是什么?

use*_*502 5 algorithm

有没有一种有效的算法来查找双峰/单词阶梯?可以做蛮力的,但是必须有更好的方法来做。怎么样?

http://en.wikipedia.org/wiki/Word_Ladder

Hog*_*gan 3

如果您认为这是一个路径查找问题,您可以尝试 A* 算法。

(基于启发式的答案空间搜索。)

另外,您只是想找到解决方案还是最好的解决方案?

编辑

我不想改变这个,但我发现我的例子很糟糕,因为一步就解决了它。查看示例时请忽略该问题。

快速概述 A* 的工作原理(并稍微应用于此问题)

要使用 A*,您需要一个评估给定状态(完成)的函数。您希望更接近目标的状态具有更高的值。

对于这个问题,有两个示例函数

  • (每个正确的字母 * 1) - (与目标不同的字母数 * 10)
  • (每个正确的字母 * 100) - (与目标不同的字母数)

正如您所看到的,第一个倾向于单词大小接近正确的字母,第二个倾向于正确的字母。

不确定哪个更好——尽管你也可以做一个平衡的公式。

假设我们正在尝试从机器人 -> 船中获取

然后,您将评估 boy 的所有可能的变化,让我们使用第一个函数,因此您将评估的两个示例是 boot 和 bat(以及其他)。 boot 的值为 3,bat 的值为 -7。Boot 更好(根据此函数),因此我们将评估 Boot 的所有可能更改(在任何其他更改之前)并找到解决方案。

清澈如泥?也许维基百科解释得更好。

http://en.wikipedia.org/wiki/A *_search_algorithm

附注:

  • 如果函数设计正确,如果给定问题存在这样的函数,A* 将找到最佳解决方案。这是 A* 的巧妙功能。

  • A* 增强功能是短路查看状态(例如在上面的情况中 - 正 3 是一个非常好的分数(4 是最高分数),因此您的算法可以停止查看其他状态并转到需要满足的状态)非常接近。

  • A* 的两个难点是 1) 找到正确的函数,2) 能够枚举所有可能的状态。我认为有了一个好的字典文件和一些快速的散列/搜索函数,2 并不难做到。