Java 在一个巨大的稀疏矩阵中寻找所有循环

Java 在一个巨大的稀疏矩阵中寻找所有循环,java,math,graph,sparse-matrix,discrete-mathematics,Java,Math,Graph,Sparse Matrix,Discrete Mathematics,首先,我是一个Java初学者,所以我不确定这是否可能!基本上,我有一个巨大的(300多万)关系数据源(即a是B+C+D的朋友,B是D+G+Z的朋友(但不是a-即非相互的)等等),我想找到这个(不一定是连接的)有向图中的每个循环 我找到了这个线索,它让我找到了唐纳德·约翰逊(Donald Johnson)的(基本的)循环查找算法,至少从表面上看,它看起来可以满足我的要求(我将在星期二回去工作的时候试试——我想在这段时间问一下也没什么坏处!) 我快速浏览了Johnson算法的Java实现代码(在该线

首先,我是一个Java初学者,所以我不确定这是否可能!基本上,我有一个巨大的(300多万)关系数据源(即a是B+C+D的朋友,B是D+G+Z的朋友(但不是a-即非相互的)等等),我想找到这个(不一定是连接的)有向图中的每个循环

我找到了这个线索,它让我找到了唐纳德·约翰逊(Donald Johnson)的(基本的)循环查找算法,至少从表面上看,它看起来可以满足我的要求(我将在星期二回去工作的时候试试——我想在这段时间问一下也没什么坏处!)

我快速浏览了Johnson算法的Java实现代码(在该线程中),看起来关系矩阵是第一步,所以我想我的问题是:

a) Java是否能够处理300万*300万矩阵?(计划用二进制稀疏矩阵表示A-friends-with-B)

b) 我的第一个问题是查找每个连通子图,还是循环查找算法会处理不相交的数据

c) 这真的是解决问题的合适方法吗?我对“基本”循环的理解是,在下面的图表中,不是选择A-B-C-D-E-F,而是选择A-B-F,B-C-D等,但这并不是世界末日

    E
   / \
  D---F
 / \ / \
C---B---A
d) 如果有必要,我可以通过加强关系中的相互性来简化问题,即A-friends-with-B-friends-with-A,如果真的有必要,我可以减少数据大小,但实际上它总是在1mil左右

z) 这是p任务还是NP任务?!我是不是吃得太多了

谢谢大家,谢谢你们的帮助! 安迪

c) 这真的是一个恰当的选择吗 问题的解决方案?我的 对“基本”循环的理解 这是不是在下面的图表中 而不是选择A-B-C-D-E-F 选择A-B-F、B-C-D等,但那是 这不是世界末日 任务

不,在唐纳德·约翰逊的论文中,“初等”的意思是简单,也就是说,没有节点在圆中出现两次。这意味着算法不会选择
AFBCDBA
,而是选择
ABCDEF

d) 如有必要,我可以简化程序 通过强制执行中的相互性来解决问题 关系-即A-朋友-B B-和A-交朋友,如果真的 必要的话,我可能会减少 数据大小,但实际上是 总是在1英里左右 马克

无向图有(非简单)圈的向量空间(它有一个很好的基础,等等),但我不知道它是否对你有帮助

z) 这是p任务还是NP任务


这是一个枚举问题,它本身不可能在p或NP中。

寻找每个循环听起来并不合理。将有指数级的循环数,所有循环都相互重叠

至于p或NP,最慢的部分实际上是枚举每个循环(因为它们可能有很多)。如果没有循环,则存在线性算法

也许你真的想把图分成双连通的部分? 看


而且,将图存储在矩阵中几乎是不合理的。从理论上讲,这听起来不错,但在实践中并没有扩展性,而是使用邻接列表()

您所做的工作类似于数据挖掘中一个研究非常深入的问题,称为关联规则挖掘或更普遍的频繁项集挖掘。通过频繁项集挖掘,您可以找到比您所做的更具体的内容,但也更有用

我们将使用封闭频繁项集挖掘,它将查找所有组的朋友,其中每个人都是彼此的朋友

我现在要说的是,Java不能做你想让它做的事情。它不能加载那么多内存,而且它的效率不足以在任何合理的时间内处理这些数据,您需要使用C/C++。我建议使用LCM,它是一个封闭的频繁项集挖掘器,但是您还需要将支持设置得相当高,因为您拥有大量的数据


另外一件事,你可能要考虑的是阅读大型图挖掘,这也是一个相当大的研究领域,但java不会削减它。此外,您也无法找到数据中的所有周期(除非数据非常稀疏),它们将太多。它们也会重叠,没有太大意义,你可能会找到几个最大的周期

如果你想找到每个循环,那么它肯定不是p,因为对于一个完整的图,你有n个以上!周期。另一方面,如果您只想计算循环(不输出循环),那么它就是P(因此NP-P也是NP的子集)。那么您想找到每个顶点子集,其中子集中的每个人都是该子集中其他人的朋友吗?因为这个问题叫做最大团:@Tomer:你确定,无向图中计算基本圆的问题在P中吗?@jpalecek:不,事实上。我可能对最多计算所有长度的周期感到困惑。@Andy:从你的问题的c点来看,似乎你可以在没有找到所有周期的情况下生活。因此,寻找所有周期似乎是解决实际潜在问题的方法,而不是问题本身。也许你可以描述一下问题是什么(如果可能的话)。也许这里的人可以找到你没有考虑过的替代品。。。
    E
   / \
  D---F
 / \ / \
C---B---A