Java 使用JUNG在图中查找不连通子图
我用java中的JUNG创建了一个图Java 使用JUNG在图中查找不连通子图,java,graph,jung,Java,Graph,Jung,我用java中的JUNG创建了一个图 Graph<Integer, String> g; public SimpleGraphView2() { // Graph<V, E> where V is the type of the vertices and E is the type of the edges g = new SparseGraph<Integer, String>(); // Add some vertices. Fr
Graph<Integer, String> g;
public SimpleGraphView2() {
// Graph<V, E> where V is the type of the vertices and E is the type of the edges
g = new SparseGraph<Integer, String>();
// Add some vertices. From above we defined these to be type Integer.
g.addVertex((Integer)1);
g.addVertex((Integer)2);
g.addVertex((Integer)3);
g.addVertex((Integer)4);
g.addVertex((Integer)5);
g.addVertex((Integer)6);
g.addVertex((Integer)7);
g.addVertex((Integer)8);
g.addEdge("A", 1, 2);
g.addEdge("B", 2, 3);
g.addEdge("C", 2, 4);
g.addEdge("D", 4, 5);
g.addEdge("E", 1, 3);
g.addEdge("F", 6, 7);
g.addEdge("G", 7, 8);
}
图g;
公共SimpleGraphView2(){
//图中V是顶点的类型,E是边的类型
g=新SparseGraph();
//添加一些顶点。从上面我们将它们定义为整数类型。
g、 addVertex((整数)1);
g、 addVertex((整数)2);
g、 addVertex((整数)3);
g、 addVertex((整数)4);
g、 addVertex((整数)5);
g、 addVertex((整数)6);
g、 addVertex((整数)7);
g、 addVertex((整数)8);
g、 增编(“A”,1,2);
g、 增编(“B”、2、3);
g、 增编(“C”,2,4);
g、 增补(“D”,4,5);
g、 增编(“E”,1,3);
g、 增编(“F”、6、7);
g、 增编(“g”、7、8);
}
我想在我创建的图g中找到断开连接的图的数量。在我的例子中,我想要一个2的输出(第一个图形包含:1,2,3,4,5。第二个包含:6,7,8)。任何帮助都将不胜感激简单的BFS将为您提供答案…从任何节点启动BFS,您将发现所有节点都可以从该节点访问..然后再次从另一个未访问的节点启动BFS,依此类推 简单BFS将为您提供答案…从任何节点启动BFS,您将发现所有可从该节点访问的节点..然后再次从另一个未访问的节点启动BFS,依此类推 你想要weakcomponentcluster:你想要weakcomponentcluster:约书亚给了你正确的答案。例如:
Transformer<Graph<V,E>, Set<Set<V>>> trns = new WeakComponentClusterer<V,E>();
Set<Set<V>> clusters = trns.transform(graph);
另一方面,该算法的速度将取决于您拥有的顶点数(如您正确所述)以及边数。但是100000个顶点不应该是一个限制因素。约书亚给了你正确的答案。例如:
Transformer<Graph<V,E>, Set<Set<V>>> trns = new WeakComponentClusterer<V,E>();
Set<Set<V>> clusters = trns.transform(graph);
另一方面,该算法的速度将取决于您拥有的顶点数(如您正确所述)以及边数。但是100000个顶点不应该是一个限制因素。我认为JUNG有一些库可以做到这一点,但我现在可以肯定,因为我对JUNG是新手。也许可以使用诸如集群或edu.uci.ics.jung.algorithms.connectivity.KNeighborhoodExtractor之类的东西,但我不知道如何使用。我想JUNG有一些库来做这件事,但我现在肯定了,因为我对JUNG是新手。也许可以使用诸如集群或edu.uci.ics.jung.algorithms.connectivity.KNeighborhoodExtractor之类的东西,但我不知道如何使用。一些示例代码会很受欢迎当然我知道这一点,我需要示例,文档组织得不好。我是一名java初学者,我需要的是示例。顺便说一句,请记住,我的图表包含超过100.000个节点。当然,我知道这一点,我需要示例,文档组织得不好。我是一名java初学者,我需要的是示例。顺便说一句,请记住,我的图形包含超过100000个节点。很好,我将在稍后进行测试。输出示例似乎在多个簇中显示相同的顶点,但如果是这样,那么它们就不是簇了?当我用这个答案中的转换运行问题中的示例时,我得到了
[[6,7,8],[1,2,3,4,5]
作为簇
@mab的字符串化值,我已经处理了一段时间了,但我相信有些算法将同一个顶点分组到多个簇中。我可能错了,但这始终是一个简单的假设,当时似乎没有太多缺点。图的弱(或强)组件将图节点划分为多个部分,也就是说,每个节点始终只分配给一个组件(集群)。有一些概率聚类算法可以将概率分配给集群/节点分配,但我不知道有任何聚类算法可以直接将单个节点分配给多个集群。干得好,稍后我将对此进行测试。输出示例似乎在多个簇中显示相同的顶点,但如果是这种情况,那么它们就不是簇了?当我用这个答案中的转换运行问题中的示例时,我得到了[[6,7,8],[1,2,3,4,5]
作为簇
@mab的字符串化值,我已经处理了一段时间了,但我相信有些算法将同一个顶点分组到多个簇中。我可能错了,但这始终是一个简单的假设,当时似乎没有太多缺点。图的弱(或强)组件将图节点划分为多个部分,也就是说,每个节点始终只分配给一个组件(集群)。有一些概率聚类算法可以将概率分配给集群/节点分配,但我不知道有哪种聚类算法可以直接将单个节点分配给多个集群。