我有一个程序可以通过拟合矩形来计算最小区域。
输入:不同高度和宽度的矩形 输出:一个包含所有这些矩形的矩形 规则:不能转动或滚动矩形,它们不能重叠。
我知道这是相关的,或者可能被定义为装箱问题(NP-hard)。然而,我找到的那些算法通常会对例如宽度设置限制。我没有这样的限制,唯一的目标是让得到的区域尽可能小。
关于什么算法适合获得合适解决方案的任何指针?
答案 0 :(得分:5)
http://www-rcf.usc.edu/~skoenig/icaps/icaps04/icapspapers/ICAPS04KorfR.pdf
显然这个问题比起初看起来更难。这是一个有趣的算法,因为它首先猜测一个解决方案,然后改进它,所以如果你不想等待最佳解决方案,你可以运行它一定数量的迭代来获得一个近似的解决方案(更长的时间)你运行它,近似值越好。
答案 1 :(得分:3)
我建议从简单的贪婪方法开始,看看它是否足以满足您的需求。如果您的输入表现良好或很小,那可能就是您所需要的 - 当您尝试做更复杂的事情时,复杂性会迅速提升。
例如:按大小排序矩形,最大值。一次添加一个矩形,尝试新矩形的每个可能位置。选择导致最小边界框的位置。
另一种贪婪的方法是选择一个起始矩形,然后重复添加导致最密集排列的矩形(其中密度定义为填充的边界框区域的百分比)。
答案 2 :(得分:1)
我首先浏览http://mathworld.wolfram.com - 对于像这样的东西,它们真棒。
其次,我可以想象一个愚蠢的算法,它会把最长的(在X维度上)框放在底部,然后是最高的(在Y维度上)在它上面的一侧或另一侧。然后继续以这种“阶梯式”的方式将它们向右和向上堆叠(例如,直到你不能,然后上升等等)。
这可能是非理想的,并且很可能会给你带来不好的结果,但这是首先想到的。