Java中的矩形包装

时间:2016-11-10 15:53:29

标签: java algorithm rectangles knapsack-problem bin-packing

我正在尝试实现矩形打包算法。

我的输入上有一些矩形每个矩形都有一个高度和一个宽度(以及一个索引号,所以我可以在记录它们时识别它们)

我有一个矩阵(Integer [] []),我想将矩形存储在这个矩阵中。初始化后,矩阵无法修改,因此它具有固定的大小。

让我们看看和示例,我们有两个矩形:

new Rectangle(2,3,1) //height=2, width=3, index=1
new Rectangle(1,2,2) //height=1, width=1, index=2

让我们有一个3x3矩阵:

Integer[][] matrix = new Integer[4][3]; //height=4, width=3

完成运行算法后,我希望看到类似的内容(如果我将矩阵打印到system.out):

1 1 1
1 1 1
2 2 0
0 0 0

前两行存储第一个矩形(高2高3宽),我们在第三行找到第二个矩形。 0表示剩下空白区域(我们也可以在那里存储其他矩形)

我很难找到贪婪(或任何)算法的好方法。

我将矩形从大到小排序。 然后我应该开始存储矩形:如果矩阵有足够的空间,我们把它放在那里,如果没有,我们尝试另一个单元格。我们继续在每一行和每一个细胞上,直到我们找到一个地方。

有人能指出我正确的方向吗?关于一个好的算法,伪代码或者我可以用来解决问题的东西的描述。

谢谢, 标记

1 个答案:

答案 0 :(得分:0)

您想要在矩阵中“绘制”矩形,并且您已经按大小对矩形进行了排序。

你可以/应该做一个循环:

  • 获取矩形大小(取决于它是否由构造函数提供)
  • 检查矩形矩阵中是否有足够的空间; 1
  • 绘制(使用for或while循环绘制)。

1 使用matrix[0].lengthmatrix.length获取矩阵大小并与矩形进行比较。

我认为最大的挑战不是迷失在这些变量中。您需要继续计算开始绘制所需的行数以及何时停止和更新该变量。