Граф зависимостейГраф зависи́мостей — ориентированный граф, отображающий соотношение множества элементов некоторой совокупности в соответствии с выбранным транзитивным отношением над ней. Этот граф часто применяется в информатике и цифровой электронике, в частности, по графу зависимостей определяется порядок вычислений или его недостатки, согласованные с данными зависимостями в графе. ОпределениеПусть дано множество объектов и отношение транзитивности где , моделирующее зависимость «для вычисления нужно сначала вычислить », тогда граф зависимостей — это граф где и является транзитивным замыканием . Например, некоторый калькулятор поддерживает запись константы в некоторую переменную и сложение двух переменных с записью результата в некоторую третью переменную. Пусть дано несколько выражений, например, . Тогда и . Можно явно вывести все отношения: зависит от и , потому что две переменные можно складывать тогда и только тогда, когда известны значения обеих переменных. Таким образом, и должны быть вычислены перед . Однако, значение известно сразу, потому что это числовая константа. Обнаружение невозможных вычисленийЦиклические зависимости в графе зависимостей приводят к ситуации, в которой нет доступного порядка вычислений, потому что ни один из объектов цикла не может считаться первым. Если циклических зависимостей нет, то мы имеем направленный ациклический граф, и порядок вычислений может быть определен с помощью топологической сортировки. Большинство алгоритмов топологической сортировки способны обнаруживать циклы на входе, однако, желательно обнаруживать циклы отдельно от топологической сортировки. В примере на основе калькулятора, вычислительная система содержит циклическую зависимость. должно быть вычислено до , должно быть вычислено до , должно быть вычислено до . Определение порядка вычисленийКорректный порядок вычислений — это нумерация объектов, которая упорядочивает узлы графа зависимостей так, что имеет место равенство: , где . Это означает, что если нумераций определяется, что вычисляется перед , то не может зависеть от . Более того, может существовать более одного корректного порядка вычислений. По сути, корректная нумерация является топологической сортировкой, и любая топологическая сортировка является корректной нумерацией. На самом деле, любой алгоритм, производящий корректную топологическую сортировку, одновременно определяет корректный порядок вычисления. Для системы (в примере с калькулятором) корректный порядок: , однако, также является корректным порядком вычислений. ПримерыГраф зависимостей используется в:
Графы зависимости это один из вопросов:
См. такжеПримечанияЛитература
Ссылки
|