是否存在一些可行的(即多项式时间)算法,该算法从一小组(约20个)单词开始构建一个最大化(或至少为#34;大")数字的填字游戏交集?或者,如果交叉标准不切实际,是否可以最大化填字游戏的密度(在某种意义上)?
我已经在Python中编写了详尽的搜索,但是超过六个单词需要花费太长时间......
另见: Algorithm to generate a crossword(但那里的答案虽然好,但并没有真正解决我的问题)。
答案 0 :(得分:0)
是否有一些多项式时间算法?
答案:不。
对于一个简单的版本:如果一个单词结束的字母与另一个单词的开头是相同的,我们可以将它们连接起来。例如:
cat+tree+element -> Valid
aaa+aaa -> Valid
cab+aboard -> Invalid ('a' != 'b')
问题是:尝试尽可能多地连接单词。
但它相当于汉密尔顿路径问题,所以我们没有任何多项式时间算法来解决这个问题。
PS:
对于小型(~20)集,您可以尝试启发式搜索或动态编程方法来获得可行的解决方案。