热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ErdosRenyl模型(用于生成随机图)

ErdosRenyl模型(用于生成随机图)原文:https

Erdos Renyl 模型(用于生成随机图)

原文: https://www.geeksforgeeks.org/erdos-renyl-model-generating-random-graphs/

在图论中,Erdos-Rényi 模型是用于生成随机图的两个紧密相关的模型之一。

鄂尔多斯-雷尼(ER)随机图模型有两个密切相关的变体。

在 G(n,M)模型中,从具有 n 个节点和 M 个边的所有图的集合中随机均匀地选择一个图。 例如,在 G(3,2)模型中,三个顶点和两个边上的三个可能图形中的每一个都以 1/3 的概率包含在内。

在 G(n,p)模型中,通过随机连接节点来构造图。 每个边以独立于其他每个边的概率 p 包含在图中。 等效地,所有具有 n 个节点和 M 个边的图具有相同的

 p^M (1-p)^\binom{n}{2}-M  概率

由鄂尔多斯和雷尼的二项式模型生成的图(p = 0.01)

该模型中的参数 p 可以看作是一个加权函数。 当 p 从 0 增加到 1 时,模型变得越来越可能包含具有更多边的图,而越来越少地包含具有更少边的图。 特别地,p = 0.5 的情况对应于以相等的概率选择 n 个顶点上的所有2^{\binom{n}{2}}图的情况。

本文基本上将讨论 G(n,p)模型,其中 n 是要创建的节点数,p 定义每个节点相互连接的可能性。

G(n,p)的性质

使用上述符号,G(n,p)中的图形平均具有{\binom{n}{2}}p边。 任何特定顶点的度分布都是二项式的:

P(deg(v)=k)=\binom{n-1}{k}{p^k}{1-p^{n-1-k}}

其中 n 是图中顶点的总数。 以来

P(deg(v)=k)\rightarrow\frac{{np^k}{e^{-np}}}{k!} as n\rightarrow infinity and np = constant

对于较大的 n 和 np = const,此分布为泊松分布。

在 1960 年的论文中,Erdos 和 Rényi 非常精确地描述了对于 p 的各种值,G(n,p)的行为。 他们的结果包括:


  • 如果 np <1,则 G(n,p)中的图几乎可以肯定没有大小大于 O(log(n))的连通分量。 如果 np = 1,则 G(n,p)中的图几乎肯定会具有最大成分,其大小约为n^{2/3} 如果 np \rightarrow c > 1,其中 c 为常数,那么 G(n,p)中的图几乎肯定会具有包含正分数顶点的唯一巨型分量。 没有其他组件包含超过 O(log(n))个顶点。 如果p<\frac{(1-\varepsilon )ln n}{n} ,则 G(n,p)中的图几乎肯定会包含孤立的顶点,因此将断开连接。 如果p>\frac{(1+\varepsilon )ln n}{n} ,那么几乎可以肯定地连接 G(n,p)中的图。

因此,\frac{ln n}{n}是 G(n,p)的连通性的严格阈值。

随着 n 趋于无穷大,可以几乎精确地描述图的其他属性。 例如,存在 ak(n)(大约等于 2log2(n)),使得 G(n,0.5)中的最大派系几乎可以确定为 k(n)或 k(n)+1。

因此,即使在图中找到最大团的大小是 NP 完全的,但“典型”图中最大团的大小(根据此模型)还是非常容易理解的。 有趣的是,Erdos-Renyi 图的边对偶图是具有几乎相同的度数分布,但具有度数相关性和明显更高的聚类系数的图。

接下来,我将描述用于制作 ER 图的代码。 要实施以下代码,您还需要安装 netwrokx 库,还需要安装 matplotlib 库。 接下来,您将看到图的确切代码,该代码最近已作为 networkx 库的功能使用。

Erdos_renyi_graph(n,p,seed = None,directed = False)

返回 G(n,p)随机图,也称为 Erd?s-Rényi 图或二项式图。

G(n,p)模型以概率 p 选择每个可能的边。

函数 binomial_graph()和 erdos_renyi_graph()是此函数的别名。

*参数:n(int)-节点数。

