Участник:AKA MBG/Направленный ациклический граф

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Student 1. User:Owlunacy
Топологический порядок направленного ациклического графа: каждое ребро идет от предыдущего по порядку (верхний левый угол) к следующему (нижний правый угол). Направленный граф ациклический, если и только если у него есть топологический порядок.

В математике и информатике, направленный ациклический граф (DAG) — это конечный направленный граф без направленных циклов. Таким образом, он состоит из конечного числа вершин и ребер с концами, направленными от одной вершины к другой, такого, что невозможно начать в любой вершине v и идти за последовательно направленными ребрами, что в конечном счете снова приведет к v. Другими словами, DAG — направленный граф, у которого есть топологическое назначение, последовательность вершин которого, подбирается таким образом, что каждое ребро упорядоченно направлено от одной вершины к другой.

Направленные ациклические графы могут использоваться для моделирования многих различных видов информации. Для достижения зависимости в DAG формируется частичное упорядочивание. PERT использует DAG, чтобы смоделировать этапы и задачи больших проектов, составить график этих проектов для экономии времени. Планирование компьютерных операций, таких как обновления электронной таблицы или операции по компиляции в утилите может выполняться с применением топологического упорядочивания DAG. Комбинационные логические блоки в дизайне электронной схемы и операции на языках программирования потока информации, включают ациклические сети обработки элементов. DAG может также представлять коллекции событий и их влияния друг на друга, либо в вероятностной структуре, такой, как Байесовская сеть или отчет исторических данных, таких, как родословные или интерпретации распределенных систем управления ревизией. DAG могут также использоваться в качестве компактного представления данных о последовательности, таких как направленный ациклический словесный граф, представляющий коллекции последовательностей или представление бинарной схемы принятия решений последовательностей двойного выбора.

Важные полиномиальные вычислительные задачи на DAG включают топологическую сортировку (топологическое упорядочивание), построение транзитивных сокращений и транзитивных замыканий и задачу связи, цель которой состоит в том, чтобы найти подмножество с минимальным весом вершин графа без ребер, соединяющих их с остальной частью графа. Преобразование направленного графа с циклами в DAG, с удалением как можно меньшего числа вершин или ребер — это NP-полная задача, но любой направленный граф может быть превращен в DAG (уменьшением объёма), посредством сокращения каждого сильно связанного компонента в одну «супервершину». Проблемы нахождения кратчайших путей и самых длинных путей могут быть решены на DAG в линейное время, в отличие от произвольных графов, для которых алгоритмы нахождения кратчайшего пути работают медленнее, а нахождение самых длинных путей является NP-полной задачей.

Соответствующее понятие для ненаправленных графов — лес, ненаправленный граф без циклов. Выбор ориентации для леса образует специальный вид направленного ациклического графа, названного «полидеревом». Однако, есть много других видов направленного ациклического графа, у которых не сформированы ориентиры ребер ненаправленного ациклического графа. Кроме того, у каждого ненаправленного графа есть ациклическая ориентация и назначение направления для его ребер, которое превращает его в направленный ациклический граф. Чтобы подчеркнуть отличие DAG от направленных версий ненаправленных ациклических графов, некоторые авторы называют их ациклическими направленными графами[1] или ациклическими диграфами.[2]

Определения[править | править код]

Student 2. User:Remediassance

Граф — это совокупность непустого множества вершин и ребер, в котором вершины представляют собой попарно соединенные ребрами объекты, не имеющие структуры[источник не указан 2771 день]. В случае ориентированного графа (орграфа), каждое ребро имеет направленную связь от одной вершины к другой. Путем в ориентированном графе называется последовательность вершин, имеющая для каждой вершины ребро, соединяющее её со следующей вершиной в последовательности. Путь является циклом, если совпадают его начальная и конечная вершины. Направленным ациклическим графом называется ориентированный граф, не имеющий циклов.[1][2][3]

Добавление красных ребер к синему ориентированному ациклическому графу создает новый ОАГ, транзитивное замыкание синего графа. Для каждого красного или синего ребра uv, v достижимо из u: существует синий путь, берущий начало в u и заканчивающийся в v.

