directed_joint_degree_graph#

directed_joint_degree_graph(in_degrees, out_degrees, nkk, seed=None)[source]#

生成一个具有联合度数的随机简单有向图。

参数:
degree_seq元组列表(大小为 3)

度序列包含节点 ID、入度和出度的节点元组。

nkk整数的字典的字典

有向联合度数字典,对于出度为 k 的节点(字典的第一层)和入度为 l 的节点(字典的第二层),描述了边的数量。

seed可哈希对象,可选

随机数生成器的种子。

返回:
G

一个具有指定输入的有向图。

抛出异常:
NetworkXError

如果 degree_seq 和 nkk 不能实现为简单有向图。

说明

类似于无向版本:在“while 循环”的每次迭代中,算法选择两个未连接的节点 v 和 w,它们的度数分别为 k 和 l,并且 nkk[k][l] 尚未达到其目标值,即(对于给定的 k,l):n_edges_add < nkk[k][l]。然后算法添加边 (v,w),并且总是将图 G 中的边数增加一。

该算法的巧妙之处在于,即使节点 v 或 w 中的一个或两个没有空闲的端点,也总有可能在未连接的节点 v 和 w 之间添加一条边,只要 nkk[degree(v)][degree(w)] 尚未达到其目标值。如果节点 v 或 w 没有空闲端点,我们执行“邻居切换”,这是一种边缘重布线操作,可以释放一个空闲端点,同时保持 nkk 不变。

有向版本的不同之处在于邻居切换可能无法重布线,但在这些情况下,未饱和的节点可以被重新分配使用,详细描述和证明请参见 [1]。

算法继续执行 E(图中的边数)次“while 循环”迭代,此时给定 nkk[k][l] 的所有条目都已达到其目标值,构造完成。

参考文献

[1] B. Tillman, A. Markopoulou, C. T. Butts & M. Gjoka,

“Construction of Directed 2K Graphs”. In Proc. of KDD 2017.

示例

>>> in_degrees = [0, 1, 1, 2]
>>> out_degrees = [1, 1, 1, 1]
>>> nkk = {1: {1: 2, 2: 2}}
>>> G = nx.directed_joint_degree_graph(in_degrees, out_degrees, nkk)
>>>