首先,我是一个 Java 初学者,所以我不确定这是否可能!基本上我有一个巨大的(3+百万)关系数据数据源(即A是B+C+D的朋友,B是D+G+Z的朋友(但不是A - 即不互惠的)等),我想要在这个(不一定是连接的)有向图中找到每个循环。
我找到了Finding all cycles in graph的线程,这让我想到了Donald Johnson 的(基本)循环查找算法,至少从表面上看,它看起来像我所追求的(我要试试当我周二回到工作岗位时 - 认为同时询问不会有什么坏处!)。
我快速浏览了Johnson算法的Java实现代码(在那个线程中),看起来关系矩阵是第一步,所以我想我的问题是:
a) Java 是否能够处理 3+million*3+million 矩阵?(计划用二元稀疏矩阵表示 A-friends-with-B)
b) 我需要找到每个连通子图作为我的第一个问题,还是循环查找算法会处理不相交的数据?
c) 这实际上是解决问题的合适方法吗?我对“基本”周期的理解是,在下图中,不是选择 ABCDEF,而是选择 ABF、BCD 等,但这并不是世界末日。
E
/ \
D---F
/ \ / \
C---B---A
d) 如有必要,我可以通过加强关系中的相互性来简化问题 - 即 A-friends-with-B <==> B-friends-with-A,如果真的有必要,我可以减少数据大小,但是实际上,它总是在 100 万左右。
z) 这是 P 任务还是 NP 任务?!我咬得比我能咀嚼的多吗?
谢谢大家,任何帮助表示赞赏!安迪