Вершина v ориентированного графа достижима из вершины u, если есть путь, начинающийся в u и заканчивающийся в v. Следовательно, любая вершина достижима из самой себя (путем из 0 ребер). Если в вершину можно попасть нетривиальным путем (содержащим хотя бы одно ребро), тогда этот путь является циклом. Таким образом, сущестует другое определение направленного ациклического графа — это граф, в котором ни одна вершина не может достичь саму себя нетривиальным путем.[4]

Топологическая сортировка ориентированного графа — это расположение его вершин в форме последовательности, такой, что для каждого ребра начальная вершина ребра встречается в последовательности раньше, чем конечная вершина ребра. Граф, у которого есть топологическая сортировка, не может иметь циклов, потому что ребро, связанное с самой первой вершиной в цикле, должно бы было быть направлено не в ту сторону. Таким образом, каждый граф с топологической сортировкой ациклический. И напротив, каждый ориентированный ациклический граф имеет топологическую сортировку. Таким образом, это свойство может быть использовано как альтернативное определение ориентированных ациклических графов: это именно те графы, которые имеют топологические сортировки.[2]

Mathematical properties[править | править код]

Reachability, transitive closure, and transitive reduction[править | править код]

Student 3. User:Remediassance

The reachability relationship in any directed acyclic graph can be formalized as a partial order on the vertices of the DAG. In this partial order, two vertices u and v are ordered as uv exactly when there exists a directed path from u to v in the DAG; that is, when v is reachable from u.[5] However, different DAGs may give rise to the same reachability relation and the same partial order.[6] For example, the DAG with two edges ab and bc has the same reachability relation as the graph with three edges ab, bc, and ac. Both of these DAGS produce the same partial order, in which the vertices are ordered as abc.

If G is a DAG, its transitive closure is the graph with the most edges that represents the same reachability relation. It has an edge uv whenever u can reach v. That is, it has an edge for every related pair u ≤ v of distinct elements in the reachability relation of G, and may therefore be thought of as a direct translation of the reachability relation into graph-theoretic terms. The same method of translating partial orders into DAGs works more generally: for every finite partially ordered set (S, ≤), the graph that has a vertex for each member of S and an edge for each pair of elements related by u ≤ v is automatically a transitively closed DAG, and has (S, ≤) as its reachability relation. In this way, every finite partially ordered set can be represented as the reachability relation of a DAG.


The transitive reduction of a DAG G is the graph with the fewest edges that represents the same reachability relation as G. It is a subgraph of G, formed by discarding the edges uv for which G also contains a longer path connecting the same two vertices. Like the transitive closure, the transitive reduction is uniquely defined for DAGs. In contrast, for a directed graph that is not acyclic, there can be more than one minimal subgraph with the same reachability relation.[7]

A Hasse diagram representing the partial order of set inclusion (⊆) among the subsets of a three-element set.

If a DAG G has a reachability relation described by the partial order , then the transitive reduction of G is a subgraph of G that has an edge uv for every pair in the covering relation of . Transitive reductions are useful in visualizing the partial orders they represent, because they have fewer edges than other graphs representing the same orders and therefore lead to simpler graph drawings. A Hasse diagram of a partial order is a drawing of the transitive reduction in which the orientation of each edge is shown by placing the starting vertex of the edge in a lower position than its ending vertex.[8]

Топологическая сортировка[править | править код]

Student 4. User:Remediassance

Каждый ориентированный ациклический граф имеет топологическую сортировку, сортировку вершин, такую, что начальная вершина каждого ребра встречается в сортировке раньше, чем конечная вершина ребра. Существование такой сортировки может быть использовано, чтобы охарактеризовать ОАГ: ориентированный граф является ОАГ тогда и только тогда, когда у него есть топологическая сортировка. В общем случае, эта сортировка не уникальна; ОАГ имеет уникальную топологическую сортировку тогда и только тогда, когда в нём есть ориентированный путь, содержащий все вершины, в случае чего сортировка совпадает с порядком, в котором вершины появляются в этом пути.[9]

Семейство топологических сортировок ОАГ такое же, как и семейство линейных расширений отношения достижимости для ОАГ[10], так что любые два графа, в одинаковой степени частично упорядоченные, имеют одинаковое множество топологических порядков.

Комбинаторное перечисление[править | править код]

Student 5. User:Sergei.podkopaev

