C# 将二维数组解析为矩形

C# 将二维数组解析为矩形,c#,arrays,algorithm,rectangles,C#,Arrays,Algorithm,Rectangles,我正在寻找一种将2D数组转换为尽可能少的矩形的方法,如本例所示: X 12345678 -------- 1|00000000 2|00011100 3|00111000 Y 4|00111000 5|00111000 6|00000000 到矩形的角坐标: 在(x1,y1)之后;(x2;y2)模板 以前这里也有类似的问题,但不幸的是,答案中提供的链接已断开,我无法再检查它 我很想用C#来做这件事,但任何形式的帮助都是非常感谢的 (它甚至不必是

我正在寻找一种将2D数组转换为尽可能少的矩形的方法,如本例所示:

       X
    12345678
    --------
  1|00000000
  2|00011100
  3|00111000
Y 4|00111000
  5|00111000
  6|00000000
到矩形的角坐标:

在(x1,y1)之后;(x2;y2)模板

以前这里也有类似的问题,但不幸的是,答案中提供的链接已断开,我无法再检查它

我很想用C#来做这件事,但任何形式的帮助都是非常感谢的

(它甚至不必是尽可能少的矩形,但越少越好:)


提前谢谢

这可能会帮助您开始。如果将二进制数据转换为数字,则会得到以下结果:

0
28
56
56
56
0

因此,只要有连续相等的数字,就有一个矩形。

我认为您试图用所需的最小矩形数覆盖二维平面中的一组点。一个回答说,这是一个NP完全问题,与谷歌搜索结果有关(这对我来说很有效)

有论文一致认为矩形覆盖是NP完全的,但实际上并没有证明它,关于这一点的参考文献似乎异常难以捉摸-

我从这些文件中得到的是:

1) 对于大问题,不太可能有一种负担得起的方法来获得绝对最佳的答案,因此您可能需要花费大量时间,通过用尽所有可能的替代方法,或者使用分支定界之类的方法,来获得从某种意义上说是小问题的确切答案,或者选择价格合理的方法——比如贪婪搜索、光束搜索或有限差异搜索——这些都不能保证给你绝对最好的答案

2) 在这种情况下,似乎有更多的限制版本的这个问题,这不是NP完全。你可能读过一篇论文,发现你的问题有一些细节,这意味着这种方法适用于你。一个例子是“用矩形构造区域的算法: 独立性与最小发电机组
对于Franzblau和Kleitman的《间隔收藏》*,我在ACM数字图书馆找到了这本书,但我不知道这本书是否普遍可以阅读。它适用于一组有限的多边形。

这两种表示之间没有明显的关系。请你详细说明一下好吗?我已经编辑了这篇文章,我希望现在能更容易理解,抱歉搞混了。两个点怎么能形成一个矩形呢?我知道你想说一些明显的东西,但这不是直觉。如果你用两点作为矩形的对角点,两点可以定义一个矩形。我使用了XY模板,为了便于理解,我对其进行了编辑。我想这就是您需要的。图像已丢失,但您可以参考以查看原始请求。答案似乎很有说服力。这主意不错,但我认为如果生产线中有多个矩形零件,就行不通了。晚些时候有新的要求吗?我确信这以前从未发生过。是的,这大致定义了我的问题,但在快速查看这些文档之后,它们并没有提供解决问题本身的算法方法(至少没有一种我可以理解并用C#重现的算法)。不过,谢谢你,我一定会阅读它们,看看我是否能理解一些东西。我在评论中编辑了这些论文的相关性——这是我发现某些东西是NP完全的通常反应。谢谢你,我想我会进行一次自编优化,可能会检查高度为1的矩形,所以当我在数组中循环时,它会检查连续的行。
0
28
56
56
56
0