利用广度优先搜索图的算法解决词梯问题
词梯问题 考虑这样⼀个任务:将单词FOOL转换成SAGE。在解决词梯问题时,必须每次只替换⼀个字⺟,并且每⼀步的结果都必须是⼀个单词,⽽不能是不存在的词。 eg: FOOL -> POOL -> POLL -> POLE -> PALE -> SALE -> SAGE 我们研究从起始单词转换到结束单词所需的最小步数 用图算法解决词梯问题的步骤: 用图表示单词之间的关系。 用一种名为广度优先搜索的图算法找到从起始单词到结束单词的最短路径。 构建词梯图 第⼀个问题是如何⽤图来表⽰⼤的单词集合。如果两个单词的区别仅在于有⼀个不同的字⺟,就⽤⼀条边将它们相连。如果能创建这样⼀个图,那么其中的任意⼀条连接两个单词的路径就是词梯问题的⼀个解。下图展示了一个小型图,可用于解决从FOOL到SAGE的词梯问题。注意,它是无向图,并且边没有权重。 创建这个图有多种方式。假设有一个单词列表,其中每个单词的长度都相同。 为每个单词创建顶点。 如果两个单词只相差⼀个字⺟,就可以在图中创建⼀条边,将它们连接起来。 对于只有少量单词的情况,这个算法还不错。但是,假设列表中有5110个单词,将⼀个单词与列表中的其他所有单词进⾏⽐较,时间复杂度为 。对于5110个单词来说,这意味着要进⾏2600多万次⽐较。那实在是太糟糕了。 采⽤下述⽅法,可以更⾼效地构建这个关系图。假设有数⽬巨⼤的桶,每⼀个桶上都标有⼀个