【发布时间】:2012-12-15 11:43:24
【问题描述】:
我有一个由正方形组成的连接形状,例如拿一张方形纸,沿着现有的线画一条线,这条线在它的开始处结束,并且不与自身交叉。
现在的目标是找到一种算法(不是蛮力),用尽可能少的非重叠矩形填充这个形状。
我正在寻找最佳解决方案。从图片中可以看出,朴素的贪心方法(取最大的矩形)不起作用。
(最佳)
(贪婪)
我的场景是减少顶点,但我确信还有其他用例。
注意:这个问题看起来很基本,但我无法在其他地方找到解决方案。另外,这个问题是 NP 难的吗?
编辑:我刚刚意识到,在我的场景中,用尽可能少的非重叠 三角形 填充形状会产生更好的结果。 p>
【问题讨论】:
-
不知道这是否是最佳的,但直觉上我认为你可以扫描水平维度并计算水平方向构建的矩形,然后对垂直维度执行相同操作,并取两者中的最小值。
-
重绘一个部分被遮挡的窗口听起来类似的问题,也许你可以在旧的窗口管理器中找到一个最佳算法,它只使用矩形裁剪,而不是任意蒙版,如 st-80
-
搜索“装箱算法”。
-
无关:我不明白。你能进一步详细说明吗? aka.nice:有趣的想法。你有什么窗口管理器可以让我看看吗? TonyHartley:似乎是一个不同的问题。
-
装箱(装箱)使用边缘启发式来找到最佳拟合,我怀疑您问题的最佳解决方案在于边缘模式分析。我会尝试使用边缘分析和分辨率划分的分治法(即从 8x8、4x4、2x2 开始)。
标签: algorithm rectangles vertices packing