Задача перечисления графов?!, а точнее, задача о подсчёте всех возможных направленных графов без циклов изучалась Робинсоном (Robinson (1973)).[11] Количество ориентированных ациклических графов из n помеченных вершин, для n = 0, 1, 2, 3, … (без ограничений на порядок, в котором эти числа появляются в топологически отсортированном DAG)

1, 1, 3, 25, 543, 29281, 3781503, … последовательность A003024 в OEIS.

Эти числа могут быть вычислены по рекуррентной формуле

[11].

Эрик В. Вайстайн предположил[12], и МакКей (McKay et al. (2004)) доказал, что эти же числа посчитанные бинарной матрицей для которых все собственные векторы — положительные вещественные числа. Биективное доказательство?!: матрица A — матрица смежности DAG тогда и только тогда, когда A + I — бинарная матрица со всеми положительными собственными значениями, где I обозначает единичную матрицу. Так как DAG не может иметь петель, то матрица смежности должна содержать нули на главной диагонали, таким образом, добавление I сохраняет свойство, что все коэффициенты матрицы равны либо 0 либо 1[13].

Related families of graphs[править | править код]

Student 6. User:Sergei.podkopaev


A polytree is a directed graph formed by orienting the edges of a free tree.[14] Every polytree is a DAG. In particular, this is true of the arborescences formed by directing all edges outwards from the roots of a tree.

A multitree (also called a strongly unambiguous graph or a mangrove) is a directed graph in which there is at most one directed path (in either direction) between any two vertices; equivalently, it is a DAG in which, for every vertex v, the subgraph reachable from v forms a tree.[15]

Computational problems[править | править код]

Topological sorting and recognition[править | править код]

Student 7. User:Sergei.podkopaev

Topological sorting is the algorithmic problem of finding a topological ordering of a given DAG. It can be solved in linear time.[16] Kahn’s algorithm for topological sorting builds the vertex ordering directly. It maintains a list of vertices that have no incoming edges from other vertices that have not already been included in the partially constructed topological ordering; initially this list consists of the vertices with no incoming edges at all. Then, it repeatedly adds one vertex from this list to the end of the partially constructed topological ordering, and checks whether its neighbors should be added to the list. The algorithm terminates when all vertices have been processed in this way.[17] Alternatively, a topological ordering may be constructed by reversing a postorder numbering of a depth-first search graph traversal.[16]

It is also possible to check whether a given directed graph is a DAG in linear time, either by attempting to find a topological ordering and then testing for each edge whether the resulting ordering is valid[18] or alternatively, for some topological sorting algorithms, by verifying that the algorithm successfully orders all the vertices without meeting an error condition.[17]

Construction from cyclic graphs[править | править код]

Student 8. User:kanphis

Any undirected graph may be made into a DAG by choosing a total order for its vertices and directing every edge from the earlier endpoint in the order to the later endpoint. The resulting orientation of the edges is called an acyclic orientation. Different total orders may lead to the same acyclic orientation, so an n-vertex graph can have fewer than n! acyclic orientations. The number of acyclic orientations is equal to |χ(−1)|, where χ is the chromatic polynomial of the given graph.[19]

The yellow directed acyclic graph is the condensation of the blue directed graph. It is formed by contracting each strongly connected component of the blue graph into a single yellow vertex.

Any directed graph may be made into a DAG by removing a feedback vertex set or a feedback arc set, a set of vertices or edges (respectively) that touches all cycles. However, the smallest such set is NP-hard to find.[20] An arbitrary directed graph may also be transformed into a DAG, called its condensation, by contracting each of its strongly connected components into a single supervertex.[21] When the graph is already acyclic, its smallest feedback vertex sets and feedback arc sets are empty, and its condensation is the graph itself.

Transitive closure and transitive reduction[править | править код]

Student 9. User:kanphis

The transitive closure of a given DAG, with n vertices and m edges, may be constructed in time O(mn) by using either breadth-first search or depth-first search to test reachability from each vertex.[22] Alternatively, it can be solved in time O(nω) where ω < 2.373 is the exponent for fast matrix multiplication algorithms; this is a theoretical improvement over the O(mn) bound for dense graphs.[23]

In all of these transitive closure algorithms, it is possible to distinguish pairs of vertices that are reachable by at least one path of length two or more from pairs that can only be connected by a length-one path. The transitive reduction consists of the edges that form length-one paths that are the only paths connecting their endpoints. Therefore, the transitive reduction can be constructed in the same asymptotic time bounds as the transitive closure.[24]

