Implementation of Tarjan's algorithm: resolve cyclic deps
Project description
Python implementation of Tarjan’s algorithm
Tarjan’s algorithm takes as input a directed (possibly cyclic!) graph and returns as output its strongly connected components in a topological order.
Example
>>> 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]]
Uses
Cyclic dependencies
In various cases, dependencies might be cyclic and a group of interdependant actions must be executed simultaneously. It is not uncommon that the simulataneous execution is costly. With Tarjan’s algorithm, one can determine an efficient order in which to execute the groups of interdependant actions.
Transitive closure
Using Tarjan’s algorithm, one can efficiently compute the transitive closure of a graph. (Given a graph G, the transitive closure of G is a graph that contains the same vertices and contains an edge from v to w if and only if there is a path from v to w in G.)
The transitive closure is implemented in tarjan.tc:
>>> from tarjan.tc import 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: ()}
Expand group hierarchies
Given a graph of groups, one can use the transitive closure to determine all indirect members of a group. (Someone is an indirect member of a group, if it is a member of a group that is a member of a group that … is a member of the group.)
Installation
Simply execute
pip install tarjan
or from this source distribution, run
python setup.py install
Tarjan Changelog
0.2.4 (2023-04-14)
Support Python 3.8 - 3.11
Drop support for Python 2.6, 3.2 - 3.7
Change license to LGPLv3
Switch to Github actions
Add flake8 linting
0.2.3.2 (2016-12-28)
Python 3.6 support
0.2.3.1 (2015-11-22)
Python 3.4 & 3.5 support
0.2.3 (2015-02-19)
Fix packaging bug [#6]
0.2.2 (2015-02-18)
Removed dynamic version specifier
Converted docs to rst for better docs on pypi
Thanks-to: Patrick Gerken (github.com/d03cc)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file tarjan-0.2.4.tar.gz
.
File metadata
- Download URL: tarjan-0.2.4.tar.gz
- Upload date:
- Size: 7.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9d7e93368c8c75d33b0849801f2687a59c91e0ae487b8ba7e97e431e841a514 |
|
MD5 | fb24e431897d870b7719b2569c2c24da |
|
BLAKE2b-256 | 4aec37c4395138b8307daf910d30e0aa77c854e7a83d4900799ace460e89bbf9 |