Binäres Entscheidungsdiagramm

Ein binäres Entscheidungsdiagramm (BED; engl. binary decision diagram, BDD) ist eine Datenstruktur zur Repräsentation Boolescher Funktionen. Binäre Entscheidungsdiagramme werden vor allem im Bereich der Hardwaresynthese und -verifikation eingesetzt.

Ein BED kann als eine Art Flussdiagramm zur Auswertung einer Booleschen Funktion {\displaystyle f(x_{1},\ldots ,x_{n})} verstanden werden. Dabei wird nacheinander der Wert der Variablen x_{1}, x_{2}, ... abgefragt, mit den zwei Entscheidungsmöglichkeiten Wahr oder Falsch, welche jeweils in unterschiedliche Teilbereiche des Diagramms verzweigen. Als Ergebnis erhält man schließlich den Wert der Booleschen Funktion f unter der gewählten Variablenbelegung. Die Darstellung des Diagramms ist dabei weitestgehend komprimiert, so dass für das Ergebnis irrelevante Fragen ausgelassen und doppelte Teildiagramme zusammengelegt werden.

Definition

Ein binäres Entscheidungsdiagramm ist ein azyklischer, gerichteter Graph G=(V,E) mit einer Wurzel, so dass gilt

Solch ein BED heißt geordnet (Variablenordnung, OBDD), falls die Variablen auf allen von der Wurzel ausgehenden Pfaden in derselben Reihenfolge auftauchen.

Ein BED heißt reduziert (RBDD), falls die folgenden zwei Operationen erschöpfend angewendet wurden:

Der Begriff binäres Entscheidungsdiagramm, schließt dabei im Allgemeinen bereits die Forderungen nach Variablenordung und Reduktion mit ein. Der Vorteil dieser Eigenschaften ist, dass für jede Boolesche Funktion (bei fester Variablenordnung) genau ein reduziertes geordnetes BED existiert, d.h. es ist eine kanonische Darstellung der Booleschen Funktion (Bryant, 1986).

Durch die Shannon-Zerlegung kann die von einem binären Entscheidungsdiagramm dargestellte Boolesche Funktion berechnet werden. Sei v aus V ein Knoten des binären Entscheidungsdiagramms. Dann ist die von v dargestellte Funktion f_{v} definiert als

Beispiel

Darstellung eines BDDs

Dieses Bild stellt ein freies, geordnetes und reduziertes binäres Entscheidungsdiagramm dar. Dabei wird die niedrig-Kante eines Knotens gestrichelt und die hoch-Kante durchgezogen dargestellt. Die verwendete Variablenordnung ist x_{1}<x_{3}<x_{2}. Die dargestellte Funktion lässt sich folgendermaßen berechnen:

{\displaystyle f_{1}(x_{1},x_{2},x_{3})=0\cdot x_{2}\vee 1\cdot {\overline {x_{2}}}={\overline {x_{2}}}}
{\displaystyle f_{2}(x_{1},x_{2},x_{3})=f_{1}\cdot x_{3}\vee 1\cdot {\overline {x_{3}}}={\overline {x_{2}}}x_{3}\vee {\overline {x_{3}}}}
{\displaystyle f_{3}(x_{1},x_{2},x_{3})=0\cdot x_{3}\vee f_{1}\cdot {\overline {x_{3}}}={\overline {x_{2}}}\,{\overline {x_{3}}}}
{\displaystyle f_{4}(x_{1},x_{2},x_{3})=f_{2}\cdot x_{1}\vee f_{3}\cdot {\overline {x_{1}}}=x_{1}{\overline {x_{2}}}x_{3}\vee x_{1}{\overline {x_{3}}}\vee {\overline {x_{1}}}\,{\overline {x_{2}}}\,{\overline {x_{3}}}}

Wir können die dargestellte Funktion auch direkt für eine gegebene Variablenbelegung auswerten. Dazu muss lediglich dem Pfad, der zu der Belegung gehört, gefolgt werden, bis man ein Blatt erreicht. Der Wert dieses Blattes ist der Funktionswert für die gegebene Variablenbelegung.

