В информатике - диаграмма двоичных решений (BDD ) или программа ветвления - это структура данных, которая используется для представления логической функции. На более абстрактном уровне BDD можно рассматривать как сжатое представление наборов или отношений. В отличие от других сжатых представлений, операции выполняются непосредственно над сжатым представлением, то есть без декомпрессии. Другие структуры данных, используемые для представления логических функций, включают нормальную форму отрицания (NNF), многочлены Жегалкина и пропозиционально-ориентированные ациклические графики (PDAG).
Логическая функция может быть представлена в виде корневого, направленного, ациклического графа, который состоит из нескольких узлов принятия решений и конечных узлов. Есть два типа оконечных узлов, называемых 0-терминальными и 1-терминальными. Каждый узел решения помечен логической переменной и имеет два дочерних узла называют низким ребенком и высоким ребенком. Ребро от узла до нижнего (или верхнего) дочернего элемента представляет собой присвоение до 0 (соответственно 1). Такой BDD называется «упорядоченным», если разные переменные появляются в одном порядке на всех путях от корня. BDD называется «сокращенным», если к его графу были применены следующие два правила:
В популярном использовании термин BDD почти всегда относится к сокращенной упорядоченной двоичной диаграмме решений (ROBDD в литературе, используется, когда аспекты упорядочения и сокращения нужно подчеркнуть). Преимущество ROBDD в том, что он каноничен (уникален) для конкретной функции и порядка переменных. Это свойство делает его полезным при проверке функциональной эквивалентности и других операциях, таких как отображение функциональных технологий.
Путь от корневого узла до 1-терминала представляет собой (возможно, частичное) присвоение переменной, для которой представленная логическая функция истинна. Когда путь спускается к младшему (или высокому) дочернему элементу от узла, переменной этого узла присваивается значение 0 (соответственно 1).
На левом рисунке ниже показано двоичное дерево решений (правила сокращения не применяются) и таблицу истинности, каждая из которых представляет функция f (x1, x2, x3). В дереве слева значение функции можно определить для заданного присвоения переменной, пройдя путь вниз по графику к терминалу. На рисунках ниже пунктирные линии представляют края младшего дочернего элемента, а сплошные линии - края высокого дочернего элемента. Следовательно, чтобы найти (x1 = 0, x2 = 1, x3 = 1), начните с x1, проведите вниз по пунктирной линии до x2 (так как x1 имеет присвоение 0), затем вниз по двум сплошным линиям (поскольку x2 и x3 каждая есть задание к одному). Это приводит к выводу 1, который является значением f (x1 = 0, x2 = 1, x3 = 1).
Бинарное дерево решений на левом рисунке можно преобразовать в двоичную диаграмму решений, максимально уменьшив его в соответствии с двумя правилами редукции. Результирующий BDD показан на правом рисунке.
Двоичное дерево решений и таблица истинности для функции | BDD для функции f |
Основная идея, из которой структура была создана - это расширение Шеннона. Функция переключения разбивается на две подфункции (кофакторы) путем присвоения одной переменной (см. Нормальную форму if-then-else). Если такая подфункция рассматривается как поддерево, она может быть представлена как. Диаграммы двоичных решений (BDD) были введены Ли, а затем изучены и представлены Акерсом и Баутом.
Полный потенциал эффективных алгоритмов, основанных на структуре данных, был исследован Рэндалом Брайантом at Университет Карнеги-Меллона : его ключевые расширения должны были использовать фиксированный порядок переменных (для канонического представления) и общие подграфы (для сжатия). Применение этих двух концепций приводит к эффективной структуре данных и алгоритмам для представления множеств и отношений. Распространяя совместное использование на несколько BDD, т. Е. Один подграф используется несколькими BDD, определяется структура данных Shared Reduced Ordered Binary Decision Diagram. В настоящее время понятие BDD обычно используется для обозначения этой конкретной структуры данных.
В своей видеолекции «Развлечения с двоичными диаграммами решений» (BDD) Дональд Кнут называет BDD «одной из немногих действительно фундаментальных структур данных, появившихся за последние двадцать пять лет» и упоминает, что статья Брайанта 1986 года какое-то время была одной из самых цитируемых работ в области компьютерных наук.
и его сотрудники показали, что BDD являются одной из нескольких нормальных форм для булевых функций, каждая из которых вызвана различным сочетанием требований. Еще одна важная нормальная форма, определенная Дарвишем, - это DNNF.
BDD широко используются в программном обеспечении CAD для синтеза схем (логический синтез ) и в формальной верификации. Существует несколько менее известных приложений BDD, в том числе дерево отказов анализ, байесовское рассуждение, конфигурация продукта и поиск частной информации.
каждый произвольный BDD (даже если это не сокращается или не упорядочивается) могут быть напрямую реализованы аппаратно, заменяя каждый узел мультиплексором 2 к 1 ; каждый мультиплексор может быть напрямую реализован с помощью 4-LUT в FPGA. Не так-то просто преобразовать произвольную сеть логических вентилей в BDD (в отличие от и-инверторного графа ).
Размер BDD определяется как представляемой функцией, так и выбранным порядком переменных. Существуют булевы функции , для которых в зависимости от порядка переменных мы бы получили граф, количество узлов которого было бы линейным (по n) в лучшем случае и экспоненциальным в худшем случае (например, сумматор с переносом пульсации ). Рассмотрим булеву функцию Используя порядок переменных
BDD для функции ƒ (x 1,..., x 8) = x 1x2+ x 3x4+ x 5x6+ x 7x8использование неправильного порядка переменных | Хорошее упорядочение переменных |
При применении этой структуры данных на практике крайне важно позаботиться об упорядочивании переменных. Проблема поиска наилучшего порядка переменных - это NP-сложная. Для любой константы c>1 даже NP-сложно вычислить упорядочение переменных, приводящее к OBDD с размером, который не более чем в c раз больше оптимального. Однако существуют эффективные эвристики для решения этой проблемы.
Существуют функции, для которых размер графа всегда экспоненциальный - независимо от порядка переменных. Это имеет место, например, для функции умножения. Фактически, функция, вычисляющая средний бит произведения двух
Для клеточного автомата с простым поведением минимальный BDD обычно растет линейно на последовательных шагах. Для правила 254, например, это 8t + 2, а для правила 90 это 4t + 2. Для клеточных автоматов с более сложным поведением он обычно растет примерно по экспоненте. Таким образом, для правила 30 это {7, 14, 29, 60, 129}, а для правила 110 {7, 15, 27, 52, 88}. Размер минимального BDD может зависеть от порядка, в котором указаны переменные; таким образом, например, простое отражение правила 30 для правила 86 дает {6, 11, 20, 36, 63}.
Исследователи предложили усовершенствовать структуру данных BDD, уступив место ряду связанных графиков, таких как BMD (диаграммы двоичных моментов ), ZDD (диаграмма решений с подавлением нуля ), FDD (), PDD () и MTBDD (несколько терминальных BDD).
Многие логические операции с BDD могут быть реализованы с помощью алгоритмов полиномиального управления графами:
Однако повторение эти операции несколько раз, например формирование соединения или разъединения набора BDD, могут в худшем случае привести к экспоненциально большому BDD. Это связано с тем, что любая из предшествующих операций для двух BDD может привести к BDD с размером, пропорциональным произведению размеров BDD, и, следовательно, для нескольких BDD размер может быть экспоненциальным. Кроме того, поскольку построение BDD булевой функции решает NP-полную задачу логической выполнимости и совместную NP-полную проблему тавтологии, построение BDD может занять экспоненциальное время в размере булевой формулы, даже если результирующий BDD невелик.
Вычисление экзистенциальной абстракции над несколькими переменными сокращенных BDD является NP-полным.
Подсчет моделей, подсчет количества удовлетворяющих назначений булевой формулы, может выполняться за полиномиальное время для BDD. Для общих пропозициональных формул проблема является ♯P -завершенной, и наиболее известные алгоритмы требуют экспоненциального времени в худшем случае.
Викискладе есть медиафайлы, связанные с диаграммами двоичных решений. |