给出一个大疏矩阵(说10+由1M+),我需要找到一个子集,不一定连续的行列,形成密集的矩阵中(所有非零的元素)。我想这个矩阵子到尽可能大(不是最大数目,但数量最多的元素)内的某些方面的比例的约束。

是否有任何已知的确切或aproxamate解决这个问题?

"快速扫描"谷歌上似乎得到一个很接近但不完全的结果。 什么条件我应该找什么?


编辑: 只是为了澄清;该矩阵子 不需要是连续的.在实行和列顺序完全是任意的这样的邻接关系是完全不相干的。


一个思想基于乍得Okere的想法

  1. 为了行最大数小计数(不必要的但可能有助于perf)
  2. 选择两个行一个"巨大的"重叠
  3. 添加其他所有行,不会减少重叠
  4. 记录设定
  5. 添加任何排减少了重叠最少的
  6. 重复,第3至结果得到小
  7. 开始在#2与不同的起始对
  8. 继续下去,直到你决定的结果是不够好
有帮助吗?

解决方案

我假定你想要这样的事情。你有一个矩阵喜欢

1100101
1110101
0100101

你想要列的1,2,5,7的和行的1和2,对吗?那子矩阵将4x2有8个要素。或者你可以去列1,5,7行的1,2,3这将是一个3x3矩阵。

如果你想要一个'大致'的方法,你可以开始用一个非零件,然后再去找另一个非零件和将它添加到你的行列表和列。在某些时候你会遇到一个非零件,如果它的行列加入到你的收藏,你的收藏,不再是完全不为零。

因此,对于上述矩阵,如果你加入1,1和2,2,你会行1、2和列的1,2,在你的收藏。如果你试图添加3,7它将导致一个问题,因为1,3为零。所以你不能加入它。你可以添加的2,5和2,7,虽然。创造的4x2子矩阵.

你会基本上迭代,直到你找不到任何更新的行列。这会让你太当地最低限度。你可以储存的结果,并开始再一次与另一个起始点(或许是一种没有适合你的前的解决方案)。

然后就停止的时候,你不能找到任何更多的后的一段时间。

那,很明显,将需要很长的时间,但我不知道如果你将能够做到这一点的任何更迅速。

其他提示

是这一个 Netflix问题?

MATLAB 或其他一些稀疏的矩阵图书馆可能的方式来处理它。

是你的意图以自己写的?

也许1D的办法,为每一行会帮助你。算法可能看起来是这样的:

  1. 循环每一行
  2. 找到索引的第一个非零件
  3. 查找的索引非零排元,与最大的之间的跨度非零列在各行和储存两者。
  4. 排序的行从最大到最小之间的跨度非零列。

在这一点上,我开始变得模糊(对不起,不是一个算法的设计师).我会尝试的循环每一行,排的索引起点,寻找最大的非零行列的索引的,我可以。

你不要指定是否或不密集的矩阵已被广场。我承担不了。

我不知道如何有效率的这个是什么或什么其大O行为。但它是一个暴力的方法开始。

编辑。这不是相同的问题如下..我的错...

但是,根据最后评论如下,它可能是equivilent如下:

  1. 找到的最远的垂直分开对零点没有零点之间他们。
  2. 找到的最远的水平分离对零点没有零点之间他们吗?
  3. 然后水平的区域你要找的是矩形,适合这两者之间的对点?

    这个确切的问题是讨论的宝石的一本书,名为"编程珍珠"由乔恩*宾利,而且,我记得,虽然有一个解决方案中的一个尺度,不存在容易的答案2-d,或者更高的维变...

1=D的问题是,有效,找到最大的一笔一个连续的子集的一组数字:

迭代要素,跟踪运行总是从一个特定的先前的元素,并最大的小计到目前为止看到的(以及开始和结束elemnt,generateds它)...在每一个元件,如果maxrunning小计是否大于总看到迄今为止,最大迄今为止看到和endelemnt重置...如果max跑总低于零,开始元,是重置目前件和运行的总复零...

2-D的问题来自试图产生一些图像处理算法,这是试图找到内流brightnesss值表示素在2-彩色图像,查找"聪明的"矩形区域内的形象。即,发现载有2-D子矩阵具有最高的总和亮度的价值观,其中"明度"的测量之间的差素的变化价值和整体平均亮度的整个图像(如此多的元素已经负值)

编辑:看起的1-D溶液我挖出了我的副本,第2版的这本书,并在这,乔恩*宾利说:"2-D版本仍然没有解决作为这个版打印..."这是在1999年。

我知道你是不是在这方面的工作了,但是我认为有人可能会有同样的问题,因为我在的未来。

因此,在意识到这是一个NP难的问题(通过减少到最大的集团),我决定拿出一个启发性,具有运作良好,对我来说迄今为止:

给一个 N x M 二进制/布尔矩阵,以找到一个大致密子矩阵:

第I部分:产生合理的候选子矩阵

  1. 考虑每个的 N 行要一个 M-维二矢量, 是v_i, ,哪里 =1 N
  2. 计算距离矩阵 N 矢量使用海明的距离
  3. 使用聚类(未加权对小组方法的算术平均值)的算法集矢量

最初,每 是v_i 矢量是一个单独的集群。上述步骤3(聚类)给出了这一矢量应当合并为子矩阵.所以,每个节点内部的层次聚类树的候选子矩阵.

第二部分:分数和排名的候选子矩阵

  1. 为每个子矩阵,计算 D, 的元素数量在密集媒介的子矩阵通过消除任何列与一个或多个零。
  2. 选择子矩阵,最大限度地提高 D

我也有一些考虑因素有关的分行数,需要加以保留从初步完整的矩阵,我会丢弃任何候选子矩阵,没有满足这一标准之前选择一个子矩阵与max D 值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top