Closure problem[править | править код]

Student 10. User:username

The closure problem takes as input a directed acyclic graph with weights on its vertices and seeks the minimum (or maximum) weight of a closure, a set of vertices with no outgoing edges. (The problem may be formulated for directed graphs without the assumption of acyclicity, but with no greater generality, because in this case it is equivalent to the same problem on the condensation of the graph.) It may be solved in polynomial time using a reduction to the maximum flow problem.[25]

Path algorithms[править | править код]

Some algorithms become simpler when used on DAGs instead of general graphs, based on the principle of topological ordering. For example, it is possible to find shortest paths and longest paths from a given starting vertex in DAGs in linear time by processing the vertices in a topological order, and calculating the path length for each vertex to be the minimum or maximum length obtained via any of its incoming edges.[26] In contrast, for arbitrary graphs the shortest path may require slower algorithms such as Dijkstra's algorithm or the Bellman–Ford algorithm,[27] and longest paths in arbitrary graphs are NP-hard to find.[28]

Applications[править | править код]

Scheduling[править | править код]

Student 11. User:username

Directed acyclic graphs representations of partial orderings have many applications in scheduling for systems of tasks with ordering constraints.[29] An important class of problems of this type concern collections of objects that need to be updated, such as the cells of a spreadsheet after one of the cells has been changed, or the object files of a piece of computer software after its source code has been changed. In this context, a dependency graph is a graph that has a vertex for each object to be updated, and an edge connecting two objects whenever one of them needs to be updated earlier than the other. A cycle in this graph is called a circular dependency, and is generally not allowed, because there would be no way to consistently schedule the tasks involved in the cycle. Dependency graphs without circular dependencies form DAGs.[30]

For instance, when one cell of a spreadsheet changes, it is necessary to recalculate the values of other cells that depend directly or indirectly on the changed cell. For this problem, the tasks to be scheduled are the recalculations of the values of individual cells of the spreadsheet. Dependencies arise when an expression in one cell uses a value from another cell. In such a case, the value that is used must be recalculated earlier than the expression that uses it. Topologically ordering the dependency graph, and using this topological order to schedule the cell updates, allows the whole spreadsheet to be updated with only a single evaluation per cell.[31] Similar problems of task ordering arise in makefiles for program compilation[31] and instruction scheduling for low-level computer program optimization.[32]

PERT chart for a project with five milestones (labeled 10-50) and six tasks (labeled A-F). There are two critical paths, ADF and BC.

A somewhat different DAG-based formulation of scheduling constraints is used by the program evaluation and review technique (PERT), a method for management of large human projects that was one of the first applications of DAGs. In this method, the vertices of a DAG represent milestones of a project rather than specific tasks to be performed. Instead, a task or activity is represented by an edge of a DAG, connecting two milestones that mark the beginning and completion of the task. Each such edge is labeled with an estimate for the amount of time that it will take a team of workers to perform the task. The longest path in this DAG represents the critical path of the project, the one that controls the total time for the project. Individual milestones can be scheduled according to the lengths of the longest paths ending at their vertices.[33]

Сети обработки данных[править | править код]

Student 12. User:Bonch-Bonch

Направленный ациклический граф может быть использован для представления сети обрабатывающих элементов. В этом представлении данные поступают в обрабатывающий элемент через свои входящие ребра и покидают элемент через исходящие ребра.

Например, в электронной схеме, статические комбинационные логические блоки могут быть представлены в виде ациклической системы логических вентилей, которые вычисляют функцию входа. Вход и выход функции представлены как отдельные биты. В общем, выход из этих блоков не может быть использован в качестве входного сигнала, если он не захватывается регистром или запоминающимся элементом, который сохраняет свои ациклические свойства.[34] Электронные контурные схемы на бумаге или в базе данных являются одной из форм направленных ациклических графов с использованием экземпляров или компонентов для формирования направленной ссылки на более низком уровне компонента. Сами электронные схемы не обязательно являются ациклическими или направленными.

Языки программирования DataFlow описывают системы операций на потоках данных, а также соединения между выходами некоторых операций и входами других. Эти языки могут быть удобны для описания повторяющихся задач обработки данных, в которых тот же ациклически соединенный набор операций применяется ко многим видам элементов данных. Они могут быть выполнены в виде параллельного алгоритма, в котором каждая операция выполняется параллельным процессом, как только ещё один набор входов становится доступным для него.[35]

