HOME

TheInfoList



OR:

In
mathematics Mathematics is an area of knowledge that includes the topics of numbers, formulas and related structures, shapes and the spaces in which they are contained, and quantities and their changes. These topics are represented in modern mathematics ...
, computer science and digital electronics, a dependency graph is a directed graph representing dependencies of several objects towards each other. It is possible to derive an evaluation order or the absence of an evaluation order that respects the given dependencies from the dependency graph.


Definition

Given a set of objects S and a transitive relation R \subseteq S \times S with (a,b) \in R modeling a dependency "''a'' depends on ''b''" ("''a'' needs ''b'' evaluated first"), the dependency graph is a graph G = (S, T) with T \subseteq R the transitive reduction of ''R''. For example, assume a simple calculator. This calculator supports assignment of constant values to variables and assigning the sum of exactly two variables to a third variable. Given several equations like "''A'' = ''B''+''C''; ''B'' = 5+''D''; ''C''=4; ''D''=2;", then S=\ and R=\. You can derive this relation directly: ''A'' depends on ''B'' and ''C'', because you can add two variables if and only if you know the values of both variables. Thus, ''B'' must be calculated before ''A'' can be calculated. However, the values of ''C'' and ''D'' are known immediately, because they are number literals.


Recognizing impossible evaluations

In a dependency graph, the cycles of dependencies (also called circular dependencies) lead to a situation in which no valid evaluation order exists, because none of the objects in the cycle may be evaluated first. If a dependency graph does not have any circular dependencies, it forms a directed acyclic graph, and an evaluation order may be found by topological sorting. Most topological sorting algorithms are also capable of detecting cycles in their inputs; however, it may be desirable to perform cycle detection separately from topological sorting in order to provide appropriate handling for the detected cycles. Assume the simple calculator from before. The equation system "''A''=''B''; ''B''=''D''+''C''; ''C''=''D''+''A''; ''D''=12;" contains a circular dependency formed by ''A'', ''B'' and ''C'', as ''B'' must be evaluated before ''A'', ''C'' must be evaluated before ''B'' and ''A'' must be evaluated before ''C''.


Deriving an evaluation order

A correct evaluation order is a numbering n : S \rightarrow \mathbb of the objects that form the nodes of the dependency graph so that the following equation holds: n(a) < n(b) \Rightarrow (a, b) \notin R with a, b \in S. This means, if the numbering orders two elements a and b so that a will be evaluated before b, then a must not depend on b. There can be more than one correct evaluation order. In fact, a correct numbering is a topological order, and any topological order is a correct numbering. Thus, any algorithm that derives a correct topological order derives a correct evaluation order. Assume the simple calculator from above once more. Given the equation system "''A'' = ''B''+''C''; ''B'' = 5+''D''; ''C''=4; ''D''=2;", a correct evaluation order would be (''D'', ''C'', ''B'', ''A''). However, (''C'', ''D'', ''B'', ''A'') is a correct evaluation order as well.


Monoid structure

An acyclic dependency graph corresponds to a trace of a trace monoid as follows: * A function \phi : S \to \Sigma labels each vertex with a symbol from the alphabet \Sigma * There is an edge a \to b or b \to a if and only if (\phi(a),\phi(b)) is in the dependency relation D. * Two graphs are considered to be equal if their labels and edges correspond. Then the string consisting of the vertex labels ordered by a correct evaluation order corresponds to a string of a trace. The monoidal operation (S_,R_)=(S_1,R_1)\bullet (S_2,R_2) takes the disjoint union S_=S_1 \sqcup S_2 of two graphs' vertex sets, preserves the existing edges in each graph, and draws new edges from the first to the second where the dependency relation allows, :R_ = R_1 \sqcup R_2 \sqcup \ The identity is the empty graph.


Examples

Dependency graphs are used in: * Automated software installers: They walk the graph looking for software packages that are required but not yet installed. The dependency is given by the coupling of the packages. * Software build scripts such as Unix Make, Node npm install, php composer, Twitter bower install, or Apache Ant. They need to know what files have changed so only the correct files need to be recompiled. * In compiler technology and formal language implementation: ** Instruction scheduling: Dependency graphs are computed for the operands of assembly or intermediate instructions and used to determine an optimal order for the instructions. ** Dead code elimination: If no side effected operation depends on a variable, this variable is considered dead and can be removed. * Dynamic graph analytics: GraphBolt and KickStarter capture value dependencies for
incremental computing Incremental computing, also known as incremental computation, is a software feature which, whenever a piece of data changes, attempts to save time by only recomputing those outputs which depend on the changed data. When incremental computing is su ...
when graph structure changes. * Spreadsheet calculators. They need to derive a correct calculation order similar to that one in the example used in this article. * Web Forms standards such as XForms to know what visual elements to update if data in the model changes. * Video games, especially
puzzle A puzzle is a game, Problem solving, problem, or toy that tests a person's ingenuity or knowledge. In a puzzle, the solver is expected to put pieces together (Disentanglement puzzle, or take them apart) in a logical way, in order to arrive at th ...
and adventure video games, which are frequently designed as a graph of dependent relationships between in-game actions. Dependency graphs are one aspect of: * Manufacturing plant types: Raw materials are processed into products via several dependent stages. * Job shop scheduling: A collection of related theoretical problems in computer science.


See also

* Call graph *
Topological sort In computer science, a topological sort or topological ordering of a directed graph is a linear ordering of its vertices such that for every directed edge ''uv'' from vertex ''u'' to vertex ''v'', ''u'' comes before ''v'' in the ordering. For ins ...
* Data dependency


References

{{Reflist *Balmas, Francoise (2001)
Displaying dependence graphs: a hierarchical approach
'

wcre, p. 261, Eighth Working Conference on Reverse Engineering (WCRE'01) Directed graphs Application-specific graphs