String 从给定单词生成纵横字谜,最大化交叉点

String 从给定单词生成纵横字谜,最大化交叉点,string,algorithm,time-complexity,maximize,crossword,String,Algorithm,Time Complexity,Maximize,Crossword,是否有一些可行的(即多项式时间)算法,从一小部分(约20个)单词开始,构建一个最大化(或至少“大”)交叉数的纵横字谜?或者,如果交叉口标准不切实际,是否可以最大化纵横字谜的密度(在某种意义上) 我已经用Python编写了一个详尽的搜索,但是它花费的时间太长,超过六个单词 另见: (尽管答案很好,但并不能真正解决我的问题)。有多项式时间算法吗 回答:没有 对于一个简单的版本:如果一个单词的结尾字母与另一个单词的开头字母相同,我们可以将它们连接起来。例如: cat+tree+element ->

是否有一些可行的(即多项式时间)算法,从一小部分(约20个)单词开始,构建一个最大化(或至少“大”)交叉数的纵横字谜?或者,如果交叉口标准不切实际,是否可以最大化纵横字谜的密度(在某种意义上)

我已经用Python编写了一个详尽的搜索,但是它花费的时间太长,超过六个单词

另见:
(尽管答案很好,但并不能真正解决我的问题)。

有多项式时间算法吗

回答:没有

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

cat+tree+element -> Valid
aaa+aaa -> Valid
cab+aboard -> Invalid ('a' != 'b')
问题是:尽可能多地连接单词

但它等价于哈密顿路径问题,所以我们没有任何多项式时间算法来解决这个问题

有关详细信息,请参见:

附言:


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

这些解决方案没有解决的“问题”到底是什么?你确实意识到算法需要具体的定义来工作;像“稠密(在某种意义上)”这样的东西很难编码。同时最大化多个标准也有点模糊:你愿意为一个额外的交叉口牺牲多少密度?我的主要问题是最大化交叉口的数量。我可以通过要求最小化密度部分的大小(列+行)来指定密度部分,但由于我对测量其密度的其他方法(例如,从中心的平均sup距离)没有偏见,所以我将其保留为不明确的。。。