Nehmen wir an, wir wollen für obiges Beispiel den Funktionswert für (x_{1},x_{2},x_{3})=(0,1,1) bestimmen. Wir beginnen an der Wurzel des binären Entscheidungsdiagramms. Dieser Knoten ist mit x_{1} beschriftet. Da in unserer Belegung x_{1}=0 ist, folgen wir der niedrig-Kante und erreichen einen Knoten, der mit x_{3} beschriftet ist. Es gilt x_{3}=1, also folgen wir der hoch-Kante und erreichen das Blatt mit der Beschriftung 0. Folglich gilt f(0,1,1)=0.

Variablenordnungen

Die Struktur und die Zahl der Knoten eines geordneten und reduzierten binären Entscheidungsdiagramms hängen bei vielen Funktionen stark von der gewählten Variablenordnung ab. Als Beispiel betrachten wir die Boolesche Funktion {\displaystyle f(x_{1},\ldots ,x_{2n})=x_{1}x_{2}\vee x_{3}x_{4}\vee \dots \vee x_{2n-1}x_{2n}}. Wählt man dafür die Variablenordnung x_{1}<x_{3}<\dots <x_{{2n-1}}<x_{2}<x_{4}<\dots <x_{{2n}}, so benötigt das binäre Entscheidungsdiagramm mehr als 2^{n} Knoten. Bei der Variablenordnung x_{1}<x_{2}<x_{3}<x_{4}<\dots <x_{{2n-1}}<x_{{2n}} genügen hingegen 2n Knoten.

Binäres Entscheidungsdiagramm für die Funktion {\displaystyle f(x_{1},...,x_{8})=}
{\displaystyle x_{1}x_{2}\vee x_{3}x_{4}\vee x_{5}x_{6}\vee x_{7}x_{8}} mit schlechter Variablenordnung
Gute Variablenordnung

Es gibt auch Funktionen, die unabhängig von der Variablenordnung exponentiell in Zahl der Variablen viele Knoten benötigen. Dazu gehören auch so wichtige Funktionen wie die Multiplikation. Deshalb wurden im Laufe der Jahre zahlreiche Varianten von binären Entscheidungsdiagrammen entwickelt, wie beispielsweise Kronecker Functional Decision Diagrams, Binary Moment Diagrams, Edge-valued Binary Decision Diagrams und zahlreiche andere.

Operationen auf binären Entscheidungsdiagrammen

Die Operationen, die normalerweise von allen Implementierungen zur Verfügung gestellt werden, sind zumindest die Booleschen Verknüpfungen Konjunktion (AND), Disjunktion (OR) und die Negation (NOT).

Die Negation kann durchgeführt werden, indem man das 0- und das 1-Blatt des binären Entscheidungsdiagramms vertauscht. Die übrigen zweistelligen Booleschen Operationen werden normalerweise auf einen speziellen ternären Operator, den sogenannten ITE-Operator zurückgeführt:

{\displaystyle \operatorname {ITE} (f,g,h)=(f\wedge g)\vee (\neg f\wedge h)}

Der Name ITE kommt von if-then-else: Wenn das Argument f gleich 1 ist, dann ist der Funktionswert von ITE gleich dem Funktionswert von g, ansonsten gleich dem von h.

Mit Hilfe von ITE können wir schreiben:

{\displaystyle f\wedge g=\operatorname {ITE} (f,g,0)}
{\displaystyle f\vee g=\operatorname {ITE} (f,1,g)}
{\displaystyle \neg f=\operatorname {ITE} (f,0,1)}

Man kann sich leicht davon überzeugen, dass sich alle 16 binären Booleschen Operationen mit Hilfe des ITE-Operators ausdrücken lassen. Es genügt folglich, eine Implementierung des ITE-Operators anzugeben.

Weitere wichtige Operationen sind beispielsweise:

Implementierungen

Literatur

Trenner
Basierend auf einem Artikel in: Wikipedia.de
Seitenende
Seite zurück
©  biancahoegel.de
Datum der letzten Änderung: Jena, den: 13.11. 2020