从给定单词生成填字游戏,最大化交叉点

时间:2015-03-19 23:35:56

标签: string algorithm time-complexity maximize crossword

是否存在一些可行的(即多项式时间)算法,该算法从一小组(约20个)单词开始构建一个最大化(或至少为#34;大")数字的填字游戏交集?或者,如果交叉标准不切实际,是否可以最大化填字游戏的密度(在某种意义上)?

我已经在Python中编写了详尽的搜索,但是超过六个单词需要花费太长时间......

另见: Algorithm to generate a crossword(但那里的答案虽然好,但并没有真正解决我的问题)。

1 个答案:

答案 0 :(得分:0)

是否有一些多项式时间算法?

答案:不。

对于一个简单的版本:如果一个单词结束的字母与另一个单词的开头是相同的,我们可以将它们连接起来。例如:

cat+tree+element -> Valid
aaa+aaa -> Valid
cab+aboard -> Invalid ('a' != 'b')

问题是:尝试尽可能多地连接单词。

但它相当于汉密尔顿路径问题,所以我们没有任何多项式时间算法来解决这个问题。

详情请见:Hamiltonian path problem

PS:

对于小型(~20)集,您可以尝试启发式搜索或动态编程方法来获得可行的解决方案。