Граф зависи́мостей — ориентированный граф, отображающий соотношение множества элементов некоторой совокупности в соответствии с выбранным транзитивным отношением над ней.

Этот граф часто применяется в информатике и цифровой электронике, в частности, по графу зависимостей определяется порядок вычислений или его недостатки, согласованные с данными зависимостями в графе.

Определение

править
 

Пусть дано множество объектов   и отношение транзитивности   где  , моделирующее зависимость «для вычисления   нужно сначала вычислить  », тогда граф зависимостей — это граф   где   и   является транзитивным замыканием  .

Например, некоторый калькулятор поддерживает запись константы в некоторую переменную и сложение двух переменных с записью результата в некоторую третью переменную. Пусть дано несколько выражений, например,  . Тогда   и  . Можно явно вывести все отношения:   зависит от   и  , потому что две переменные можно складывать тогда и только тогда, когда известны значения обеих переменных. Таким образом,   и   должны быть вычислены перед  . Однако, значение   известно сразу, потому что это числовая константа.

Обнаружение невозможных вычислений

править

Циклические зависимости в графе зависимостей приводят к ситуации, в которой нет доступного порядка вычислений, потому что ни один из объектов цикла не может считаться первым. Если циклических зависимостей нет, то мы имеем направленный ациклический граф, и порядок вычислений может быть определен с помощью топологической сортировки. Большинство алгоритмов топологической сортировки способны обнаруживать циклы на входе, однако, желательно обнаруживать циклы отдельно от топологической сортировки.

В примере на основе калькулятора, вычислительная система   содержит циклическую зависимость.   должно быть вычислено до  ,   должно быть вычислено до  ,   должно быть вычислено до  .

Определение порядка вычислений

править

Корректный порядок вычислений — это нумерация   объектов, которая упорядочивает узлы графа зависимостей так, что имеет место равенство:  , где  . Это означает, что если нумераций определяется, что   вычисляется перед  , то   не может зависеть от  . Более того, может существовать более одного корректного порядка вычислений. По сути, корректная нумерация является топологической сортировкой, и любая топологическая сортировка является корректной нумерацией. На самом деле, любой алгоритм, производящий корректную топологическую сортировку, одновременно определяет корректный порядок вычисления.

Для системы (в примере с калькулятором)   корректный порядок:  , однако,   также является корректным порядком вычислений.

Примеры

править

Граф зависимостей используется в:

  • Планирование инструкций. Граф зависимостей вычисляется для операндов ассемблера или промежуточных инструкций и используется для определения оптимального порядка инструкций.
  • Удаление мёртвого кода.

Графы зависимости это один из вопросов:

  • Теории ограничений. Исходные данные перерабатываются в результирующие в ходе нескольких зависимых этапов.
  • Планирования. Набор взаимосвязанных теоретических проблем в области компьютерных наук.

См. также

править

Примечания

править
  1. Например, в утилитах make

Литература

править

Ссылки

править