【发布时间】:2017-02-24 23:30:05
【问题描述】:
我的问题如下:
我有以下矩阵:
0 1
1 1
或
1 1 1
1 1 1
0 1 0
或
1 1 1 0
1 1 1 1
0 1 1 0
我想得到以下矩阵:
0 1
2 1
或
1 1 1
1 1 1
0 2 0
或
1 1 1 0
1 1 1 2
0 3 3 0
我想要的是将子矩阵(或 col-vector,或 row-vector,以防子矩阵不可能)尽可能大。
我要解释清楚:
如果输入是第三个矩阵:
1 1 1 0
1 1 1 1
0 1 1 0
我想对元素进行垂直或水平分组,使这些子矩阵尽可能大。本例中最大的子矩阵是:
x x x 0
x x x 1
0 1 1 0
另一个可能的最大子矩阵是:
1 x x 0
1 x x 1
0 x x 0
两者都由x表示。
那么,还有三个元素为 1。所以我想再组。再次获得最大的子矩阵(或子向量)。到那时,根据之前的走法,我们会得到:
x x x 0
x x x 1
0 y y 0
或
y x x 0
y x x 1
0 x x 0
由y代表。
现在,我们还有一个尚未分组的元素,现在我们再创建一个组(由z 表示):
y x x 0
y x x z
0 x x 0
如果现在我们选择另一个输入,我们有以下步骤:
0 1
1 1
我们有两个子向量,所以我们有两种可能的解决方案:
0 1
x x
或
0 x
1 x
然后,根据选择的解决方案,我们有以下解决方案:
0 y
x x
或
0 x
y x
单独分组其他元素。
最后,在第二种情况下,我们只有一种可能的解决方案:
1 1 1
1 1 1
0 1 0
获得最大的子矩阵我们有这个解决方案:
x x x
x x x
0 1 0
然后,将最后一个元素单独分组:
x x x
x x x
0 y 0
提前谢谢你。
【问题讨论】:
-
让我们删除所有的 cmets,因为它们现在只是噪音。
-
这是一个优化问题。您想要“最好的”可能的解决方案还是“足够好”的解决方案?由于制定最优或次优解决方案的方法可能非常不同
-
@SembeiNorimaki 没关系,不是优化问题。我想要的是找到尽可能大的子矩阵,直到将所有元素聚类或分组等于 1。谢谢。没有“最好”或“足够好”的解决方案,只有“可能的解决方案”
-
类似
this? -
这绝对是一个优化问题,您需要为此创建一棵树并对其进行探索。而且,如果您有大型复杂矩阵,问题将变得足够困难,因此可能无法获得最佳解决方案。这就是为什么我要问“足够好”的解决方案是否可以。