我想知道这个问题是否有“最佳”解决方案:
我有一个n x m(像素)大小的空间,有p个预先存在的矩形 - 它上面有各种大小的物体。现在我想在这个空间中放置q(相同大小)的新对象而不重叠。
我提出的算法:
[(n)/(size_of_object_from_q)]x[(n)/(size_of_object_from_q)]
从p和每个元素中迭代所有元素:
mark all fields in A[][] as occupied, where the element "lies"
将q中的所有元素放在A [] []中字段未标记的相应位置
(男孩,我希望我可以理解......)
有没有更好的方法呢?真的很感激任何帮助!
答案 0 :(得分:1)
如果我理解这个问题,听起来你正在寻找一种“最佳”的装箱算法(又称背包问题)。这是一个NP完全问题,虽然你的描述听起来像是你可能会蛮力地通往最佳解决方案。
答案 1 :(得分:1)
从互联网上的简短搜索来看,最佳矩形包装似乎是一个NP-hard问题。 我猜想学术界聪明的人会为此找到一些近似算法,所以谷歌搜索是一种选择。
但我会尝试让简单的方法先工作:
我的猜测是,在很多情况下,这种天真的解决方案都可行。
答案 2 :(得分:0)
我知道这不是您问题的具体答案,但研究和/或深入研究graphviz源代码可能会有用。 graphviz提供了许多布局模型,包括neato,它试图最小化全局能量函数。
维基百科有一些force-base algorithms的伪代码。