p(浮点数)–边创建的概率。

种子(int,可选)–随机数生成器的种子(默认=无)。

有向(布尔型,可选(默认= False))–如果为 True,则此函数返回有向图。*

#importing the networkx library
>>> import networkx as nx
#importing the matplotlib library for plotting the graph
>>> import matplotlib.pyplot as plt
>>> G= nx.erdos_renyi_graph(50,0.5)
>>> nx.draw(G, with_labels=True)
>>> plt.show()

图 1:对于 n = 50,p = 0.5

上面的示例适用于 50 个节点,因此不清楚。

当考虑较少节点数的情况(例如 10 个)时,您可以清楚地看到区别。

使用各种概率的代码,我们可以轻松看到差异:

>>> I= nx.erdos_renyi_graph(10,0)
>>> nx.draw(I, with_labels=True)
>>> plt.show()

图 2:对于 n = 10,p = 0

>>> K=nx.erdos_renyi_graph(10,0.25)
>>> nx.draw(K, with_labels=True)
>>> plt.show()

图 3:对于 n = 10,p = 0.25

>>>H= nx.erdos_renyi_graph(10,0.5)
>>> nx.draw(H, with_labels=True)
>>> plt.show()

图 4:对于 n = 10,p = 0.5

该算法运行时间为 O(n^2)。 对于稀疏图(即,较小的 p 值),fast_gnp_random_graph()是一种更快的算法。

因此,以上示例清楚地定义了使用 erdos renyi 模型制作随机图的方法,以及如何使用 python 的 networkx 库使用前述方法。

接下来,我们将使用库 networkx 讨论 python 中的自我图和各种其他类型的图。

参考文献


  • https://zh.wikipedia.org/wiki/Erd%C5%91s%E2%80%93R%C3%A9nyi_model* http://networkx.readthedocs.io/en/networkx-1.10/index.html

.

本文由 Jayant Bisht 提供。 如果您喜欢 GeeksforGeeks 并希望做出贡献,则还可以使用 tribution.geeksforgeeks.org 撰写文章,或将您的文章邮寄至 tribution@geeksforgeeks.org。 查看您的文章出现在 GeeksforGeeks 主页上,并帮助其他 Geeks。

如果发现任何不正确的地方,或者想分享有关上述主题的更多信息,请写评论。


推荐阅读
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • 在 Windows 10 系统下配置 Python 3 和 OpenCV 3 的环境时,建议使用 Anaconda 分发版以简化安装过程。Anaconda 可以从其官方网站(https://www.anaconda.com/download)下载。此外,本文还推荐了几本关于 Python 和 OpenCV 的专业书籍,帮助读者深入理解和应用相关技术。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • 本文探讨了Python 3.6中引入的`secrets`模块,该模块专为生成高质量的加密随机数而设计,旨在提升应用程序中的机密管理和安全性。通过使用`secrets`模块,开发者可以有效防止常见的安全漏洞,确保敏感数据的保护。 ... [详细]
  • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
    开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
  • Python 并发编程进阶:从初学者到高手的进程与模块开发指南
    Python 并发编程进阶:从初学者到高手的进程与模块开发指南 ... [详细]
  • 运用Isotonic回归算法解决鸢尾花数据集中的回归挑战
    本文探讨了利用Isotonic回归算法解决鸢尾花数据集中的回归问题。首先介绍了Isotonic回归的基本原理及其在保持单调性方面的优势,并通过具体示例说明其应用方法。随后详细描述了鸢尾花数据集的特征和获取途径,最后展示了如何将Isotonic回归应用于该数据集,以实现更准确的预测结果。 ... [详细]
  • Prim算法在处理稠密图时表现出色,尤其适用于边数远多于顶点数的情形。传统实现的时间复杂度为 \(O(n^2)\),但通过引入优先队列进行优化,可以在点数为 \(m\)、边数为 \(n\) 的情况下显著降低时间复杂度,提高算法效率。这种优化方法不仅能够加速最小生成树的构建过程,还能在大规模数据集上保持良好的性能表现。 ... [详细]
author-avatar
魔蝎陈小琳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有