triadic_census#

triadic_census(G, nodelist=None)[源代码]#

确定有向图的三元组普查结果。

三元组普查(triadic census)统计了有向图中存在的16种可能的三元组类型的数量。如果传入节点列表(nodelist),则只考虑包含该列表中节点的那些三元组。

参数:
G有向图

一个 NetworkX DiGraph 对象

nodelist列表

要计算三元组普查的节点列表

返回:
census字典

以三元组类型为键,出现次数为值的字典。

抛出:
ValueError

如果 nodelist 包含重复节点或不在 G 中的节点。如果要忽略此情况,可以使用 set(nodelist) & G.nodes 进行预处理。

另请参阅

triad_graph

注意

此算法的时间复杂度为 \(O(m)\),其中 \(m\) 是图中的边数。

对于无向图,可以通过首先使用 G.to_directed() 方法将图转换为有向图来计算三元组普查。转换后,在无向图情境下,只会出现三元组类型 003、102、201 和 300。

参考文献

[1]

Vladimir Batagelj 和 Andrej Mrvar,《用于具有小最大度的大型稀疏网络的亚二次时间三元组普查算法》,卢布尔雅那大学,http://vlado.fmf.uni-lj.si/pub/networks/doc/triads/triads.pdf

示例

>>> G = nx.DiGraph([(1, 2), (2, 3), (3, 1), (3, 4), (4, 1), (4, 2)])
>>> triadic_census = nx.triadic_census(G)
>>> for key, value in triadic_census.items():
...     print(f"{key}: {value}")
003: 0
012: 0
102: 0
021D: 0
021U: 0
021C: 0
111D: 0
111U: 0
030T: 2
030C: 2
201: 0
120D: 0
120U: 0
120C: 0
210: 0
300: 0