【问题标题】:Optimization: minimize painting errors优化:尽量减少涂装错误
【发布时间】:2012-08-26 19:21:13
【问题描述】:

给定一个 m*n 网格,其中每个单元格标记为“b”或“w”。你也会得到黑白颜料。您可以使用 k 笔画,每种颜色(黑色或白色),笔画定义为同一行中连续无色单元格的着色(这意味着笔画不能超出行的长度,如果您在该行结束之前拿起你的刷子,那是该笔划的结束)。目的是尽量减少错误的数量,如果您用错误的颜色绘制单元格或单元格保持未绘制,则会发生错误。最优策略是什么?

【问题讨论】:

  • 有趣的问题。这是作业吗?
  • 我对此表示怀疑。家庭作业不会给出这种“悬而未决”的东西。通常会根据所教授的技术给出问题。
  • 不是一个完整的答案,所以我将在评论中添加它:由于行是独立的,并且每一行的最优性/成本是已知的,您可以分而治之,解决去哪里的问题“花费” k 笔画。我会先看看“分支和绑定”en.wikipedia.org/wiki/Branch_and_bound
  • 我猜“笔画被定义为...来自同一行的单元格的着色”是指同一行或同一列。也就是说,笔划可以是水平的或垂直的。对吗?
  • @JimN 不,这不是作业问题。

标签: math optimization


【解决方案1】:

知道单行问题的解决方案(给定 BW 行上 k 笔画的最小错误数是多少)可用于解决问题。

为每一行列出给定笔画数k_i = [0, 1, ..., min k needed to cover i-th row] 的错误数。现在我们有了n 列表(大小不同)。要查找在哪些行中使用“k”笔划,只需从列表开头迭代弹出k 元素,该笔划覆盖大多数单元格。

所以,主要任务是解决一行问题,我不确定如何:-)

令 C 为连续颜色变化的次数。覆盖行的最小笔划数是ceil( (C+1)/2 )。这可以通过交替笔画颜色与第一个笔画来完成,以覆盖整行和最后一个笔画中最远变化之间的下一个笔画。第一个笔画有一个(或两个)末端的颜色。

我认为,当没有足够的笔划覆盖整行时,使用类似的方法可以找到错误的数量。必须省略一种颜色的某些范围。由以下人员完成:

  • 从不在边界上的颜色开始(省略第一个笔画),

  • 有些笔画不在最后一笔画的最远变化之间,而是 在更接近的变化之间。

我不确定,但似乎找到几个最小的相同颜色部分就足够了,这将是一个错误。可能这些部分离终点有多远很重要。

暂时就是这样……

【讨论】:

  • "要查找在哪些行中使用 'k' 笔划,从列表的开头迭代弹出 k 个元素就足够了,其中笔划覆盖了大多数单元格。"这不是任务。我想如果你再次仔细阅读问题陈述,你会意识到任务是以最小化错误的方式将 k 笔画分布在 m 行上。我同意您假设具有“x”笔划的给定行的解决方案可用并将其用于跨行优化的方法,但我认为上述解决方案根本不是问题陈述的解决方案..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2021-03-19
相关资源
最近更新 更多