对象定位算法

时间:2009-11-25 20:13:19

标签: algorithm object partitioning

我想知道这个问题是否有“最佳”解决方案:

我有一个n x m(像素)大小的空间,有p个预先存在的矩形 - 它上面有各种大小的物体。现在我想在这个空间中放置q(相同大小)的新对象而不重叠。

我提出的算法:

  1. 创建大小为[(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
  2. 的数组A [] []
  3. 从p和每个元素中迭代所有元素:

    mark all fields in A[][] as occupied, where the element "lies"

  4. 将q中的所有元素放在A [] []中字段未标记的相应位置

  5. (男孩,我希望我可以理解......)

    有没有更好的方法呢?真的很感激任何帮助!

3 个答案:

答案 0 :(得分:1)

如果我理解这个问题,听起来你正在寻找一种“最佳”的装箱算法(又称背包问题)。这是一个NP完全问题,虽然你的描述听起来像是你可能会蛮力地通往最佳解决方案。

答案 1 :(得分:1)

从互联网上的简短搜索来看,最佳矩形包装似乎是一个NP-hard问题。 我猜想学术界聪明的人会为此找到一些近似算法,所以谷歌搜索是一种选择。

但我会尝试让简单的方法先工作:

  1. 根据宽度将对象划分为大小
  2. 尝试从最大到最小的逐行放置。
  3. 我的猜测是,在很多情况下,这种天真的解决方案都可行。

答案 2 :(得分:0)

我知道这不是您问题的具体答案,但研究和/或深入研究graphviz源代码可能会有用。 graphviz提供了许多布局模型,包括neato,它试图最小化全局能量函数。

维基百科有一些force-base algorithms的伪代码。