Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JUNG在图中查找不连通子图_Java_Graph_Jung - Fatal编程技术网

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

我用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. 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的字符串化值,我已经处理了一段时间了,但我相信有些算法将同一个顶点分组到多个簇中。我可能错了,但这始终是一个简单的假设,当时似乎没有太多缺点。图的弱(或强)组件将图节点划分为多个部分,也就是说,每个节点始终只分配给一个组件(集群)。有一些概率聚类算法可以将概率分配给集群/节点分配,但我不知道有哪种聚类算法可以直接将单个节点分配给多个集群。