我目前正在做一项任务,我坚持使用这种方法。
我有一个填字游戏问题,它由一个空网格组成(没有像传统填字游戏那样的实心正方形),宽度和高度在 4 到 400(含)之间变化。
规则:
- 单词是输入的一部分——包含 10 到 1000 个(含)长度不等的英语单词的列表。
- 水平词只能与垂直词相交。
- 垂直词只能与水平词相交。
- 一个词只能与其他 1 或 2 个词相交。
- 每封信值一分。
- 单词周围必须有 1 个网格空间间隙,除非它是相交单词的一部分。
例子:
X X X X X X
X B O S S X
X X X X X X
目标:
在 5 分钟的时间内获得最高分。
到目前为止:
经过一些研究,我知道这是一个 NP-Hard 问题。因此,无法计算出最优解,因为无法检查每个组合。
最简单的解决方案似乎是根据长度对单词进行排序并插入得分最高的单词以获得最高分数(贪婪算法)。
我还被告知一个递归树,其节点由替代的等分词插入组成,背包算法适用于这个问题(不确定实现会是什么样子)。
问题:
- 是什么让我可以在 5 分钟的时间跨度内检查最大组合数,并根据最大可能的单词列表和网格大小进行缩放?
- 插入单词时可以应用哪些启发式方法?
顺便说一句,这里的目标是在 5 分钟内获得最佳解决方案。澄清一个有效单词的每个字母得 1 分,因此一个 5 个字母的单词得 5 分。
在此先感谢我整天都在阅读很多关于填字游戏研究论文的数学符号,这似乎让我绕了一圈。