В математике , информатике и цифровой электронике граф зависимостей — это направленный граф, представляющий зависимости нескольких объектов друг от друга. Из графа зависимостей можно вывести порядок оценки или отсутствие порядка оценки, который учитывает заданные зависимости.
Определение
При наличии набора объектов и транзитивного отношения с моделированием зависимости « a зависит от b » (« a требует , чтобы b был оценен в первую очередь») граф зависимости представляет собой граф с транзитивным сокращением R.
Например, предположим, что есть простой калькулятор. Этот калькулятор поддерживает назначение постоянных значений переменным и назначение суммы ровно двух переменных третьей переменной. Дано несколько уравнений типа " A = B + C ; B = 5+ D ; C =4; D =2;", тогда и . Вы можете вывести это соотношение напрямую: A зависит от B и C , потому что вы можете добавить две переменные тогда и только тогда, когда вы знаете значения обеих переменных. Таким образом, B должно быть вычислено до того, как можно будет вычислить A. Поскольку B зависит от D для вычисления, A также должно зависеть от D для вычисления до него (отсюда и транзитивное свойство, указанное выше). С другой стороны, значения C и D известны немедленно, потому что они являются числовыми литералами.
Признание невозможных оценок
В графе зависимостей циклы зависимостей (также называемые циклическими зависимостями ) приводят к ситуации, в которой не существует допустимого порядка оценки, поскольку ни один из объектов в цикле не может быть оценен первым. Если граф зависимостей не имеет циклических зависимостей, он образует направленный ациклический граф , и порядок оценки может быть найден с помощью топологической сортировки . Большинство алгоритмов топологической сортировки также способны обнаруживать циклы во входных данных; однако может быть желательно выполнять обнаружение циклов отдельно от топологической сортировки, чтобы обеспечить соответствующую обработку обнаруженных циклов.
Предположим, что у нас есть простой калькулятор из предыдущего примера. Система уравнений " A = B ; B = D + C ; C = D + A ; D =12;" содержит циклическую зависимость, образованную A , B и C , так как B должно быть вычислено до A , C должно быть вычислено до B , а A должно быть вычислено до C.
Вывод порядка оценки
Правильный порядок оценки — это нумерация объектов, образующих узлы графа зависимостей, так что выполняется следующее уравнение: с . Это означает, что если нумерация упорядочивает два элемента и так, что будет оценено до , то не должно зависеть от .
Может быть более одного правильного порядка оценки. Фактически, правильная нумерация — это топологический порядок , а любой топологический порядок — это правильная нумерация. Таким образом, любой алгоритм, который выводит правильный топологический порядок, выводит правильный порядок оценки.
Предположим, что простой калькулятор из предыдущего примера еще раз. Учитывая систему уравнений " A = B + C ; B = 5+ D ; C =4; D =2;", правильный порядок оценки будет ( D , C , B , A ). Однако, ( C , D , B , A ) также является правильным порядком оценки.
Моноидная структура
Ациклический граф зависимостей соответствует трассе моноида трассы следующим образом: [1] : 12
Функция помечает каждую вершину символом из алфавита
Скрипты сборки программного обеспечения, такие как Unix Make , Node npm install , php composer , Twitter bower install или Apache Ant . Им нужно знать, какие файлы были изменены, поэтому перекомпилировать нужно только правильные файлы.
Планирование инструкций : графы зависимостей вычисляются для операндов ассемблерных или промежуточных инструкций и используются для определения оптимального порядка инструкций.
Устранение мертвого кода : если от переменной не зависит ни одна побочная операция, эта переменная считается мертвой и может быть удалена.
Динамическая аналитика графов: GraphBolt [2] и KickStarter [3] фиксируют зависимости значений для инкрементных вычислений при изменении структуры графа.
Калькуляторы электронных таблиц . Им необходимо вывести правильный порядок вычислений, аналогичный тому, что приведен в примере, использованном в этой статье.
Стандарты веб-форм, такие как XForms, позволяют узнать, какие визуальные элементы следует обновить при изменении данных в модели.
Видеоигры, особенно головоломки и приключенческие видеоигры , которые часто разрабатываются как график зависимых отношений между игровыми действиями. [4]
^ ab Mazurkiewicz, Antoni (1995). "Введение в теорию следов" (PDF) . В Rozenberg, G.; Diekert, V. (ред.). Книга следов . Singapore: World Scientific. ISBN 981-02-2058-8. Получено 18 апреля 2021 г. .
^ Мугилан Мариаппан; Кевал Вора (2019). «GraphBolt: синхронная обработка потоковых графов на основе зависимостей». На Европейской конференции по компьютерным системам (EuroSys'19) . стр. 25:1–25:16. doi :10.1145/3302424.3303974.
^ Кевал Вора; Раджив Гупта; Гоцин Сюй (2017). «KickStarter: быстрые и точные вычисления на потоковых графах с помощью урезанных аппроксимаций». В Международной конференции по архитектурной поддержке языков программирования и операционных систем (ASPLOS'17) . стр. 237–251. doi : 10.1145/3093337.3037748 .
^ Гилберт, Рон. «Схемы зависимости головоломок». Grumpy Gamer . Получено 11 января 2020 г.
Бальмас, Франсуаза (2001) Отображение графиков зависимости: иерархический подход Архивировано 11.02.2012 в Wayback Machine , [1] wcre, стр. 261, Восьмая рабочая конференция по обратному проектированию (WCRE'01)