В компиляторах, прямолинейный код (то есть последовательность операторов без петель или условных ветвей) может быть представлен в группе DAG с описанием входов и выходов каждого из арифметических операций, выполняемых в коде. Это представление позволяет компилятору эффективно выполнять удаление общих подвыражений.[36]

Causal structures[править | править код]

Student 13. User:username

Graphs in which vertices represent events occurring at a definite time, and where the edges are always point from the early time vertex to a late time vertex of the edge, are necessarily directed and acyclic. The lack of a cycle follows because the time associated with a vertex always increases as you follow any path in the graph so you can never return to a vertex on a path. This reflects our natural intuition that causality means events can only affect the future, they never affect the past, and thus we have no causal loops. An example of this type of directed acyclic graph are those encountered in the causal set approach to quantum gravity though in this case the graphs considered are transitively complete. The version history example, each version of the software is associated with a unique time, typically the time the version was saved, committed or released. For citation graphs, the documents are published at one time and can only refer to older documents.

Sometimes events are not associated with a specific physical time. Provided that pairs of events have a purely causal relationship, that is edges represent represent causal relations between the events, we will have a directed acyclic graph.[37] For instance, a Bayesian network represents a system of probabilistic events as vertices in a directed acyclic graph, in which the likelihood of an event may be calculated from the likelihoods of its predecessors in the DAG.[38] In this context, the moral graph of a DAG is the undirected graph created by adding an (undirected) edge between all parents of the same vertex (sometimes called marrying), and then replacing all directed edges by undirected edges.[39] Another type of graph with a similar causal structure is an influence diagram, the vertices of which represent either decisions to be made or unknown information, and the edges of which represent causal influences from one vertex to another.[40] In epidemiology, for instance, these diagrams are often used to estimate the expected value of different choices for intervention.[41][42]

The converse is also true. That is in any application represented by a directed acyclic graph there is a causal structure, either an explicit order or time in the example or an order can be derived from the which can be derived from graph structure. This follows because all directed acyclic graphs have a topological ordering, i.e. there is at least one way to put the vertices in an order such that all edges point in the same direction along that order.

Genealogy and version history[править | править код]

Student 14. User:username
Family tree of the Ptolemaic dynasty, with many marriages between close relatives causing pedigree collapse

Family trees may be seen as directed acyclic graphs, with a vertex for each family member and an edge for each parent-child relationship.[43] Despite the name, these graphs are not necessarily trees because of the possibility of marriages between relatives (so a child has a common ancestor on both the mother’s and father’s side) causing pedigree collapse.[44] The graphs of matrilineal descent («mother» relationships between women) and patrilineal descent («father» relationships between men) are trees within this graph. Because no one can become their own ancestor, family trees are acyclic.[45]

For the same reason, the version history of a distributed revision control system generally has the structure of a directed acyclic graph, in which there is a vertex for each revision and an edge connecting pairs of revisions that were directly derived from each other. These are not trees in general due to merges.[46]

In many randomized algorithms in computational geometry, the algorithm maintains a history DAG representing the version history of a geometric structure over the course of a sequence of changes to the structure. For instance in a randomized incremental algorithm for Delaunay triangulation, the triangulation changes by replacing one triangle by three smaller triangles when each point is added, and by «flip» operations that replace pairs of triangles by a different pair of triangles. The history DAG for this algorithm has a vertex for each triangle constructed as part of the algorithm, and edges from each triangle to the two or three other triangles that replace it. This structure allows point location queries to be answered efficiently: to find the location of a query point q in the Delaunay triangulation, follow a path in the history DAG, at each step moving to the replacement triangle that contains q. The final triangle reached in this path must be the Delaunay triangle that contains q.[47]

Citation graphs[править | править код]

Student 15. User:Bonch-Bonch

