从给定的单词最大化交叉点生成填字游戏
Generate a crossword from given words maximizing intersections
是否有一些可行的(即多项式时间)算法,从一小组(~20)个单词开始,一个填字游戏最大化(或至少是"big")的数量路口?或者,如果交集标准不切实际,是否可以最大化填字游戏的密度(在某种意义上)?
我已经在Python写了一个详尽的搜索,但是超过六个字就太长了...
另请参阅:
Algorithm to generate a crossword(但那里的答案虽然很好,但并没有真正解决我的问题)。
有多项式时间算法吗?
答案:没有
对于一个简单的版本:如果一个单词结尾的字母与另一个单词开头的字母相同,我们可以将它们连接起来。例如:
cat+tree+element -> Valid
aaa+aaa -> Valid
cab+aboard -> Invalid ('a' != 'b')
问题是:尽可能多地连接单词。
但是它等价于哈密顿路径问题,所以我们没有任何多项式时间算法可以解决这个问题。
PS:
对于较小的(~20)集合,您可以尝试启发式搜索或动态规划方法来获得可行的解决方案。
是否有一些可行的(即多项式时间)算法,从一小组(~20)个单词开始,一个填字游戏最大化(或至少是"big")的数量路口?或者,如果交集标准不切实际,是否可以最大化填字游戏的密度(在某种意义上)?
我已经在Python写了一个详尽的搜索,但是超过六个字就太长了...
另请参阅: Algorithm to generate a crossword(但那里的答案虽然很好,但并没有真正解决我的问题)。
有多项式时间算法吗?
答案:没有
对于一个简单的版本:如果一个单词结尾的字母与另一个单词开头的字母相同,我们可以将它们连接起来。例如:
cat+tree+element -> Valid
aaa+aaa -> Valid
cab+aboard -> Invalid ('a' != 'b')
问题是:尽可能多地连接单词。
但是它等价于哈密顿路径问题,所以我们没有任何多项式时间算法可以解决这个问题。
PS:
对于较小的(~20)集合,您可以尝试启发式搜索或动态规划方法来获得可行的解决方案。