Algorithm 给定稀疏性的随机单连通图生成
我试图找到一个有效的算法来生成一个具有给定稀疏性的简单连通图。比如:Algorithm 给定稀疏性的随机单连通图生成,algorithm,random,graph,Algorithm,Random,Graph,我试图找到一个有效的算法来生成一个具有给定稀疏性的简单连通图。比如: Input: N - size of generated graph S - sparseness (numer of edges actually; from N-1 to N(N-1)/2) Output: simple connected graph G(v,e) with N vertices and S edges 对于每个节点,至少需要一条边 从一个节点开始。 在每次迭代中,创建一个新节点
Input:
N - size of generated graph
S - sparseness (numer of edges actually; from N-1 to N(N-1)/2)
Output:
simple connected graph G(v,e) with N vertices and S edges
对于每个节点,至少需要一条边 从一个节点开始。 在每次迭代中,创建一个新节点和一条新边。边用于将新节点与上一个节点集中的随机节点连接 创建所有节点后,创建随机边,直到满足S。确保不要创建双边(为此,可以使用邻接矩阵) 随机图是在O(S)中完成的。高级概念
#创建两个分区S和T。最初将所有节点存储在S中。
S、 T=集合(节点),集合()
#选择一个随机节点,并将其标记为已访问和当前节点。
当前_节点=random.sample(S,1).pop()
S.remove(当前_节点)
T.add(当前_节点)
图形=图形(节点)
#创建一个随机连接图。
而S:
#从当前节点的邻居中随机选取下一个节点。
#当我们生成一个连通图时,我们假设一个完整的图。
邻居节点=random.sample(节点,1).pop()
#如果尚未访问新节点,请将边从当前添加到新。
如果邻居节点不在T中:
边=(当前_节点,邻居_节点)
图.添加_边(边)
S.remove(邻居节点)
T.add(邻居节点)
#将新节点设置为当前节点。
当前节点=邻居节点
#添加随机边,直到达到所需的边数。
图.添加随机边(数量边)
使用类似的方法生成,然后根据所需的稀疏性从中随机生成指向的附加链接 根据客户的回答,我提出了以下javascript实现来处理图形:
函数生成器领域图(cy、numNode、avgdgree、weightMin、weightMax){
//创建节点
对于(变量i=0;i0){
var nexturenodeidx=randomIntBetween(0,S.length);
var nexturenode=S[nexturenodeidx];
赛义德({
组:“边”,
数据:{
权重:确定(权重最小值、权重最大值)之间的随机数,
来源:currNode.id(),
目标:nextureNode.id()
}
});
S.拼接(相邻节点,1);
T.push(相邻节点);
currNode=相邻节点;
}
//添加随机边,直到满足avgDegree
while(nodes.totalDegree()/nodes.length
要获得完整的示例源代码,请访问:)刚刚在Java中制作了类似的代码。此外,最好在创建最小连通图的同时添加随机节点。否则,您将始终获得覆盖最后一个节点的唯一垂直面,覆盖前一个节点的垂直面不超过两个,以此类推。或者,你可以通过邻接操作矩阵得到一个图的同构图。这很好也很简单,但是如果图是稠密的,这不是O(S),因为有双边检查。我的意思是,最坏的情况是(几乎)新能源汽车