有没有一种高效的算法可以找到一个双词/单词阶梯?可以通过蛮力方法来完成,但肯定有更好的方法。如何实现?
有没有一种高效的算法可以找到一个双词/单词阶梯?可以通过蛮力方法来完成,但肯定有更好的方法。如何实现?
您需要评估男孩的所有可能变化,让我们使用第一个函数作为例子,那么您需要评估的两个示例是boot和bat(以及其他)。boot的值为3,而bat的值为-7。根据这个函数,Boot更好,因此我们将在其他任何变化之前评估Boot的所有可能变化并找到解决方案。
清楚如泥?也许维基百科能更好地解释。
http://en.wikipedia.org/wiki/A*_search_algorithm
注:
A*算法在函数设计正确的情况下,如果为给定问题存在这样的函数,则可以找到最佳解。这是A*算法的一个不错的特点。
A*算法的一种改进是短路状态查找(例如,在上面的例子中,“正3”是一个非常好的分数(4是最高分),因此您的算法可以停止查找其他状态并转而移动到非常接近的状态。)
A*算法的两个难点是1)找到正确的函数和2)能够枚举所有可能的状态。我认为使用良好的词典文件和一些快速的哈希/搜索函数可以轻松完成第二步。
Levenshtein Distance 似乎是一个不错的起点。计算 Levenshtein 距离所允许的步骤非常接近单词阶梯中所允许的步骤,唯一的异常是重新排列字母。您可能可以想出一个很好的启发式方法来结合 A* 和 L.D。
在这个游戏版本中,您只能执行一个操作:用另一个字母替换一个字母。
这使得构建搜索图相当容易,但是对于长度为4或5的单词来说速度较慢...
从根词开始,通过确定单词之间只有1个字母不同并且字母的位置很重要,检查相邻的单词。
我认为可以从广度优先搜索开始构建搜索树。问题是当你遇到永远不能连接的单词时,在你能确定它们不能连接之前,它会让您穿过大部分的图形。广度优先搜索保证可以给出从根词到目标词的最短路径。请注意,最短路径不一定是最快找到的路径。