directed_joint_degree_graph#

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

生成具有联合度序列的随机简单有向图。

Parameters:
degree_seq包含元组(大小为3)的列表

degree_seq 包含带有节点ID、入度和出度的节点元组。

nkk整数的字典的字典

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

seed可哈希对象,可选

随机数生成器的种子。

Returns:
GGraph

具有指定输入的有向图。

Raises:
NetworkXError

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

Notes

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

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

有向版本的区别在于,邻居交换可能无法重新连接,但在这些情况下,可以使用未饱和节点代替,参见 [1] 的详细描述和证明。

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

References

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

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

Examples

>>> 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)
>>>