Rechnerstrukturen WS 2012/13 ◮ Boolesche Funktionen und Schaltnetze ◮ Repräsentationen boolescher Funktionen (Wiederholung) ◮ Normalformen boolescher Funktionen (Wiederholung) ◮ Repräsentation boolescher Funktionen mit OBDDs ◮ Synthese von OBDDs für boolesche Funktionen ◮ Schaltnetze Hinweis: Folien teilweise a. d. Basis von Materialien von Thomas Jansen Fink Rechnerstrukturen ¶·º» Boole. Fkt. 23. Oktober 2012 1 Repräsentationen boolescher Funktionen Definition 4 Seien n, m ∈ N. Eine Funktion f : B n → B m heißt boolesche Funktion. Notation B n = Menge aller n-stelligen Tupel über B Beispiel B 2 = {(0, 0), (0, 1), (1, 0), (1, 1)} Anzahl boolescher Funktionen boolesche Funktion f : B n → B m als Wertetabelle darstellbar mit |B n | = 2n Zeilen und |B m | = 2m Möglichkeiten je Zeile ⇒ 2m 2n Beispiel Fink Rechnerstrukturen n = 2m·2 boolesche Funktionen f : B n → B m 2 21·2 = 24 = 16 boolesche Funktionen f : B 2 → B ¶·º» Boole. Fkt. 2 Alle booleschen Funktionen f : B 2 → B x y f1 f2 f3 f4 f5 f6 f7 f8 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 Nullfkt. AND 0 ∧ Proj. x Proj. XOR OR y ⊕ ∨ x y f9 f10 f11 f12 f13 f14 f15 f16 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 NOR Äquiv. Negation Negation Impl. NAND Einsfkt. ⇔ ¬y ¬x ⇒ 1 Verwenden im Weiteren ∧ (Konjunktion), ∨ (Disjunktion), ¯ (Negation) Fink Rechnerstrukturen ¶·º» Boole. Fkt. 3 Darstellung boolescher Funktionen gerade gesehen x 0 0 1 1 y 0 1 0 1 Wertetabelle (Orientierung meistens wie hier) f7 0 1 1 0 bei fester Reihenfolge Wertevektor f7 : (0, 1, 1, 0) Fink Rechnerstrukturen ¶·º» Boole. Fkt. 4 Index und Minterm Index 0 1 2 3 x 0 0 1 1 y 0 1 0 1 f7 0 1 1 0 nicht einschlägig einschlägig einschlägig nicht einschlägig Definition Die boolesche Funktion, für die nur der Index i einschlägig ist, heißt Minterm zum Index i . Ein Minterm ist nur mit Negationen und Konjunktionen darstellbar: ( 0 xj xj = 1 xj und dann Konjunktion all dieser Literale (= ˆ [negierte] Variable) Fink Rechnerstrukturen ¶·º» Boole. Fkt. 5 Normalformen Definition 8 ◮ Die Darstellung von f als Disjunktion all ihrer Minterme zu einschlägigen Indizes heißt disjunktive Normalform (DNF). ◮ Die Darstellung von f als XOR-Verknüpfung all ihrer Minterme zu einschlägigen Indizes heißt Ringsummen-Normalform (RNF). Anmerkung Normalformen sind eindeutig. Index x y 0 0 0 Beispiel 1 0 1 2 1 0 3 1 1 DNF von f7 x y ∨ x y Fink Rechnerstrukturen f7 0 1 1 0 Minterm xy xy xy xy RNF von f7 ¶·º» Boole. Fkt. xy ⊕xy 6 Funktionale Vollständigkeit Beobachtung jede boolesche Funktion f : B n → B nur mittels Konjunktion, Disjunktion und Negation darstellbar (z. B. durch ihre DNF) Definition 5 Eine Menge F von booleschen Funktionen heißt funktional vollständig, wenn sich jede boolesche Funktion durch Einsetzen und Komposition von Funktionen aus F darstellen lässt. Satz 6 {∧, ∨, ¬} ist funktional vollständig. Fink Rechnerstrukturen ¶·º» Boole. Fkt. 7 Darstellungen boolescher Funktionen Wozu stellt man boolesche Funktionen dar? ◮ Realisierung ◮ Verifikation ◮ Fehleranalyse ◮ Synthese ◮ ... Wo stellt man boolesche Funktionen dar? ◮ auf dem Papier ◮ im Computer Probleme ◮ Wertetabelle, Wertevektor immer groß ◮ Normalformen oft groß ◮ Normalformen unterstützen gewünschte Operationen kaum Fink Rechnerstrukturen Wunsch ¶·º» andere Repräsentation Boole. Fkt. 8 Eine Datenstruktur für boolesche Funktionen Ziel f : B n → B darstellen Wünsche ◮ zu einer Belegung x1 , x2 , . . . , xn schnell den Funktionswert f (x1 , x2 , . . . , xn ) ausrechnen können ◮ Funktionen schnell auf Gleichheit testen können ◮ Funktionen schnell manipulieren (z. B. eine Variable konstant setzen) können ◮ schnell eine Null-Eingabe/eine Eins-Eingabe finden können ◮ Funktionen möglichst klein repräsentieren ◮ ... Ordered Binary Decision Diagrams Fink Rechnerstrukturen ¶·º» Boole. Fkt. 9 OBDDs erster Schritt dann ◮ ◮ ◮ ◮ ◮ ◮ Festlegen einer Variablenordnung π (z. B. π = (x3 , x1 , x2 , x4 )) x4 1 Baue πOBDD aus Knoten oder 1 x3 x2 nach folgenden Regeln: und Kanten Knoten mit Variablen, 0 oder 1 markiert Kanten mit 0 oder 1 markiert Variablen-Knoten mit je einer ausgehenden 0- und 1-Kante Konstanten-Knoten ohne ausgehende Kante genau ein Knoten ohne eingehende Kante Kanten zwischen Variablenknoten beachten π Fink Rechnerstrukturen ¶·º» Boole. Fkt. 10 πOBDD – Ein Beispiel Variablenordnung π = (x1 , x2 , x3 ) Beispiel Auswertung f (1, 0, 1) x1 = 1, x2 = 0, x3 = 1 f (1, 0, 1) = 1 x1 0 1 x2 x2 0 1 x3 0 Fink Rechnerstrukturen 1 0 x3 1 x3 1 0 1 0 0 0 0 1 ¶·º» x3 1 0 1 1 1 1 Boole. Fkt. 11 πOBDD-Größe gleichartige Senken verschmelzen x1 0 1 x2 x2 0 1 x3 1 x3 0 Fink Rechnerstrukturen 0 0 1 1 x3 x3 0 1 0 ¶·º» 1 Boole. Fkt. 0 1 12 πOBDD-Größe gleichartige Knoten verschmelzen x1 0 1 x2 x2 0 1 x3 1 x3 0 Fink Rechnerstrukturen 0 0 1 1 x3 0 1 0 ¶·º» 1 Boole. Fkt. 13 πOBDD-Größe Knoten ohne Einfluss eliminieren x1 0 1 x2 x2 0 1 x3 1 1 x3 0 Fink Rechnerstrukturen 0 0 1 0 ¶·º» 1 Boole. Fkt. 14 πOBDD-Größe Knoten ohne Einfluss eliminieren x1 0 1 x2 0 1 x3 1 x3 0 Fink Rechnerstrukturen 0 1 0 ¶·º» 1 Boole. Fkt. 15 πOBDD-Größe Knoten ohne Einfluss eliminieren x1 0 1 x2 0 Größe minimal 1 x3 1 0 Fink Rechnerstrukturen 0 ¶·º» 1 Boole. Fkt. 16 Alternative Darstellung eines πOBDDs x1 x2 x3 Fink Rechnerstrukturen 0 ¶·º» 1 Boole. Fkt. 17 OBDD-Reduzierung Satz 9 Die erschöpfende Anwendung der ◮ Verschmelzungsregel Knoten mit gleicher Markierung und ” gleichen Nachfolgern können verschmolzen werden“ und ◮ Eliminationsregel Ein Knoten mit gleichem Null- und ” Einsnachfolger kann entfernt werden“ in beliebiger Reihenfolge führt zum reduzierten πOBDD. reduziert = minimale Größe und eindeutig Fink Rechnerstrukturen ¶·º» Boole. Fkt. 18 Erzeugung von OBDDs Wie kommt man zu einem πOBDD? für f : B n → B? Kommt darauf an, wie f gegeben ist. . . Welche Formate kennen wir? ◮ Funktionstabelle ◮ Wertevektor ◮ boolescher Ausdruck ◮ Normalformen ◮ informale Beschreibung ◮ OBDD ◮ ... Fink Rechnerstrukturen ¶·º» Boole. Fkt. 19 Erzeugung von OBDDs Man will nicht irgendein πOBDD, man will das reduzierte πOBDD. Welchen Weg kennen wir, das zu bekommen? 1. Erstelle vollständigen binären Baum über den Variablen, schreibe passende Funktionswerte an die Senken. 2. Reduziere. Ist das ein vernünftiges Vorgehen? Nur, wenn vollständiger Binärbaum nicht wesentlich größer als Eingabe und reduziertes πOBDD! Fink Rechnerstrukturen ¶·º» Boole. Fkt. 20 πOBDD aus vollständigem Binärbaum Variablenordnung π = (x1 , x2 , x3 ) x1 0 1 x2 x2 0 1 x3 0 Fink Rechnerstrukturen 1 0 x3 1 x3 1 0 1 0 0 0 0 1 ¶·º» x3 1 0 1 1 1 1 Boole. Fkt. 21 Größe von Repräsentationen boolescher Funktionen Wie groß ist ein πOBDD für f , das vollständiger Binärbaum ist? i -te Ebene 2i −1 Knoten n−1 n P i P 2 = 2n − 1 + Senken 2i −1 = Senken + Senken + Beobachtung also i =0 i =1 Für welche Eingabeformate ist das also akzeptabel? sicher nur für Wertetabelle und Wertevektor also Vorgehen fast immer nicht akzeptabel Erkenntnis Fink Rechnerstrukturen Wir brauchen eine Alternative. ¶·º» Boole. Fkt. 22 Schrittweise OBDD-Konstruktion Idee baue πOBDD schrittweise aus einfachsten“ πOBDDs zusammen ” 0 klar πOBDD für Nullfunktion 1 klar πOBDD für Einsfunktion 0 klar πOBDD für xi 0 xi 1 1 klar πOBDD für ¬f aus πOBDD für f durch Invertierung der Senkenmarkierungen ¶ · º » Boole. Fkt. Fink Rechnerstrukturen 23 OBDD-Synthese πOBDD G1 für f1 : B n → B πOBDD G2 für f2 : B n → B πOBDD G für f1 ⊗ f2 für beliebige boolesche Funktion ⊗ : B 2 → B Wichtig Idee gleiche Variablenordnung π Durchlaufe beide πOBDDs parallel. Fink Rechnerstrukturen ¶·º» Boole. Fkt. 24 Ein einfaches Beispiel x4 1 x4 1 0 0 x1 2 0 0 3 x4 ∨ x4 x1 1 x1 2 1 1 0 0 x4 (1,1) x1 (2,2) 1 0 1 1 4 0 3 1 1 4 0 (3,3) 1 (4,3) (x4 ∨ x4 x1 ) ⊕ (x4 x1 ) = x4 x4 x1 Variablenordnung x4 , x2 , x1 , x3 boolesche Verknüpfung ⊕ Fink Rechnerstrukturen ¶·º» Boole. Fkt. 25 πOBDD-Synthese πOBDD G1 für f1 : B n → B πOBDD G2 für f2 : B n → B πOBDD G für f1 ⊗ f2 für beliebige boolesche Funktion ⊗ : B 2 → B G1 hat Knoten v1 , v2 , . . . , vs1 . G2 hat Knoten w1 , w2 , . . . , ws2 . Wir starten in Wurzeln v1 und w1 . Mit dem aktuellen Knotenpaar machen wir einen Synthese-Schritt. Ergebnis des Synthese-Schritts: 1 Knoten des Ergebnis-πOBDD. Fink Rechnerstrukturen ¶·º» Boole. Fkt. 26 Ein Synthese-Schritt aktuelle Knoten vi , wj vi hat Markierung mi ∈ {x1 , x2 , . . . , xn , 0, 1} wj hat Markierung mj ∈ {x1 , x2 , . . . , xn , 0, 1} Falls mi ∈ / {0, 1} vi ,0 ist Nullnachfolger von vi vi ,1 ist Einsnachfolger von vi Falls mj ∈ / {0, 1} wj,0 ist Nullnachfolger von wj wj,1 ist Einsnachfolger von wj Wir unterscheiden mehrere Fälle nach den Markierungen mi und mj . Fink Rechnerstrukturen ¶·º» Boole. Fkt. 27 1. Fall: gleiche Variable mi = mj = xk Erzeuge Knoten (vi , wj ) mit Markierung xk . Nullnachfolger der von Synthese-Schritt(vi ,0 , wj,0 ) erzeugte Knoten Einsnachfolger der von Synthese-Schritt(vi ,1, wj,1 ) erzeugte Knoten Fink Rechnerstrukturen ¶·º» Boole. Fkt. 28 2. Fall: verschiedene Variable mi = xk , mj = xk ′ , xk vor xk ′ Erzeuge Knoten (vi , wj ) mit Markierung xk . Nullnachfolger der von Synthese-Schritt(vi ,0 , wj ) erzeugte Knoten Einsnachfolger der von Synthese-Schritt(vi ,1, wj ) erzeugte Knoten Fink Rechnerstrukturen ¶·º» Boole. Fkt. 29 3. Fall: verschiedene Variable mi = xk , mj = xk ′ , xk hinter xk ′ Erzeuge Knoten (vi , wj ) mit Markierung xk ′ . Nullnachfolger der von Synthese-Schritt(vi , wj,0 ) erzeugte Knoten Einsnachfolger der von Synthese-Schritt(vi , wj,1 ) erzeugte Knoten Fink Rechnerstrukturen ¶·º» Boole. Fkt. 30 4. Fall: eine Variable, eine Senke mi = xk , mj ∈ {0, 1} Idee Konstante liegen in der Variablenordnung ganz hinten Erzeuge Knoten (vi , wj ) mit Markierung xk . Nullnachfolger der von Synthese-Schritt(vi ,0 , wj ) erzeugte Knoten Einsnachfolger der von Synthese-Schritt(vi ,1, wj ) erzeugte Knoten Fink Rechnerstrukturen ¶·º» Boole. Fkt. 31 5. Fall: eine Variable, eine Senke mi ∈ {0, 1}, mj = xk Erzeuge Knoten (vi , wj ) mit Markierung xk . Nullnachfolger der von Synthese-Schritt(vi , wj,0 ) erzeugte Knoten Einsnachfolger der von Synthese-Schritt(vi , wj,1 ) erzeugte Knoten Fink Rechnerstrukturen ¶·º» Boole. Fkt. 32 6. Fall: zwei Senken mi ∈ {0, 1}, mj ∈ {0, 1} Erzeuge mit mi ⊗ mj markierte Senke. Zusammenfassung zum Merken 1. Erzeuge Knoten mit weiter vorne liegender“ Markierung. ” 2. Wenn beide Knoten mit gleicher Variabler markiert, aus beiden Knoten fortschreiten. 3. Bei ungleicher Variablenmarkierung, nur aus weiter vorne ” liegenden“ Knoten fortschreiten, im anderen Knoten warten. 4. Abbruch, wenn in beiden Knoten Senken erreicht. Fink Rechnerstrukturen ¶·º» Boole. Fkt. 33 Noch ein Beispiel 0 x1 (1,1) 1 x2 (2,1) 0 x1 1 0 2 1 0 x2 1 1 3 0 2 x1 0 1 x2 (3,1) 0 1 1 1 3 0 (2,2) 1 (3,2) 0 (2,3) x1 ⊕ x2 x2 (3,3) Variablenordnung x1 , x2 boolesche Verknüpfung ⊕ Fink Rechnerstrukturen ¶·º» Boole. Fkt. 34 Größenzuwachs bei Synthese Wie groß wird das neue πOBDD? Beobachtung also für je zwei Knoten höchstens ein neuer Knoten aus πOBDDs mit s1 und s2 Knoten neues πOBDD mit ≤ s1 · s2 Knoten Beobachtungen ◮ Ergebnis-πOBDD in der Regel nicht reduziert ◮ Größe s1 · s2 manchmal erforderlich (ohne Senken) Fink Rechnerstrukturen ¶·º» Boole. Fkt. 35 Operationen auf OBDDs Erinnerung OBDDs unterstützen viele wichtige Operationen √ 1. Reduzierung √ 2. Synthese √ 3. Auswertung 4. Konstantsetzung xi = c ◮ ◮ OBDD durchlaufen Vorgänger jedes xi -Knotens auf c-Nachfolger des xi -Knotens umsetzen 5. Gleichheitstest ◮ ◮ ◮ ◮ Fink Rechnerstrukturen √ √ Voraussetzung gleiche Variablenordnung π beide reduzierte πOBDDs ab der Quelle parallel durchlaufen bei ungleicher Markierung ungleich rekursiv für Null- und Einsnachfolger ¶·º» Boole. Fkt. 36 Operationen auf OBDDs (Fortsetzung) Erinnerung OBDDs unterstützen viele wichtige Operationen 6. Null-/Einseingabe finden ◮ ◮ √ mit OBDD-Durchlauf Vorgänger-Zeiger berechnen von passender Senke Aufstieg bis zur Quelle, dabei Belegung merken 7. Null-/Einseingaben zählen ◮ ◮ ◮ ◮ ◮ ◮ Fink Rechnerstrukturen √ Beobachtung über Quelle laufen alle 2n Eingaben Beobachtung jede Knoten halbiert Anzahl Eingaben und leitet Hälften jeweils über 0- und 1-Nachfolger OBDD von der Quelle durchlaufen an jedem Knoten Anzahl Eingaben notieren bei mehrfach erreichten Knoten Anzahlen addieren Summe an der passenden Senke ablesen (für reduziertes πOBDD) ¶·º» Boole. Fkt. 37 Schaltnetze bis jetzt Diskussion (theoretischer) Grundlagen Wo bleibt die Hardware? kommt jetzt Wunsch klar aber immer noch abstrakt Realisierung boolescher Funktionen in Hardware brauchen Realisierung einer funktional-vollständigen Menge boolescher Funktionen Erinnerung Realisierung von NAND reicht aus +V xy Beobachtung x realisiert NAND(x, y ) y Fink Rechnerstrukturen ¶·º» Boole. Fkt. 38 Gatter Realisierung mit Transistoren . . . falsche Ebene! Grundlage hier einfache logische Bausteine (Gatter) Bausteine für Negation, Konjunktion, Disjunktion, . . . Spielregeln ◮ Eingänge mit Variablen oder Konstanten belegt ◮ nur Verbindungen von Ausgängen zu Eingängen ◮ keine Kreise Ergebnis heißt Schaltnetz Fink Rechnerstrukturen ¶·º» Boole. Fkt. 39 Symbole für Gatter (1) Funktion DIN 40700 y =x x y y = x1 ∧ x2 ∧ x3 x1 x2 x3 y y = x1 ∧ x2 ∧ x3 x1 x2 x3 y Fink Rechnerstrukturen ¶·º» DIN EN 60617 IEEE x 1 y x y x1 x2 x3 & y x1 x2 x3 y x1 x2 x3 & y x1 x2 x3 y Boole. Fkt. 40 Symbole für Gatter (2) Funktion DIN 40700 y = x1 ∨ x2 ∨ x3 x1 x2 x3 y y = x1 ∨ x2 ∨ x3 x1 x2 x3 y y = x1 ⊕ x2 x1 y x2 y = x1 x2 ∨ x1 x2 Fink Rechnerstrukturen IEEE x1 x2 x3 >1 y x1 x2 x3 y x1 x2 x3 >1 y x1 x2 x3 y =1 y x1 x1 y ¶·º» y x2 x2 x1 x2 DIN EN 60617 x1 x1 y y x 2 Boole. Fkt. x2 41 Schaltnetz-Bewertung Und jetzt beliebige Schaltnetze entwerfen? mindestens relevant Größe und Geschwindigkeit ◮ Schaltnetzgröße (= Anzahl der Gatter) wegen Kosten, Stromverbrauch, Verlustleistung, Zuverlässigkeit, . . . ◮ Schaltnetztiefe (= Länge längster Weg Eingang wegen Schaltgeschwindigkeit ◮ Fan-In (= max. Anzahl eingehender Kanten) wegen Realisierungsaufwand ◮ Fan-Out (= max. Anzahl ausgehender Kanten) wegen Realisierungsaufwand ◮ . . . (z. B. Anzahl Gattertypen, Testbarkeit, Verifizierbarkeit) Fink Rechnerstrukturen ¶·º» Boole. Fkt. Ausgang) 42 Was wir schon wissen Jede boolesche Funktion kann mit einem {∧, ∨, ¬}- bzw. einem {⊕, ∧, ¬}-Schaltnetz der Tiefe 3 realisiert werden. Beweis DNF, KNF oder RNF direkt umsetzen Probleme ◮ Fan-In des tiefsten Gatters kann extrem groß sein ◮ Größe des Schaltnetzes oft inakzeptabel Fink Rechnerstrukturen ¶·º» Boole. Fkt. 43 Beispiel: DNF fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1) f (x1 , x2 , x3 ) = x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 x1 1 & & x2 1 >1 & f bsp & & x Fink 3 Rechnerstrukturen 1 ¶·º» Boole. Fkt. 44 Beispiel: RNF fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1) f (x1 , x2 , x3 ) = x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3 x1 1 & & x2 1 =1 & f bsp & & x Fink 3 Rechnerstrukturen 1 ¶·º» Boole. Fkt. 45 Beispiel: KNF fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1) f (x1 , x2 , x3 ) = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) x1 >1 x2 1 >1 x3 1 >1 Fink Rechnerstrukturen ¶·º» & Boole. Fkt. f bsp 46 Multiplexer eine weitere Beispielfunktion . . . aber eine in der Praxis sehr wichtige diesmal! MUXd y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 = x(y1 y2 ··· yd )2 Beispiel y1 y2 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 Fink Rechnerstrukturen y3 0 1 0 1 0 1 0 1 MUX3 (y1 , y2 , y3 , x0 , x1 , . . . , x7 ) x0 x1 x2 x3 x4 x5 x6 x7 ¶·º» Boole. Fkt. 47 Multiplexer Warum ist MUX in der Praxis wichtig? direkte Speicheradressierung OBDD-Realisierung Welche Variablenordnung π? wohl sinnvoll Adressvariablen zuerst denn Wir müssen uns sonst alle Datenvariablen merken! Fink Rechnerstrukturen ¶·º» Boole. Fkt. 48 OBDD-Realisierung MUX3 Variablenordnung π = (y1 , y2 , y3 , x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 ) y1 0 1 y2 0 y2 1 0 y3 0 x0 y3 1 x1 0 y3 1 x2 0 x3 0 1 ¶·º» y3 1 x4 jeweils xi realisieren Fink Rechnerstrukturen 1 x5 0 x6 1 x7 xi 0 0 Boole. Fkt. 1 1 49 Einfluss von π auf OBDD-Größe Beispiel MUXd gesehen Variablenordnung π = (y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 ) Größe des reduzierten πOBDDs? oben unten vollständiger Binärbaum über y1 , y2 , . . . , yd 20 + 21 + · · · + 2d−1 = 2d − 1 Knoten je ein xi -Knoten und zwei Senken 2d + 2 Knoten zusammen Fink Rechnerstrukturen 2d − 1 + 2d + 2 = 2d+1 + 1 Knoten ¶·º» Boole. Fkt. 50 Einfluss von π auf OBDD-Größe Beispiel MUXd gesehen Variablenordnung π = (y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 ) Größe des reduzierten πOBDD 2d+1 + 1 Betrachte Variablenordnung π = (x0 , x1 , . . . , x2d −1 , y1 , y2 , . . . , yd ) Größe des reduzierten πOBDDs? Behauptung Beweis Fink Rechnerstrukturen d ∀x 6= x ′ ∈ {0, 1}2 : nach Lesen von x bzw. x ′ verschiedene Knoten erreicht durch Widerspruch ¶·º» Boole. Fkt. 51 Widerspruchsbeweis zur OBDD-Größe d ∀x 6= x ′ ∈ {0, 1}2 : nach Lesen von x bzw. x ′ verschiedene Knoten erreicht Behauptung Annahme Betrachte Betrachte Beobachtung aber d für x 6= x ′ ∈ {0, 1}2 gleiche Knoten v erreicht i = min{j | xj 6= xj′ } y1 , y2 , . . . , yd mit (y1 y2 · · · yd )2 = i MUXd (y1 , y2 , . . . , yd , x) = xi 6=xi′ = MUXd (y1 , y2 , . . . , yd , x ′ ) OBDD berechnet gleichen Wert, da gleicher Knoten erreicht also minimales OBDD für π = (x0 , x1 , . . . , x2d −1 , y1 , y2 , . . . , yd ) d hat Größe mindestens 22 − 1 (Binärbaum d. Tiefe 2d ) d min. OBDD-Größe π = (d, x) min. OBDD-Größe π = (x, d) 2 9 ≥ 15 33 ≥ 65 535 4 Fink Rechnerstrukturen ¶ · º » Boole. Fkt. 8 513 ≥ 1,1579 · 1077 52 Schaltnetz für MUX3 x0 & x1 & x2 & x3 & x4 & >1 x5 & x6 & x7 Fink Rechnerstrukturen MUX 3 & 1 1 1 y1 y2 y3 ¶·º» Boole. Fkt. 53