【问题标题】:Algorithm to find the optimal way of covering a plane with colored rectangles找到用彩色矩形覆盖平面的最佳方法的算法
【发布时间】:2010-08-08 04:22:51
【问题描述】:

假设我打开MS Paint,画了一堆实心矩形,保存为png,然后给你:

现在你必须了解我是如何绘制这些矩形的。对于这张图片,您的算法会生成如下指令,

  1. 绘制绿色矩形(填满整个空间)
  2. 绘制粉色矩形
  3. 绘制黄色矩形
  4. 绘制蓝色矩形

或者换句话说,给定一张图片,我想尽可能使用最少的矩形命令来生成它。矩形命令根据其位置、长度、宽度和颜色绘制一个实心矩形。我该如何解决这个问题?

算法应该足够健壮,不仅可以处理通过放置矩形绘制的图像,还可以处理像照片这样的复杂图像

【问题讨论】:

  • 是的,我认为 DP 会起作用,但我不知道具体如何做
  • DP 可能是很多东西。你选择什么语言?
  • 最后一句话让我觉得有一个更大的图景。你真正想做的是什么?
  • 试图编写一个程序来生成一个绘制图像的程序。现在我有像素(0,0,红色)等,所以我正在寻找一种更有效的方法来做到这一点。算法应该是非特定语言的。
  • 一种巧妙的算法来处理从不倾斜的矩形将比处理照片的算法简单得多。使用像矩形这样的简单几何形状,您可以过滤颜色并计算结果形状的边数。根据彩色区域的边界计算长度和宽度,并从边数最多的颜色开始构建矩形。不过,你不能用照片来做到这一点......

标签: algorithm


【解决方案1】:

您需要找到两个图形的交集,在它们相交的任何点找到哪个是可见的。在那一点上,您将知道哪个是最重要的。

【讨论】:

    【解决方案2】:

    您可能很清楚这一点,但我很确定即使有 2 种颜色,这个问题也是 NP 完全的。请参阅正交多边形部分here。他们研究的覆盖问题相似,但并不完全相同。

    启发式地,我怀疑寻找大的单色矩形不会让你离最佳状态太远。完成此操作后,尝试通过按 z 顺序向前移动相互相邻的不同颜色的矩形来合并相同颜色的相邻矩形。

    【讨论】:

      【解决方案3】:

      这是一个多步骤的过程。

      从这些列表开始:R 和 S。R 是矩形(按顺序绘制它用来构建最终图像的矩形)。 S 是截面(每个区域的颜色相似的像素)。

      1) 检测任何“完美”的形状;除了那个矩形之外,任何地方都找不到颜色的任何矩形。必须至少有 1 个,因为最后一个矩形不能重叠。 将其添加到 R 的 END 中。

      2) 继续 (1) 直到没有完美的形状。

      3) 下一部分很棘手。对于每个部分:如果该部分加上 R 中所有矩形的某个集合部分形成一个完美矩形,则将该矩形插入到列表的开头,在 R 中所有其他现有矩形之前。

      4) 重复 (3) 直到没有更多。

      那么你就完成了。

      【讨论】:

      • 如何在没有指数爆炸的情况下执行第 3 步?你有点掩饰了算法的难点。 ;-)
      • 这并不像你想象的那么难,尽管它在这里确实慢了一点。可以这样想:您需要在 TL、BL、BR 或 TR 部分上找到某个点。 (底部/顶部,左/右)。然后,整个矩形的可能角位于某个区域,因此没有一个形状被遗漏,并且没有一个形状进入图像的未绘制部分。有一些爆炸,但它不是指数级的,在这种情况下,它会在每个部分绘制或不绘制后恢复为 0,因此它不会变得太大。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多