首先,我是一个Java初学者,所以我不确定这是否可能!基本上,我有一个关系数据的巨大(3 +百万)数据源(即A是B + C + D的朋友,B是D + G + Z的朋友(但不是A - 即非互补)等等),我想找到这个(不一定是连接的)有向图中的每个周期。在一个巨大的稀疏矩阵中寻找所有的周期
我发现线程Finding all cycles in graph,它指出我是唐纳德约翰逊的(基本)周期寻找算法,它至少表面上看起来像它会做我以后(我要去尝试当我周二回到工作岗位时 - 认为在此期间提问并不会造成什么负面影响!)。
我不得不通过Java实现约翰逊的算法的代码快速扫描(在该线程),它看起来像关系的矩阵是第一步,所以我想我的问题是:
一) Java能够处理3百万* 3百万个矩阵吗? (正在计划用二进制稀疏矩阵表示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-朋友-与-B < ==> B-朋友-与-A,如果真的有需要,我可以或许减少数据量,但实际上总是在1mil左右。
z)这是P还是NP任务?我咬得比我咀嚼的还多吗?
谢谢大家,任何帮助表示赞赏! Andy
如果你想找到_every_ cycle,那肯定不是P,因为对于一个完整的图,你有更多的n!周期。另一方面,如果你只是想计算周期(不输出它们),那么它就是P(因此NP - P也是NP的一个子集)。 – 2010-05-30 11:09:19
那么你是否想要找到子集中每个人都与该子集中其他人共享朋友的每个顶点子集?因为这个问题被称为最大集团:http://en.wikipedia.org/wiki/Maximal_clique#Definitions – 2010-05-30 11:14:17
@Tomer:你确定,计算无向图中基本圆的问题在P? – jpalecek 2010-05-30 11:31:38