-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathREADME.txt
More file actions
82 lines (54 loc) · 2.11 KB
/
README.txt
File metadata and controls
82 lines (54 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
============
digraphtools
============
Some tools for working with directed acyclic graphs, partial orders and
topological sorting with Python
digraphtools was written as a lightweight way of using DAGs and partial
ordering to represent, sort and traverse dependency trees in a lightweight
way.
The code is hosted on github at https://github.com/dbasden/python-digraphtools
Graph Representation
====================
Graphs
------
A graph is represented as a dict which maps a node to a list
nodes connected via the outgoing edges of that node.
e.g.
graph = { 1: [2,3],
2: [3],
3: [] }
is a DAG represented by the edges (1,2) (1,3) (2,3)
where the edge 2tuple is in the form of (from,to)
There are helper methods in deptools to generate graphs from a
list of edges, and vice versa
Binary relations
----------------
If a DAG represents dependencies, e.g. the edge (1,2) is taken
to mean "1 depends on 2", this is backwards from a binary relation.
(1,2) would be the relation 2P1
Topological Sorting
===================
There are two ways of generating linear extensions / topological sorts of
dependencies (i.e. orders items must be processed in to satisfy dependency
requirements):
deptools.dfs_topsort_traversal
------------------------------
deptools.dfs_topsort_traversal will take a graph and iterate over a
single valid topologicaly sorted order
deptools.topsort.vr_topsort
---------------------------
deptools.topsort.vr_topsort will generate all valid linear extensions /
topological orderings given an initial 'seed' linear extension (such as
the one generated by deptools.dfs_topsort_traversal).
The method does not take the graph format as used by deptools as input,
but it does have a helper method to generate it's input matrix from a
partial order set (which can be generated from a graph using helpers in
deptools).
See the examples in topsort.py and test/test_topsort.py for how to do this.
Authors
=======
digraphtools was initially written by David Basden
Thanks
======
Thanks to Yaakov L. Varol and Doron Rotem for the design of the algorithm
in topsort.py