In a citation graph the vertices are documents with a single publication date. The edges represent the citations from the bibliography of one document to other necessarily earlier documents. The classic example comes from the citations between academic papers as pointed out in the 1965 article «Networks of Scientific Papers»[48] by Derek J. de Solla Price. In this case the citation count of a paper is just the in-degree of the corresponding vertex of the citation network. This is an important measure in citation analysis. Court judgements provide another example as judges support their conclusions in one case by recalling other earlier decisions made in previous cases. A final example is provided by patents which must refer to earlier prior art, earlier patents which are relevant to the current patent claim. By taking the special properties of directed acyclic graphs into account, one can analyse these graphs with techniques not available when analysing the general graphs considered in many studies in network analysis. For instance transitive reduction gives a new insights into the citation distributions found in different applications highlighting clear differences in the mechanisms creating citations networks in different contexts.[49]

Сжатие данных[править | править код]

Student 16. User:kanphis

Также направленный ациклический граф можно использовать для компактного представления коллекции последовательностей. В этой задаче нужно построить такой DAG, чтобы пути в нём соответствовали заданным последовательностям. Если у многих последовательностей есть общие подпоследовательности, то в DAG им соответствуют общие вершины и ребра. При таком подходе представление коллекции последовательностей в виде DAG занимает меньше места, чем полный список всех последовательностей.

С помощью DAG можно также представить и префиксное дерево. Узлы помечаются буквами, и пути от корней до листьев представляют одно слово или строку[50]. Пути для слов с одинаковыми приставками, корнями или суффиксами в своем представлении могут пересекаться, то есть, использовать одни и те же вершины и ребра для одинаковых частей слов[51].

Та же идея представления в DAG семейства путей использована в бинарной диаграмме решений[52][53], форме представления булевых функций. В бинарной диаграмме решений каждая не конечная вершина помечена названием бинарной переменной, а каждое ребро помечены числами 0 или 1 — значениями соответствующих переменных. Листы помечены числами 0 или 1 — значениями функции при значениях переменных при пути от корня до листа. Так же, как и в случае с префиксным деревом, бинарную диаграмму решений можно рассматривать как сжатую форму представления дерева принятия решений[54], так как пути в них могут сходиться и расходиться.

