通过每次迭代改变每个字母将一个单词转换为另一个单词的算法,该算法应该形成另一个有意义的单词



我想制作一个将一个单词更改为另一个单词的算法。例如,给定的单词是"MUD",我需要将其转换为"BED"。对于每次迭代,我可以更改一个字符,但这应该形成另一个有意义的单词。例如,"MUD"可以更改为"MAD"。像这样,我需要找到将"MUD"转换为"BED"的最短路径。

提供了一种单独的方法来查找有效单词。IsWord()是一个方法,无论给定的字符串是否有效,它都会给我们布尔结果。所以不用担心。

我也不需要担心效率或代码行数等。有人知道如何制作这个算法吗。如果是,请帮帮我。

提前感谢。

(我知道我们必须使用树,必须进行二进制遍历,但我不知道如何在这个算法中使用它)

这被称为单词阶梯。查看Wolfram博客上的帖子"有史以来最长的单词阶梯谜题"。

首先要有一个包含元素(字符串)的排序队列。每个元素都有一个到目标单词的评级/距离(根据启发式)。这可以是汉明距离。排序后的队列使用这个距离将最接近目标的单词推到顶部。

你取下你的第一个单词,将其添加到队列中。从队列中提取第一个元素,展开它的所有子元素(可以通过一次转换从中获得的单词),并将它们放入队列中。这样做,直到您从队列中获得的元素是您正在搜索的元素,或者队列为空。

以以下方式创建图形:

每个单词都是一个节点,如果可以在一个步骤中从一个单词转到另一个单词,则两个节点是连接的。

现在找出原始单词和最终单词之间的最短距离和路径。

请参阅:http://en.wikipedia.org/wiki/Shortest_path_problem关于如何计算最短路径。

在每次迭代中,使所有可能的新词形成您所拥有的单词,并将它们收集在列表、集合或其他任何东西中。过滤掉重复的单词和你以前已经有的单词。例如:

1. (BED)
2. (BAD, BET, ....)
3. (MAD, BAN, ...., BUT, BOT, ....)

你要么最终得到一个空列表,要么问题无法解决,要么所查找的单词在列表中。

最新更新