Java中大图的社区检测
我目前使用GraphStream库来表示Java中的一个非常大的有向加权图(35000个节点,边长约200000)。 我的目标是检测图中的节点社区,并且该库有一些内置的社区检测算法。我的问题是我根本无法使其工作。 在调用方法之后,库应该使用其社区信息更新每个节点并将其存储在“标记”属性中,但这种情况永远不会发生。 我不想太深入一个相当利基的API的细节; 我不认为这对于未来几年人们会陷入困境的情况非常有用,但基本上每个节点的结果在使用Leung算法对象时保持为空。
一些代码如下; 但不要花太多时间去研究它,我稍后会问一些更有用/不太模糊的东西!
Leung l = new Leung(g, "marker");
it = g.getNodeIterator();
while (it.hasNext()) {
l.computeNode(it.next());
}
it = g.getNodeIterator();
while (it.hasNext()) {
Node n = it.next();
System.err.println(n.getAttribute("marker").toString()); //prints null
}
对我来说,这显然是一个非常具体的问题,但是我正在寻找的方法实际上就是以近乎线性的时间在Java中绘制图形并计算(或近似)社区的任何方式。 GraphStream库允许我以任何格式保存图形(包括Gephi可读的图形),所以如果需要的话,我很乐意将任何其他库导入到我的项目中。 我简单需要一种简单的方法来计算社区。 我明白有很多算法可以做到这一点; Girvan-Newman和Louvain模块化似乎相当普遍。 但是我很努力地为这些寻找特别好的伪代码,并且我在网上找到的后者的一个实现导致了一些大的内存不足错误(Heap)。
真正的问题是,在Java中是否有一个好的库或简单的方法来获取图并检测其中的社区结构?
谢谢!
链接地址: http://www.djcxy.com/p/68353.html