Бінарна діаграма рішень
Бінарна діаграма рішень (англ. Binary decision diagram) або програма розгалуження — це структура даних в інформатиці, яка використовується для представлення булевої функції. На більш абстрактному рівні, БДР можна розглядати як стиснене представлення множин або відношень. На відміну від інших стиснених представлень, операції виконуються безпосередньо на стислому представлені, тобто без декомпресії. Інші структури даних, які використовуються для представлення булевої функції включають в себе заперечення нормальної форми, пропозіціональний орієнтований ациклічний граф.
Визначення
Булева функція може бути представлена у вигляді орієнтованого ациклічного графа, який складається з декількох вузлів рішень і термінальних вузлів. Існують два типи кінцевих вузлів: 0-термінал і 1-термінал. Кожен вузол рішень позначений булевою (логічною) змінною і має два дочірніх вузли з назвою нижній дочірній та верхній дочірній. Ребро з вузла до нижнього (або верхнього) дочірнього вузла являє собою відповідність нулю (або 1). Така БДР називається «впорядкованою», якщо різні змінні з'являються в тому ж порядку на всіх шляхах від кореня. БДР називають скороченою, якщо наступні два правила вже були застосовані до його графу:
- Злиті будь-які ізоморфні підграфи.
- Вилучено будь-який вузол, у якого обидва нащадки ізоморфні.
У більшості випадків під бінарною діаграмою рішень розуміють саме скорочену впорядковану бінарну діаграму рішень (СВБДР). Перевага скороченої впорядкованої БДР в тому, що вона є канонічною (єдиною) для конкретної функції і заданого порядку змінних[1]. Ця властивість робить СУБДР корисною для перевірки функціональної еквівалентності.
Шлях від кореня до 1-терміналу представляє (можливо частково) набори змінних, для яких задана булева функція приймає значення «істина». Як шлях прямує від кореня до нижнього або верхнього нащадка, так і змінна у вузлі ставиться у відповідність 0 або 1.
Приклад
На малюнку ліворуч зображене бінарне дерево прийняття рішень (без застосування правил скорочення), відповідне наведеної на цьому ж малюнку таблиці істинності для булевої функції . Для заданих вхідних значень , , можна визначити значення логічної функції, рухаючись по дереву від кореневого вузла дерева до термінальних вузлів, вибираючи напрямок переходу з вузла залежно від вхідного значення . Пунктирними лініями на малюнку зображені переходи до молодшого нащадку, а безперервними лініями зображені переходи до старшого нащадку. Наприклад, якщо задано вхідні значення (, , ), то з кореневого вузла необхідно перейти по пунктирній лінії ліворуч (оскільки значення дорівнює 0), після цього необхідно перейти по безперервним лініям праворуч (так як значення та дорівнюють 1). У результаті ми опинимося в 1-термінальному вузлі, тобто значення дорівнює 1.
Бінарне дерево прийняття рішень на малюнку ліворуч можна перетворити в бінарну діаграму рішень шляхом застосування двох правил скорочення. БДР, яка буде отримана після скорочення, зображена на малюнку праворуч.
Історія
Основною ідеєю для створення такої структури даних послужило розкладання Шеннона. Будь-яку булеву функцію по одній з вхідних змінних можна розділити на дві підфункції, званих позитивним і негативним доповненням, з яких за принципом if-then-else вибирається тільки одна підфункція залежно від значення вхідної змінної (за якою виконувалося розкладання Шеннона). Представляючи кожну таку підфункцію у вигляді піддерева і продовжуючи розкладання по решті вхідних змінних, можна отримати дерево прийняття рішень, скорочення якого дасть бінарну діаграму рішень. Інформація про використання бінарних діаграм рішень або бінарних розгалужених програм була вперше опублікована в 1959 році в технічному журналі «Bell Systems Technical Journal»[2],[3],[4]
Потенціал для створення ефективних алгоритмів, заснованих на використанні цієї структури даних, досліджував Randal Bryant з університету Карнегі — Меллон: його підхід полягав у використанні фіксованого порядку змінних (для однозначності канонічного представлення кожної булевої функції) і повторного використання загальних підграфів (для компактності). Застосування цих двох ключових концепцій дозволяє підвищити ефективність структур даних і алгоритмів для представлення множин і відносин між ними.[5][6] Використання декількома БДР загальних підграфів призвело до появи такої структури даних, як розділювана скорочена впорядкована бінарна діаграма рішень (Shared Reduced Ordered Binary Decision Diagram).ї.[7] Назва БДР тепер в основному використовується для цієї конкретної структури даних.
Дональд Кнут в своїй відеолекції Fun With Binary Decision Diagrams (BDDs) назвав бінарні діаграми рішень «однією з дійсно фундаментальних структур даних, які з'явилися за останні двадцять п'ять років» і зазначив, що публікація Randal Bryant від 1986, яка освітила використання бінарних діаграм рішень для маніпуляції над булевими функціями, була деякий час найбільш цитованою публікацією в комп'ютерній науці.
Застосування
БДР широко використовуються в системах автоматизованого проектування (САПР) для синтезу логічних схем і у формальній верифікації.
В електроніці кожна конкретна БДР (навіть не скорочена і не впорядкована) може бути безпосередньо реалізована заміною кожного вузла на мультиплексор з двома входами і одним виходом.
Порядок змінних
Розмір БДР визначається як булевої функцією, так і вибором порядку вхідних змінних. При складанні графа для булевої функції кількість вузлів у найкращому випадку може лінійно залежати від , а в найгіршому випадку залежність може бути експоненційною при невдалому виборі порядку вхідних змінних. Наприклад, дана булева функція . Якщо використовувати порядок змінних , то знадобиться 2 n + 1 вузлів для представлення функції у вигляді БДР. Ілюструє БДР для функції від 8 змінних зображена на малюнку зліва. А якщо використовувати порядок , то можна отримати еквівалентну БДР з 2n + 2 вузлів. Ілюстрована БДР для функції від 8 змінних зображена на малюнку праворуч.
Вибір порядку змінних є критично важливим при використанні таких структур даних на практиці. Проблема знаходження найкращого порядку змінних є NP-складним завданням.[8] Більш того, NP-складним є навіть завдання знаходження субоптимального порядку змінних, при якому для будь константи c > 1 розмір БДР не більше ніж в c раз більше оптимального.[9] Однак існують ефективні евристичні методи для вирішення цієї проблеми.
Крім того, існують такі функції, для яких розмір графа завжди зростає експоненціально з ростом числа змінних, незалежно від порядку змінних. Це відноситься до функцій множення, що вказує на явну складність факторизації.
Дослідження бінарних діаграм рішень привели до появи безлічі суміжних видів графів, таких, як BMD (Binary Moment Diagrams), ZDD (Zero Suppressed Decision Diagram), FDD (Free Binary Decision Diagrams), PDD (Parity decision Diagrams), і MTBDDs (Multiple terminal BDDs).
Логічні операції над БДР
Багато логічних операцій можуть бути виконані безпосередньо над БДР за допомогою алгоритмів, що виконують маніпуляції над графами за поліноміальний час.
- кон'юнкція
- диз'юнкція
- заперечення
- екзистенціальна абстракція
- універсальна абстракція
Однак повторення цих операцій безліч разів, наприклад, при формуванні кон'юнкцій або диз'юнкцій набору БДР, можуть призвести до експоненціально великого БДР в гіршому випадку. Це відбувається через те, що результатом будь-яких попередніх операцій над двома БДР в загальному випадку може бути БДР з розміром, пропорційним добутку попередніх розмірів, тому для декількох БДР розмір може збільшуватися експоненціально.
Примітки
- Graph-Based Algorithms for Boolean Function Manipulation, Randal E. Bryant, 1986
- C. Y. Lee.
- Sheldon B. Akers.
- Raymond T. Boute, «The Binary Decision Machine as a programmable controller».
- Randal E. Bryant.
- R. E. Bryant, «Symbolic Boolean Manipulation with Ordered Binary Decision Diagrams», ACM Computing Surveys, Vol. 24, No. 3 (September, 1992), pp. 293–318.
- Karl S. Brace, Richard L. Rudell and Randal E. Bryant.
- Beate Bollig, Ingo Wegener. Improving the Variable Ordering of OBDDs Is NP-Complete, IEEE Transactions on Computers, 45(9):993-1002, September 1996.
- Detlef Sieling. «The nonapproximability of OBDD minimization.» Information and Computation 172, 103–138. 2002.
Рекомендована література
- D. E. Knuth, «The Art of Computer Programming Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams» (Addison-Wesley Professional, March 27, 2009) viii+260pp, ISBN 0-321-58050-8. Draft of Fascicle 1b available for download.
- H. R. Andersen «An Introduction to Binary Decision Diagrams,» Lecture Notes, 1999, IT University of Copenhagen.
- Ch. Meinel, T. Theobald, «Algorithms and Data Structures in VLSI-Design: OBDD — Foundations and Applications», Springer-Verlag, Berlin, Heidelberg, New York, 1998. Complete textbook available for download.
- Rüdiger Ebendt; Görschwin Fey; Rolf Drechsler (2005). Advanced BDD optimization. Springer. ISBN 978-0-387-25453-1.
- Bernd Becker; Rolf Drechsler (1998). Binary Decision Diagrams: Theory and Implementation. Springer. ISBN 978-1-4419-5047-5.
Посилання
- ABCD: The ABCD package by Armin Biere, Johannes Kepler Universität, Linz.
- CMU BDD, BDD package, Carnegie Mellon University, Pittsburgh
- CUDD: BDD package, University of Colorado, Boulder
- Installing CUDD in Windows/Visual Studio environments.
- Biddy: multi-platform academic BDD package, University of Maribor, Slovenia
- JavaBDD, a Java port of BuDDy that also interfaces to CUDD, CAL, and JDD
- The Berkeley CAL package which does breadth-first manipulation
- A. Costa BFunc Архівовано 12 липня 2012 у Wayback Machine., includes a BDD boolean logic simplifier supporting up to 32 inputs / 32 outputs (independently)
- DDD: A C++ library with support for integer valued and hierarchical decision diagrams.
- JINC: A C++ library developed at University of Bonn, Germany, supporting several BDD variants and multi-threading.