用Java检测大图的社区检测

时间:2016-03-08 02:09:31

标签: algorithm graph cluster-analysis graph-algorithm

我目前正在使用GraphStream库来表示Java中非常大的有向加权图(35000个节点,边长约200000)。我的目标是检测图中的节点社区,并且库中内置了一些社区检测算法。我的问题是我根本无法使其工作。在调用方法之后,库应该使用其社区信息更新每个节点,并将其存储在“标记”中。属性,但这永远不会发生。我不想深入了解一个相当小的API的细节;我觉得这对于未来几年遇到这种情况的人来说非常有用,但基本上每个节点的结果在使用Leung算法对象时仍保持为null。

遵循一些代码;但是不要花太多时间研究它,我稍后会问一些更有用/更模糊的事情!

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 Modularity似乎很常见。但是我很难为这些找到特别好的伪代码,我在网上找到的后者的一个实现导致了一些大的内存错误(Heap)。

真正的问题是,Java中是否有一个很好的库或简单的方法来获取图形并让它检测其中的社区结构?

谢谢!

0 个答案:

没有答案