|
|
Line 1: |
Line 1: |
| {{inline citations|date=June 2013}}
| | Friends contact him Royal Seyler. Bookkeeping is what I do for a residing. I currently reside in Alabama. To play croquet is something that I've carried out for many years.<br><br>Have a look at my website ... [http://Valkyrjagc.org/index.php?mod=users&action=view&id=14605 valkyrjagc.org] |
| In [[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 ==
| |
| [[File:Dependencygraph.png|right]]
| |
| Given a set of objects S and a [[transitive relation]] <math>R \subseteq S \times S</math> with <math>(a,b) \in R</math> modeling a dependency "a needs b evaluated first", the dependency graph is a graph <math>G = (S, T)</math> with <math>T \subseteq R</math> and R being the [[transitive closure]] of T.
| |
| | |
| For example, assume a simple calculator. This calculator supports assignment of constant values to variables and assigning the sum of exactly 2 variables to a third variable. Given several equations like "''A'' = ''B''+''C''; ''B'' = 5+''D''; ''C''=4; ''D''=2;", then <math>S={A,B,C,D}</math> and <math>R={(A,B),(A,C),(B,D)}</math>. 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'' and ''C'' must be calculated before ''A'' can be calculated. However, ''D'''s value is known immediately, because it is a number literal.
| |
| | |
| == 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 (graph theory)|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 <math> n : S \rightarrow \mathbb{N}</math> of the objects that form the nodes of the dependency graph so that the following equation holds: <math> n(a) < n(b) \Rightarrow (a, b) \notin R </math> with <math> a, b \in S</math>. 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. Furthermore, there can be more than a single correct evaluation order.
| |
| In fact, a correct numbering is a [[Topological sorting|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.
| |
| | |
| ==Examples==
| |
| Dependency graphs are used in:
| |
| * Automated software [[installer]]s. They walk the graph looking for [[Software package (installation)|software packages]] that are required but not yet installed. The dependency is given by the [[coupling (computer science)|coupling]] of the packages.
| |
| * Software build scripts such as [[Unix]] Make, [[Node.js|Node]] npm install, [[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|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.
| |
| * 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.
| |
| | |
| Dependency graphs are one aspect of:
| |
| * [[Theory_of_Constraints#Plant_types|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]]
| |
| * [[Data dependency]]
| |
| * [[Incremental computing]]
| |
| | |
| ==References==
| |
| *Balmas, Francoise (2001) ''[http://www.ai.univ-paris8.fr/~fb/version-ps/pdep.ps Displaying dependence graphs: a hierarchical approach],'' [http://doi.ieeecomputersociety.org/10.1109/WCRE.2001.957830] wcre, p. 261, Eighth Working Conference on Reverse Engineering (WCRE'01)
| |
| | |
| [[Category:Incremental computing]]
| |
| [[Category:Directed graphs]]
| |
| [[Category:Application-specific graphs]]
| |
Friends contact him Royal Seyler. Bookkeeping is what I do for a residing. I currently reside in Alabama. To play croquet is something that I've carried out for many years.
Have a look at my website ... valkyrjagc.org