graphscope.nx.generators.degree_seq.预期度数图

graphscope.nx.generators.degree_seq.expected_degree_graph(w, seed=None, selfloops=True)[源代码]

返回一个具有给定期望度数的随机图。

给定一个长度为$n$的预期度数序列$W=(w_0,w_1,ldots,w_{n-1})$,该算法以如下概率在节点$u$和节点$v$之间分配一条边

\[p_{uv} = \frac{w_u w_v}{\sum_k w_k} .\]
Parameters:
  • w (列表) – 预期度数的列表。

  • selfloops (bool (default=True)) – 设置为False可移除自环边的可能性。

  • seed (integer, random_state, or None (default)) - 随机数生成状态的指示器。 参见随机性

Return type:

Graph

示例

>>> z = [10 for i in range(100)]
>>> G = nx.expected_degree_graph(z)

备注

节点具有整数标签,对应预期度数的输入序列索引。

该算法的复杂度为$mathcal{O}(n+m)$,其中$n$表示节点数量,$m$表示预期的边数。

[1]中的模型包含了自循环边的可能性。设置selfloops=False可以生成一个不含自循环的图。

对于有限图,该模型无法精确生成给定的预期度序列。相反,预期度数如下所示。

对于没有自环的情况(selfloops=False),

\[E[deg(u)] = \sum_{v \ne u} p_{uv} = w_u \left( 1 - \frac{w_u}{\sum_k w_k} \right) .\]

NetworkX遵循的标准约定是,自环边在节点度数中计为2,因此当存在自环时(selfloops=True),

\[E[deg(u)] = \sum_{v \ne u} p_{uv} + 2 p_{uu} = w_u \left( 1 + \frac{w_u}{\sum_k w_k} \right) .\]

参考文献