我遇到了一个需要解决谜题的问题。
E.g。我的(可变)区域为20x20(例如米)。存在许多具有可变尺寸的给定组件。如4x3,4x2,1x5件等。这些件也可以转为添加,以增加我的问题更多的痛苦。拼图的重点是用给定的部分填充20x20的整个区域。
实现这样的壮举有什么好的启动算法? 我正在考虑使用计算开放空间的启发式算法(出于效率目的)。
提前致谢
答案 0 :(得分:5)
这是一个Exact Cover problem,结构也很好,通常取决于碎片。我不知道任何启发式算法,但有几个确切的选项应该很好。
与Exact Covers一样,您可以使用Dancing Links,一种有效实施Algorithm X的方法。
不太常见,您可以使用零抑制决策图解决此问题。这取决于瓷砖。作为奖励,您可以代表所有可能的解决方案并对其进行计数或生成具有某些属性的解决方案,而无需明确存储整套(通常太大)的解决方案。
BDDs也会起作用,使用更多的节点来完成同样的事情(因为解决方案非常稀疏,因为使用了很少的可能的平铺布局 - 像这样的ZDD但BDD像对称性更好于稀疏性)。
或者您可以将其转换为SAT问题,然后您获得的信息更少(例如没有解决方案),但如果有简单的解决方案则会更快。