用Java创建一个图形数组(时间演变)

时间:2015-03-09 14:45:50

标签: java arraylist graph jung jgrapht

我是Java新手并使用图表。我有一个时间进化图(例如,在不同的时间实例中同一图的5个快照),我需要计算一些基本网络指标,如密度,大小,中心性等。我想知道我可以用什么基本数据结构来存储和执行每个图上的计算。我尝试使用邻接矩阵,但节点大小太大且动态,导致效率低下。我遇到了几个图书馆,特别是JgraphT来保存无向图

    UndirectedGraph<String, DefaultEdge> G =
          new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

但这是一张图。有没有办法创建这些无向图的数组或我缺少的任何其他方式来存储时间演变图?

1 个答案:

答案 0 :(得分:0)

一些选择:

(1)您可以像创建任何其他对象一样创建图形的数组(或List,或Set等)。如果所有的时间步长都很容易进入内存(比如100个节点/每个1000个节点/边缘),那么这应该可以正常工作。以下是使用JUNG的例子:

List<Graph<V, E>> graphList = new ArrayList<>(); // Java 7 syntax
Graph<V, E> graph = new DirectedSparseGraph<V, E>();
// populate 'graph'
graphList.add(graph);

(2)如果每个图中的节点都是相同的(即,它只是正在改变的边),则存储节点一次,并存储一组边的列表,每个时间步一组。

(3)如果整个图形是相对静态的,则可以存储原始图形,然后为每个时间步长存储增量(添加/删除的节点或边)。这可以更加节省空间,但需要重建步骤1-n以便在时间n + 1处查看状态。

(4)最后,您可以使用单个图形,使用其存在的间隔注释每个节点/边缘,并在您希望将算法应用于图形时应用过滤器。