tarjan算法的实现:循环deps的求解

tarjan的Python项目详细描述


tarjan算法的python实现

Tarjan的算法将有向(可能是循环)作为输入。图形和 以拓扑顺序返回其强连接组件作为输出。

示例

https://raw.githubusercontent.com/bwesterb/py-tarjan/master/doc/example.png
>>> 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 当且仅当存在从vg中的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: ()}

展开组层次结构

给定一个组图,可以使用传递闭包来确定 一个团体的所有间接成员。(某人是一个团体的间接成员, 如果它是某个组的成员,而该组的成员…是某个组的成员 组中的。)

安装

只需执行

easy_install tarjan

或从此源发行版运行

python setup.py install
https://travis-ci.org/bwesterb/py-tarjan.png

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将json反序列化为列表<Object>   Spring框架中的java回滚机制   java如何使反射在JDK 16及更高版本上工作?   java终结器如何导致可移植性问题?   java Hibernate使用ON子句或alternative左连接获取   java aws codebuild maven项目失败“保存的引用不明确”   并发Java多线程读取单个大文件   java如果输入仅由1和0组成,请将其从二进制转换为十进制   java在RealmRecyServiceAdapter上调用updateData实际上并没有更新数据   javajsf:h commandlink操作是打开同一页面的新弹出窗口,而不是调用bean方法   java我们可以为其中一个变量同时添加@Column和@OneToOne注释吗?   java JBoss AS 7自定义登录模块从未调用   如何检查Java中是否存在数组中的元素   java Spring重试:未调用带@Recover注释的方法   如何解析带有Java错误HTTP格式问题的php消息   java如何在weblogic中部署可选的包共享库   java将配置单元中的数据集保存为avro格式的合并列   用Guice注入java泛型   java单选按钮组和额外选项   javajackson:如何读取字符串作为列表?