我有一些矩形,我想找到最小的矩形,可以覆盖所有小的矩形。不允许轮换。
使用蛮力我想找到答案。我想在java中编写代码。 我知道我应该检查我的n个项目的所有排列并找到最少的区域。为了使它更容易,我首先尝试找到最小可能区域。然后我使用带有布尔值的二维数组来检查每个单元格是否被占用。但我无法弄明白(编码)。
如何检查我的物品是否可放置在我的有限区域内?例如,我将x[0][0]
中的第一个项目定位到x[10][1]
并使此范围内的所有单元格都为真,但我不知道如何告诉我的程序检查下一个项目的其他单元格。你能告诉我算法需要实现的步骤吗?
答案 0 :(得分:0)
您的问题属于2D垃圾箱包装类别。这是NP难问题,因此不存在用于求解它的有效多项式时间算法。 (除非P == NP)。
您可以尝试使用强力算法或聪明的启发式算法,这将为您提供相当优化的解决方案。
请参阅以下链接:
1. How is 2D bin packing achieved programmatically?(讨论各种算法)
2. http://www.codeproject.com/Articles/210979/Fast-optimizing-rectangle-packing-algorithm-for-bu(有关实施细节)
3. http://www.binpacking.4fan.cz/(用于可视化不同的启发式方法)
你的暴力算法效率非常低。可以放置矩形的排列非常庞大且难以找到。我建议你尝试上面提到的算法,这些算法比找到所有排列更容易实现。