java是否可以创建具有特定冗余级别的连通图?
我在看jgraphT,但我不是很有经验,它缺乏一点文档
我有一些节点,我想创建一个连接的拓扑,提供一些冗余。 例如:
我从n1,n2,n3,n4开始
我希望能够与每个节点通信,但仍然有多个可能的路径,以便在一个节点掉下时,其他节点仍然可以通信
jgraphT能为我创建一个好的拓扑吗?也许给一些权重,使其对某些节点的估值高于其他节点
或者你知道其他图书馆也有同样的成就? 此外,如果我能生成某种网页来记录我创建的拓扑结构,那就太好了
你可以在下面搜索框中键入要查询的问题!
我在看jgraphT,但我不是很有经验,它缺乏一点文档
我有一些节点,我想创建一个连接的拓扑,提供一些冗余。 例如:
我从n1,n2,n3,n4开始
我希望能够与每个节点通信,但仍然有多个可能的路径,以便在一个节点掉下时,其他节点仍然可以通信
jgraphT能为我创建一个好的拓扑吗?也许给一些权重,使其对某些节点的估值高于其他节点
或者你知道其他图书馆也有同样的成就? 此外,如果我能生成某种网页来记录我创建的拓扑结构,那就太好了
# 1 楼答案
有点太长,无法发表评论:
我认为你要找的东西的形式特征还不够明确。显然,您正在寻找具有特定连接性(http://en.wikipedia.org/wiki/Connectivity_%28graph_theory%29)的图,但是基于当前的问题,可以建议使用
CompleteGraphGenerator
关键点可能是你提到的“一些冗余”和“一些权重”(以及记录拓扑结构的“一些网页”)
想必,你想要最少的冗余。也就是说,您可能希望插入额外边的最小数量,以便在移除
k
任意顶点后,图形仍保持连接我不知道有哪个图书馆能做到这一点
基于JGraphT提供的两个粗略想法:
可以计算最小切割,并在切割两侧的顶点之间插入额外的边。这里的http://jgrapht.org/javadoc/org/jgrapht/alg/StoerWagnerMinimumCut.html可能是一个起点
可以计算强连接的组件,并在这些组件之间插入额外的边。强连通分量可以用http://jgrapht.org/javadoc/org/jgrapht/alg/StrongConnectivityInspector.html
编辑:
添加了基于上述第一个想法的实现。
ensureConnectivity
方法将确保给定的图具有如下特定的连接性:它使用StoerWagnerMinimumCut
类计算最小割。此类的输出是顶点列表,这些顶点是将由切割创建的组件之一。computeCutVertices
方法将计算实际必须移除的顶点,以便将图形划分为多个组件。对于这些顶点中的每一个,将计算邻域集。这些邻居中的任意两个(尚未连接的)将使用新的边连接。整个过程将重复,直到“切割顶点”的数量大于所需的连通性请注意,这还没有得到广泛的测试,可能会有更优雅或有效的解决方案,但。。。总的来说,它应该是有效的