Граф зависимостей
Граф зависимостей — ориентированный граф, отображающий соотношение элементов некоторой совокупности в соответствии с выбранным транзитивным отношением над ней. Широко применяется в информатике и цифровой электронике, в частности, по графу зависимостей определяется порядок вычислений или его недостатки, согласованные с данными зависимостями в графе.
Содержание |
Определение [править]
Пусть дано множество объектов
и отношение транзитивности
где
, моделирующее зависимость «для вычисления
нужно сначала вычислить
», тогда граф зависимостей — это граф
где
и
является транзитивным замыканием
.
Например, некоторый калькулятор поддерживает запись константы в некоторую переменную и сложение двух переменных с записью результата в некоторую третью переменную. Пусть дано несколько выражений, например,
. Тогда
и
. Можно явно вывести все отношения:
зависит
и
, потому что две переменные можно складывать тогда и только тогда, когда известны значения обеих переменных. Таким образом,
и
должны быть вычислены перед
. Однако, значение
известно сразу, потому что это числовая константа.
Обнаружение невозможных вычислений [править]
Циклические зависимости в графе зависимостей приводят к ситуации, в которой нет доступного порядка вычислений, потому что ни один из объектов цикла не может считаться первым. Если циклических зависимостей нет, то мы имеем направленный ациклический граф, и порядок вычислений может быть определен с помощью топологической сортировки. Большинство алгоритмов топологической сортировки способны обнаруживать циклы на входе, однако, желательно обнаруживать циклы отдельно от топологической сортировки.
В примере на основе калькулятора, вычислительная система
содержит циклическую зависимость.
должно быть вычислено до
,
должно быть вычислено до
,
должно быть вычислено до
.
Определение порядка вычислений [править]
Корректный порядок вычислений — это нумерация
объектов, которая упорядочивает узлы графа зависимостей так, что имеет место равенство:
, где
. Это означает, что если нумераций определяется, что а вычисляется перед
, то а не может зависеть от
. Более того, может существовать более одного корректного порядка вычислений. По сути, корректная нумерация является топологической сортировкой, и любая топологическая сортировка является корректной нумерацией. На самом деле, любой алгоритм, производящий корректную топологическую сортировку, одновременно определяет корректный порядок вычисления.
Для системы (в примере с калькулятором)
корректный порядок:
, однако,
также является корректным порядком вычислений.
Примеры [править]
Граф зависимостей используется в:
- Автоматизированной установке программного обеспечения. Происходит движение по графу в поисках пакетов программ, которые нужны, но ещё не установлены. Зависимости определяются связанностью пакетов.
- В компиляторах и формальных языках:
-
- Планирование инструкций. Граф зависимостей вычисляется для операндов ассемблера или промежуточных инструкций и используется для определения оптимального порядка инструкций.
- Удаление мёртвого кода.
Графы зависимости это один из вопросов:
- Теории ограничений. Исходные данные перерабатываются в результирующие в ходе нескольких зависимых этапов.
- Планирования. Набор взаимосвязанных теоретических проблем в области компьютерных наук.
См. также [править]
Литература [править]
- Balmas, Francoise (2001) Displaying dependence graphs: a hierarchical approach, [1] wcre, p. 261, Eighth Working Conference on Reverse Engineering (WCRE’01)
