if(rand()
发布于 2022-09-04 08:49:14 字数 309 浏览 8 评论 0

随机图的生成算法:
其中 p=2E/(V*(V-1))

static void randG(Graph &G, int E)
{
 double p=2.0*E/G.V()/(G.V()-1);
 for(int i=0;i<G.V();++i)
  for(int j=0;j<i;++j)
   if(rand()<p*RAND_MAX)
    G.insert(Edge(i,j));
}

不明白if(rand()<p*RAND_MAX)是在做什么筛选,请教前辈们。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

友欢 2022-09-11 08:49:14

抛砖引玉

rand()生成 0RAND_MAX 之间的整数,那么 p*RAMD_MAX 相当于就是一个阈值,当“掷骰子”低于阈值时,当前迭代到的两个点之间连起来。

风渺 2022-09-11 08:49:14

完全图中边数与点数关系是:E = V (V-1) / 2,也就是每个点与剩下V-1个点都有边连接,p作为概率,满足了线性(要求的边数越大,则概率越大,则两点之间越可能有边相连,图越接近完全图)。假设rand()返回在[0, RAND_MAX]间,则E为0时p=0,E为V(V-1)/2时p=1。根据随机生成的rand决定当前(i,j)是否直连。不过这个是有向图?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文