Java中的矩形包装
Posted
技术标签:
【中文标题】Java中的矩形包装【英文标题】:Rectangle packing in Java 【发布时间】:2016-11-10 15:53:29 【问题描述】:我正在尝试实现一个矩形打包算法。
我的输入有一些矩形每个矩形都有一个高度和一个宽度(和一个索引号,所以我在记录它们时能够识别它们)
我有一个矩阵(一个 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 表示还有空格(我们也可以在其中存储一些其他矩形)
我很难找到一个贪婪(或任何)算法的好方法。
我将矩形从大到小排序。 然后我应该开始以某种方式存储矩形:如果矩阵有足够的空间,我们把它放在那里,如果没有,我们尝试另一个单元格。我们在每一行和每个单元格上继续,直到找到一个位置。
谁能指出我正确的方向?关于一个好的算法、伪代码或我可以用来找出出路的东西的描述。
谢谢, 标记
【问题讨论】:
所以这是一个二维背包问题。 coursera.org/learn/discrete-optimization 该课程可能会有所帮助。就像这本书一样:algorist.com 如果我们“拥有和示例”,那么“你和我”将不会以任何方式将它组合在一起-“让我们有一个 3x3 矩阵 int[4][3]”:它是笑你搞混了!! 【参考方案1】:您想在矩阵中“绘制”矩形,并且矩形已经按大小排序。
你可以/应该做一个循环:
获取矩形大小(取决于它是否由构造函数提供) 检查矩阵中是否有足够的空间用于矩形; 1 绘制(使用 for 或 while 循环绘制)。1 使用matrix[0].length
和matrix.length
获取矩阵大小并与矩形进行比较。
我认为最大的挑战是不要迷失在这些变量中。您需要计算开始绘制所需的行数以及何时停止和更新该变量。
【讨论】:
以上是关于Java中的矩形包装的主要内容,如果未能解决你的问题,请参考以下文章