【发布时间】:2021-07-06 18:28:26
【问题描述】:
让 A 是一个 MxN 矩阵,其中条目 a_ij 在 {0, ..., n-1} 中。
我们可以把 A 中的条目想象成一个被 n 着色的矩形网格。
我有兴趣将每个彩色区域划分为矩形,这样可以最大限度地减少矩形的数量。也就是我要产生n组四元组
L_k = {(i, j, w, h) | a_xy = k forall i
满足每个a_ij 恰好属于一个矩形且所有矩形都不相交的条件。此外,总和 L_0 + ... + L_(n-1) 被最小化。
显然,最小化每个 L_k 可以独立完成,但也要求这发生得非常快。假设这是一个实时应用程序。可能的情况是,由于集合是不相交的,在 L_ks 之间共享信息比并行执行所有事情更快。 n 可以很小(例如,
我假设有一种动态编程方法来解决这个问题,或者也许有一种方法可以将其重新表述为一个图形问题,但对我来说如何解决这个问题并不是很明显。
编辑:
我的意思似乎有些混乱。这是一张帮助说明的图片。
想象这是一个 10x10 矩阵,红色 = 0,绿色 = 1,蓝色 = 2。像这样绘制黑框,尽量减少框的数量。这里的输出是
L_0 = {(0,8,2,2),(1,7,2,1),(2,8,1,1),(4,5,4,2),(6,7 ,2,2)}
L_1 = {(0,0,4,4),(4,0,6,2),(6,2,2,3),(8,8,2,2)}
L_2 = {(0,4,4,3),(0,7,1,1),(2,9,6,1),(3,7,3,2),(4,2 ,2,4),(8,2,2,6)}
【问题讨论】:
-
关于“我想产生 n 组对”:你的意思是四组组吗?
-
Re“总和 L_0 + ... + L_(n-1)”:L_i 是四元组的集合。他们的总和是什么意思?您是指 tje 集的基数(元素数)之和吗?
-
是的,感谢您的关注。
-
如果我理解了这个问题,每个彩色区域都是独立的,并且任务减少到找到每个区域的最小矩形分区数。
标签: arrays c algorithm partition