平铺算法

问题描述 投票:3回答:1

我面临一个必须解决难题的问题。

例如我有一个20x20(例如米)的(可变)区域。有许多给定的镶块具有可变的尺寸。例如4x3、4x2、1x5等。这些部分也可以打开以增加我的问题的痛苦。难题的重点是用给定的片段填充20x20的整个区域。

实现这种壮举的良好启动算法是什么?我正在考虑使用一种启发式算法来计算开放空间(出于效率目的)。

提前感谢

algorithm puzzle heuristics tiling
1个回答
5
投票

这是Exact Cover problem,通常也具有不错的结构,具体取决于片段。我不知道任何启发式算法,但是有几个确切的选项应该可以正常工作。

与精确封皮一样,您可以使用Dancing Links,这是有效实现Algorithm X的方法。

通常,您可以使用零抑制决策图解决此问题。它取决于瓷砖。另外,您可以代表所有可能的解决方案,并对它们进行计数或生成具有某些属性的解决方案,而无需显式存储整个(通常太大)的解决方案。

BDD也可以通过使用更多节点来完成相同的事情而工作(因为解决方案非常稀疏,例如,使用很少的可能的瓷砖放置-ZDD像这样,但BDD像对称性比稀疏性要好。) >

或者您可以将其变成SAT问题,然后获得的信息较少(例如,没有解决方案数,但是如果有简单的解决方案,则速度更快。

© www.soinside.com 2019 - 2024. All rights reserved.