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