References[править | править код]

  1. 1 2 Thulasiraman, K.; Swamy, M. N. S. (1992), "5.7 Acyclic Directed Graphs", Graphs: Theory and Algorithms, John Wiley and Son, p. 118, ISBN 978-0-471-51356-8.
  2. 1 2 3 Bang-Jensen, Jørgen (2008), "2.1 Acyclic Digraphs", Digraphs: Theory, Algorithms and Applications, Springer Monographs in Mathematics (2nd ed.), Springer-Verlag, pp. 32—34, ISBN 978-1-84800-997-4.
  3. Christofides, Nicos (1975), Graph theory: an algorithmic approach, Academic Press, pp. 170—174.
  4. Mitrani, I. (1982), Simulation Techniques for Discrete Event Systems, Cambridge Computer Science Texts, vol. 14, Cambridge University Press, p. 27, ISBN 9780521282826.
  5. Kozen, Dexter (1992), The Design and Analysis of Algorithms, Monographs in Computer Science, Springer, p. 9, ISBN 978-0-387-97687-7.
  6. Banerjee, Utpal (1993), "Exercise 2(c)", Loop Transformations for Restructuring Compilers: The Foundations, Springer, p. 19, ISBN 978-0-7923-9318-4.
  7. Bang-Jensen, Jørgen; Gutin, Gregory Z. (2008), "2.3 Transitive Digraphs, Transitive Closures and Reductions", Digraphs: Theory, Algorithms and Applications, Springer Monographs in Mathematics, Springer, pp. 36—39, ISBN 978-1-84800-998-1.
  8. Jungnickel, Dieter (2012), Graphs, Networks and Algorithms, Algorithms and Computation in Mathematics, vol. 5, Springer, pp. 92—93, ISBN 978-3-642-32278-5.
  9. Sedgewick, Robert; Wayne, Kevin (2011), "4,2,25 Unique topological ordering", Algorithms (4th ed.), Addison-Wesley, pp. 598—599, ISBN 978-0-13-276256-4.
  10. Bender, Edward A.; Williamson, S. Gill (2005), "Example 26 (Linear extensions – topological sorts)", A Short Course in Discrete Mathematics, Dover Books on Computer Science, Courier Dover Publications, p. 142, ISBN 978-0-486-43946-4.
  11. 1 2 Robinson, R. W. (1973), "Counting labeled acyclic digraphs", in Harary, F. (ed.), New Directions in the Theory of Graphs, Academic Press, pp. 239—273. See also Harary, Frank; Palmer, Edgar M. (1973), Graphical Enumeration, Academic Press, p. 19, ISBN 0-12-324245-2.
  12. Weisstein, Eric W. Weisstein's Conjecture (англ.) на сайте Wolfram MathWorld.
  13. McKay, B. D.; Royle, G. F.; Wanless, I. M.; Oggier, F. E.; Sloane, N. J. A.; Wilf, H. (2004), "Acyclic digraphs and eigenvalues of (0,1)-matrices", Journal of Integer Sequences, 7, Article 04.3.3.
  14. Rebane, George; Pearl, Judea (1987), "The recovery of causal poly-trees from statistical data", in Proc. 3rd Annual Conference on Uncertainty in Artificial Intelligence (UAI 1987), Seattle, WA, USA, July 1987 (PDF), pp. 222—228.
  15. Furnas, George W.; Zacks, Jeff (1994), "Multitrees: enriching and reusing hierarchical structure", Proc. SIGCHI conference on Human Factors in Computing Systems (CHI '94), pp. 330—336, doi:10.1145/191666.191778.
  16. 1 2 Шаблон:Introduction to Algorithms Section 22.4, Topological sort, pp. 549—552.
  17. 1 2 Jungnickel (2012), pp. 50-51.
  18. For depth-first search based topological sorting algorithm, this validity check can be interleaved with the topological sorting algorithm itself; see e.g. Skiena, Steven S. (2009), The Algorithm Design Manual, Springer, pp. 179—181, ISBN 978-1-84800-070-4.
  19. Stanley, Richard P. (1973), "Acyclic orientations of graphs", Discrete Mathematics, 5 (2): 171—178, doi:10.1016/0012-365X(73)90108-8.
  20. Шаблон:Garey-Johnson, Problems GT7 and GT8, pp. 191—192.
  21. Harary, Frank; Norman, Robert Z.; Cartwright, Dorwin (1965), Structural Models: An Introduction to the Theory of Directed Graphs, John Wiley & Sons, p. 63.
  22. Skiena (2009), p. 495.
  23. Skiena (2009), p. 496.
  24. Bang-Jensen & Gutin (2008), p. 38.
  25. Picard, Jean-Claude (1976), "Maximal closure of a graph and applications to combinatorial problems", Management Science, 22 (11): 1268—1272, doi:10.1287/mnsc.22.11.1268, MR 0403596.
  26. Cormen et al. 2001, Section 24.2, Single-source shortest paths in directed acyclic graphs, pp. 592—595.
  27. Cormen et al. 2001, Sections 24.1, The Bellman-Ford algorithm, pp. 588—592, and 24.3, Dijkstra’s algorithm, pp. 595—601.
  28. Cormen et al. 2001, p. 966.
  29. Skiena (2009), p. 469.
  30. Al-Mutawa, H. A.; Dietrich, J.; Marsland, S.; McCartin, C. (2014), "On the shape of circular dependencies in Java programs", 23rd Australian Software Engineering Conference, IEEE, pp. 48—57, doi:10.1109/ASWEC.2014.15.
  31. 1 2 Gross, Jonathan L.; Yellen, Jay; Zhang, Ping (2013), Handbook of Graph Theory (2nd ed.), CRC Press, p. 1181, ISBN 978-1-4398-8018-0.
  32. Srikant, Y. N.; Shankar, Priti (2007), The Compiler Design Handbook: Optimizations and Machine Code Generation (2nd ed.), CRC Press, pp. 19—39, ISBN 978-1-4200-4383-9.
  33. Wang, John X. (2002), What Every Engineer Should Know About Decision Making Under Uncertainty, CRC Press, p. 160, ISBN 978-0-8247-4373-4.
  34. Sapatnekar, Sachin (2004), Timing, Springer, p. 133, ISBN 978-1-4020-7671-8.
  35. Dennis, Jack B. (1974), "First version of a data flow procedure language", Programming Symposium, Lecture Notes in Computer Science, vol. 19, pp. 362—376, doi:10.1007/3-540-06859-7_145.
  36. Touati, Sid; de Dinechin, Benoit (2014), Advanced Backend Optimization, John Wiley & Sons, p. 123, ISBN 978-1-118-64894-0.
  37. Gopnik, Alison; Schulz, Laura (2007), Causal Learning, Oxford University Press, p. 4, ISBN 978-0-19-803928-0.
  38. Shmulevich, Ilya; Dougherty, Edward R. (2010), Probabilistic Boolean Networks: The Modeling and Control of Gene Regulatory Networks, Society for Industrial and Applied Mathematics, p. 58, ISBN 978-0-89871-692-4.
  39. Cowell, Robert G.; Dawid, A. Philip; Lauritzen, Steffen L.; Spiegelhalter, David J. (1999), "3.2.1 Moralization", Probabilistic Networks and Expert Systems, Springer, pp. 31—33, ISBN 0-387-98767-3.
  40. Dorf, Richard C. (1998), The Technology Management Handbook, CRC Press, p. 9-7, ISBN 978-0-8493-8577-3.
  41. Boslaugh, Sarah (2008), Encyclopedia of Epidemiology, Volume 1, SAGE, p. 255, ISBN 978-1-4129-2816-8.
  42. Pearl, Judea (1995). "Causal diagrams for empirical research". Biometrika. 82 (4): 669—709. doi:10.1093/biomet/82.4.669.
  43. Kirkpatrick, Bonnie B. (April 2011), "Haplotypes versus genotypes on pedigrees", Algorithms for Molecular Biology, 6 (10), doi:10.1186/1748-7188-6-10, PMC 3102622, PMID 21504603{{citation}}: Википедия:Обслуживание CS1 (не помеченный открытым DOI) (ссылка).
  44. McGuffin, M. J.; Balakrishnan, R. (2005), "Interactive visualization of genealogical graphs" (PDF), IEEE Symposium on Information Visualization (INFOVIS 2005), pp. 16—23, doi:10.1109/INFVIS.2005.1532124.
  45. Bender, Michael A.; Pemmasani, Giridhar; Skiena, Steven; Sumazin, Pavel (2001), "Finding least common ancestors in directed acyclic graphs", Proceedings of the Twelfth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA '01), Philadelphia, PA, USA: Society for Industrial and Applied Mathematics, pp. 845—854, ISBN 0-89871-490-7.
  46. Bartlang, Udo (2010), Architecture and Methods for Flexible Content Management in Peer-to-Peer Systems, Springer, p. 59, ISBN 978-3-8348-9645-2.
  47. Pach, János; Sharir, Micha, Combinatorial Geometry and Its Algorithmic Applications: The Alcalá Lectures, Mathematical surveys and monographs, vol. 152, American Mathematical Society, pp. 93—94, ISBN 978-0-8218-7533-9.
  48. Derek J. de Solla Price (July 30, 1965). "Networks of Scientific Papers" (PDF). Science. 149 (3683): 510—515. doi:10.1126/science.149.3683.510. PMID 14325149.
  49. James R Clough, Jamie Gollings, Tamar V Loach, Tim S Evans. "Transitive reduction of citation networks" (PDF). Journal of Complex Networks. 3 (2): 189—203. doi:10.1093/comnet/cnu039.{{cite journal}}: Википедия:Обслуживание CS1 (множественные имена: authors list) (ссылка)
  50. Crochemore, Maxime; Vérin, Renaud (1997), "Direct construction of compact directed acyclic word graphs", Combinatorial Pattern Matching, Lecture Notes in Computer Science, Springer, pp. 116—129, doi:10.1007/3-540-63220-4_55.
  51. Lothaire, M. (2005), Applied Combinatorics on Words, Encyclopedia of Mathematics and its Applications, vol. 105, Cambridge University Press, p. 18, ISBN 9780521848022.
  52. Lee, C. Y. (1959), "Representation of switching circuits by binary-decision programs", Bell System Technical Journal, 38: 985—999, doi:10.1002/j.1538-7305.1959.tb01585.x.
  53. Akers, Sheldon B. (1978), "Binary decision diagrams", IEEE Transactions on Computers, C-27 (6): 509—516, doi:10.1109/TC.1978.1675141.
  54. Friedman, S. J.; Supowit, K. J. (1987), "Finding the optimal variable ordering for binary decision diagrams", Proc. 24th ACM/IEEE Design Automation Conference (DAC '87), New York, NY, USA: ACM, pp. 348—356, doi:10.1145/37888.37941, ISBN 0-8186-0781-5.

External links[править | править код]


Категория:Теория графов Категория:Структуры данных