algorithm - 将一个词转换为另一个词的最短路径

标签 algorithm shortest-path edit-distance hamming-distance

对于数据结构项目,我必须找到两个单词(如 “cat”“dog”)之间的最短路径,一次只改变一个字母.我们得到了一个拼字游戏单词列表,用于查找我们的路径。例如:

cat -> bat -> bet -> bot -> bog -> dog

我已经使用广度优先搜索解决了这个问题,但我正在寻找更好的方法(我用 trie 表示字典)。

请给我一些更有效的方法(在速度和内存方面)的想法。荒谬和/或具有挑战性的东西是首选。

我问过我的一个 friend (他是大三学生),他说这个问题没有有效的解决方案。他说我会在我参加算法类(class)时了解原因。对此有何评论?

我们必须逐字逐句。我们不能去 cat -> dat -> dag -> dog。我们还必须打印出遍历。

最佳答案

新答案

鉴于最近的更新,您可以尝试使用汉明距离作为启发式算法的 A*。这是一种可接受的启发式方法,因为它不会高估距离

旧答案

您可以修改用于计算 Levenshtein distance 的动态程序获取操作顺序。

编辑:如果字符串的数量是常数,则问题可以在多项式时间内解决。否则,它是 NP-hard(维基百科中都有).. 假设您的 friend 正在谈论这个问题是 NP-hard。

编辑:如果你的字符串长度相等,你可以使用 Hamming distance .

关于algorithm - 将一个词转换为另一个词的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521958/

相关文章:

string - 给定 a 和 b 以及 b 和 c 的成对编辑距离,我们能否找到 a 和 c 的成对编辑距离?

algorithm - 寻找二叉树的边界

c# - 检查列表成员是否以 4 人为一组,连续

c++ - trie 数据结构并打印所有子字符串

algorithm - 最短路径、最少转弯算法

java - 编辑大字符串的距离解决方案

python - 为另一个数组中的所有 float 查找数组中最接近的 float

graph - 带有networkx的加权图的所有最短路径?

Google foo bar 的 Python 广度优先最短路径(准备兔子逃跑)

java - 使用递归实现编辑距离方法会导致对象堆错误