在图论中,Erdos-Rényi模型是用于生成随机图的两个紧密相关的模型之一。
Erdos-Rényi(ER)随机图模型有两个密切相关的变体。
在G(n,M)模型中,从具有n个节点和M个边的所有图的集合中随机均匀地选择一个图。例如,在G(3,2)模型中,三个顶点和两个边上的三个可能的图形中的每一个都以1/3的概率包含在内。
在G(n,p)模型中,通过随机连接节点来构造图。每个边以独立于其他每个边的概率p包含在图中。等效地,所有具有n个节点和M个边的图具有相同的概率
由Erdos和Rényi的二项式模型生成的图(p = 0.01)
该模型中的参数p可以被认为是一个加权函数;当p从0增加到1时,模型变得越来越可能包含具有更多边的图,而越来越少地包含具有更少边的图。特别地,p = 0.5的情况对应于所有以相等的概率选择n个顶点上的图形。
本文基本上将讨论G(n,p)模型,其中n是要创建的节点数,而p定义每个节点相互连接的概率。
G(n,p)的性质
使用上面的表示法,G(n,p)中的图平均具有边缘。任何特定顶点的度数分布都是二项式的:
其中n是图中顶点的总数。自从
作为和np =常数
对于较大的n和np = const,此分布为泊松分布。
在1960年的论文中,Erdos和Rényi非常精确地描述了g(n,p)对于p的各种值的行为。他们的结果包括:
因此是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?sRényi图或二项式图。
G(n,p)模型以概率p选择每个可能的边。
函数binomial_graph()和erdos_renyi_graph()是此函数的别名。
参数:n(int)–节点数。
p(浮点数)–边缘创建的概率。
seed(整数,可选)–随机数生成器的种子(默认为无)。
有向图(布尔型,可选(默认为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()
上面的示例适用于50个节点,因此不清楚。
考虑较少节点数(例如10个)的情况时,您可以清楚地看到区别。
使用各种概率的代码,我们可以轻松看到差异:
>>> I= nx.erdos_renyi_graph(10,0)
>>> nx.draw(I, with_labels=True)
>>> plt.show()
>>> K=nx.erdos_renyi_graph(10,0.25)
>>> nx.draw(K, with_labels=True)
>>> plt.show()
>>>H= nx.erdos_renyi_graph(10,0.5)
>>> nx.draw(H, with_labels=True)
>>> plt.show()
该算法在O( ) 时间。对于稀疏图(即,对于p的较小值),fast_gnp_random_graph()是一种更快的算法。
因此,以上示例清楚地定义了使用erdos renyi模型制作随机图的方法,以及如何使用Python的networkx库使用前述方法。
接下来,我们将使用库networkx在Python讨论自我图和各种其他类型的图。
参考
您可以在以下位置阅读更多有关此内容的信息
。