问题的详细描述如下:
给定两个单词(beginWord和endWord),以及一个字典单词列表,查找是否存在从beginWord到endWord的转换序列,使得:
1. 每次只能更改一个字母 2. 每个转换后的单词必须存在于单词列表中。请注意,beginWord不是转换后的单词。
我知道可以使用广度优先搜索来解决这个问题。在我提出了普通的BFS解决方案之后,面试官问我能否加速。我没有想出加速的方法。面试官告诉我应该使用PriorityQueue来进行“最佳优先搜索”,并且优先级由当前单词和目标之间的汉明距离给出。
我不太理解为什么这样可以加快搜索。我觉得通过使用PriorityQueue,我们尝试搜索使进展的路径(即减少汉明距离)。
这似乎是一种贪心方法。我的问题是:
为什么这个解决方案比广度优先搜索解决方案更快?我认为实际路径可能是这样的:一开始没有取得任何进展,甚至增加了汉明距离,但在达到一个单词后,汉明距离逐渐减小。在这种情况下,我认为优先队列解决方案会更慢。
任何建议都将不胜感激!谢谢
给定两个单词(beginWord和endWord),以及一个字典单词列表,查找是否存在从beginWord到endWord的转换序列,使得:
1. 每次只能更改一个字母 2. 每个转换后的单词必须存在于单词列表中。请注意,beginWord不是转换后的单词。
我知道可以使用广度优先搜索来解决这个问题。在我提出了普通的BFS解决方案之后,面试官问我能否加速。我没有想出加速的方法。面试官告诉我应该使用PriorityQueue来进行“最佳优先搜索”,并且优先级由当前单词和目标之间的汉明距离给出。
我不太理解为什么这样可以加快搜索。我觉得通过使用PriorityQueue,我们尝试搜索使进展的路径(即减少汉明距离)。
这似乎是一种贪心方法。我的问题是:
为什么这个解决方案比广度优先搜索解决方案更快?我认为实际路径可能是这样的:一开始没有取得任何进展,甚至增加了汉明距离,但在达到一个单词后,汉明距离逐渐减小。在这种情况下,我认为优先队列解决方案会更慢。
任何建议都将不胜感激!谢谢
d
,平均分支因子为f
,单个BFS将探索k ** d
个节点,而两个BFS仅探索2 * k ** (d / 2)
个节点。 - user58697