tarjan算法的实现:循环deps的求解
tarjan的Python项目详细描述
tarjan算法的python实现
Tarjan的算法将有向(可能是循环)作为输入。图形和 以拓扑顺序返回其强连接组件作为输出。
示例
>>> tarjan({1:[2],2:[1,5],3:[4],4:[3,5],5:[6],6:[7],7:[8],8:[6,9],9:[]}) [[9], [8, 7, 6], [5], [2, 1], [4, 3]]
使用
循环依赖性
在各种情况下,依赖项可能是循环的,并且一组相互依赖的 动作必须同时执行。这种情况并不少见 模拟的执行是昂贵的。用Tarjan的算法,我们可以 确定执行相互依赖组的有效顺序 行动。
传递闭包
使用tarjan算法,可以有效地计算传递函数。 图的闭包。(给定一个图g,则g的传递闭包 是一个包含相同顶点并包含v 当且仅当存在从v到g中的w的路径时,w
传递闭包在tarjan.tc
:
>>> tc({1:[2],2:[1,5],3:[4],4:[3,5],5:[6],6:[7],7:[8],8:[6,9],9:[]}) {1: (1, 2, 5, 6, 7, 8, 9), 2: (1, 2, 5, 6, 7, 8, 9), 3: (3, 4, 5, 6, 7, 8, 9), 4: (3, 4, 5, 6, 7, 8, 9), 5: (8, 9, 6, 7), 6: (8, 9, 6, 7), 7: (8, 9, 6, 7), 8: (8, 9, 6, 7), 9: ()}
展开组层次结构
给定一个组图,可以使用传递闭包来确定 一个团体的所有间接成员。(某人是一个团体的间接成员, 如果它是某个组的成员,而该组的成员…是某个组的成员 组中的。)
Tarjan变更日志
0.2.3.2(2016-12-28)
- python 3.6支持
0.2.3.1(2015-11-22)
- python 3.4&3.5支持
0.2.3(2015-02-19)
- 修复打包错误[6]
0.2.2(2015-02-18)
- 已删除动态版本说明符
- 将文档转换为rst,以便在pypi上获得更好的文档
感谢:patrick gerken(github.com/d03cc)