chordless_cycles#
- chordless_cycles(G, length_bound=None)[source]#
查找图中的简单无弦环。
一个
简单环
是一个闭合路径,其中没有节点出现两次。在简单环中,弦
是环中两个节点之间的额外边。一个无弦环
是一个没有弦的简单环。换句话说,一个无弦环是一个图G中的环C,其中诱导图G[C]中的边数等于环C的长度。需要注意的是,在G不是简单图或简单有向图的情况下,必须小心处理。一些作者限制无弦环的定义,要求其具有规定的最小长度;我们没有这样做。
我们将自环解释为无弦环,除非在具有多个平行环的多图中。同样,在长度大于1的无弦环中,不能有带自环的节点。
我们将有向的双环解释为无弦环,除非在多有向图中,双环中的任何边都有平行副本。
我们将无向边的平行对解释为双环,除非在两个节点之间存在第三个(或更多)平行边。
推广上述情况,带有平行副本的边不能出现在无弦环中。
在有向图中,两个无弦环是不同的,如果它们不是彼此的循环排列。在无向图中,两个无弦环是不同的,如果它们不是彼此的循环排列,也不是彼此的反转。
可选地,环的长度是有限的。
我们使用一个深受Dias等人[1]算法启发的算法。它已经进行了以下修改:
避免了递归,因为Python的限制。
不需要标记函数,因为起始路径被选择(并从宿主图中删除)以防止相同路径的多次出现。
搜索可选地在指定长度处被限制。
通过沿前向边扩展环,并通过沿前向和反向边阻塞节点,提供了对有向图的支持。
通过从前向边集合中省略双边,提供了对多图的支持。
- Parameters:
- GNetworkX DiGraph
一个有向图
- length_boundint 或 None, 可选 (默认=None)
如果length_bound是一个整数,生成G中长度最多为length_bound的所有简单环。否则,生成G中的所有简单环。
- Yields:
- 节点列表
每个环由沿环的节点列表表示。
- Raises:
- ValueError
当length_bound < 0时。
See also
Notes
当length_bound为None,且图是简单图时,时间复杂度为:math:
O((n+e)(c+1))
,其中:math:`n`是节点数,:math:`e`是边数,:math:`c`是无弦环数。References
[1]高效枚举无弦环 E. Dias 和 D. Castonguay 和 H. Longo 和 W.A.R. Jradi https://arxiv.org/abs/1309.1051
Examples
>>> sorted(list(nx.chordless_cycles(nx.complete_graph(4)))) [[1, 0, 2], [1, 0, 3], [2, 0, 3], [2, 1, 3]]