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