Algorithm 网格中可变尺寸对象的布局算法

Algorithm 网格中可变尺寸对象的布局算法,algorithm,grid,placement,Algorithm,Grid,Placement,我正在尝试实现一个类似于WindowsMetro风格的网格系统。我有一个固定大小的二维网格,以及一组要放置在其中的对象,每个对象可以有不同的大小(按行和列)。对象不能重叠,如果它们不是按相似的大小分组,这将是理想的 作为一个简单的示例,给定一个3x3大小的网格,以及以下各项: 项目0:1行,3列 第1项:2行,1列 第2项:1行,2列 第3项:1行,1列 第4项:1行,1列 一个结果网格可能是 01 3 01 4 02 (请注意,它们确实是按相似的大小分组的,但这是因为这是一个小网格示

我正在尝试实现一个类似于WindowsMetro风格的网格系统。我有一个固定大小的二维网格,以及一组要放置在其中的对象,每个对象可以有不同的大小(按行和列)。对象不能重叠,如果它们不是按相似的大小分组,这将是理想的


作为一个简单的示例,给定一个3x3大小的网格,以及以下各项:

  • 项目0:1行,3列
  • 第1项:2行,1列
  • 第2项:1行,2列
  • 第3项:1行,1列
  • 第4项:1行,1列
一个结果网格可能是

  • 01 3
  • 01 4
  • 02
(请注意,它们确实是按相似的大小分组的,但这是因为这是一个小网格示例。在更大的网格中,它应该更加多样化)


我试图编写一些算法,通常遵循将最大项放在第一位的概念。但这是非常低效的,因为我必须不断地解析一个大的2D数组以获得空闲空间,结果总是很糟糕(大小相似的项目总是聚集在一起)

在研究中,我首先发现了树映射算法,但这并不适用于必须保持其大小的对象(它们的大小应该调整以适应网格)。背包问题也有点类似,但只涉及一个维度,添加第二个维度则是另一个问题。我发现其他布局算法的约束条件要少得多

我想知道是否有人对解决这类问题有什么好的参考,或者甚至有人知道从哪里开始,以确保它既高效又美观


谢谢

我知道这是一个旧线程,但你找到什么可用的。像一个密码示例?