Praktische Einführung und Programmierung
Stefan Bosse
Universität Koblenz - FB Informatik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume ::
Ausflug in die Digitallogik und Boolesche Algebra
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Digitallogik
Digitallogik kann auf verschiedenen Abstraktionsebenen betrachtet werden:
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Digitallogik
bddrued Bäume können auch direkt als Elektronikschaltung implementiert werden!
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Boolesche Funktionen
Eine Boolesche Funktion besteht aus:
Eine Boolesche Funktione bildet einen Eingangsvektor x auf einen skalaren Wert y ab:
f(→x)=→x→y:Bn→BF(→x)=→x→→y:Bn→Bm⇔F(→x)=(f1(→x),f2(→x),..,fm(→x))
Hat eine Digitallogikschaltung mehr als einen Ausgang y so können diese durch getrennte Boolesche Funktionen berechntet werden.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Boolesche Verknüpfungen
Es gibt drei grundlegende Boolesche Operatoren die Boolesche Werte und Variablen zu Termen verknüpfen:
Konjunktion=Und⇔a∧b∧c∧…⇔a⋅b⋅c⋅..Disjunktion=Oder⇔a∨b∨c∨⇔a+b+c+…Negation:¬x⇔¯¯¯x
a | b | a ∧b | a ∨ b | ¬ a |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Zerlegung Boolescher Funktionen
Man kann jeder Boolesche Funktion nach ihren variablen wie folgt zerlegen:
f=xi⋅fxi=1+¯¯¯xi⋅fxi=0
Dabei werden Variablen x einzeln mit den Werten 0 und 1 festgelegt und erzeugen dabei zwei neue Teilfunktionen fx=0 und fx=1
Beispiel:
f=a⋅b+c=a⋅(b+c)+¯¯¯a⋅(c)=b⋅(a+¯¯¯a⋅c)+¯¯b⋅(a⋅c+¯¯¯a⋅c)
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Wahrheitstabellen
Jede Funktion, jede Boolesche Funktion kann als eine Tabelle wenigstens partiell dargestellt werden.
Funktion ⇔ Tabelle ⇔ Evaluierungsbaum
Funktion
f(a,b)=y=a∧b
Funktionstabelle
a | b | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
Können Bäume oder Graphen sein!! Besser Entscheidungsdiagramme!
Zur Erinnerung: Ein Baum hat gerichtete Kanten und jeder Knoten hat maximal einen Vorgänger. Ein Graph hat diese Einschränkungen nicht.
(Links) Echter Binärer Entscheidungsbaum (Rechts) Äquivalenter Graph
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
Ein BDD is ein Evaluierungsbaum für Boolesche Funktionen (oder Suche von y!) und besteht aus:
Um eine Boolesche Funktion die durch einen BDD gegeben ist zu berechnen fängt man im Wurzelknoten an und folget den Knoten und Verbindungen gemäß konkreter Werte für x1, x2 usw. bis ein Blattknoten erreicht ist.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
function Node(xi) { return { type:'Node', left:null, right:null, xindex:xi } }function Leave(v) { return { type:'Leave', value:v } }function evalBDD(root,xv) { function iter(node) { if (node.type == 'Leave') return node.value // we are done if (xv[node.xindex]==1) return iter(node.left) else return iter(node.right) } return iter(root)}// f(x1=0,x2=1,x3=1)y=evalBDD(root,[0,1,1])
Evaluierung eines BDD mit 0/1 als Ergebnis
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
Wie kann nun eine Boolesche Funktion in einen Baum transformiert werden?
Die Probleme:
Lösung 1: Shanon Zerlegung wobei jeweils ein Knoten xi geschaffen wird und die reusltierenden Funktionen den linken und rechten Teilbaum erzeugen werden.
f=xi⋅fxi=1+¯¯¯xi⋅fxi=0
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
Lösung 2: Direkt aus einer Wahrheitstabelle
a | b | c | y |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
a=1
b | c | y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
a=0
b | c | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 1 |
b=1 (a=1)
c | y |
---|---|
0 | 1 |
1 | 0 |
b=0 (a=1)
c | y |
---|---|
0 | 1 |
1 | 0 |
b=1 (a=0)
c | y |
---|---|
0 | 1 |
1 | 1 |
b=0 (a=0)
c | y |
---|---|
0 | 0 |
1 | 0 |
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
BDD Erzeugeung aus Wahrheitstabelle
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
bddrued (Links) Geordneter Baum (Rechts) Nicht geordneter Baum
Die Reihenfolge der Zerlegung nach Variablen (Reihenfolge der Variablen) bestimmt die Baumstruktur! Bei einer bereits teilreduzierten Booleschen Funktion ist Ergebnis nicht vorhersagbar (auch die Höhe).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume
function Node(xi) { return { type:'Node', left:null, right:null, xindex:xi } }function Leave(v) { return { type:'Leave', value:v } }// [a,b,c,y]tt = [[ 0, 0, 0, 0], [ 0, 0, 1, 0], [ 0, 1, 0, 1], [ 0, 1, 1, 1], [ 1, 0, 0, 1], [ 1, 0, 1, 0], [ 1, 1, 0, 1], [ 1, 1, 1, 0]]function split(numvar,index,tt) { if (index==numvar-1) { node = Node(index) node.left = Leave(tt[0][1]) node.right = Leave(tt[1][1]) } else { tt1 = map(filter(tt,(row => row[0]==1)),row => tail(row)) tt0 = map(filter(tt,(row => row[0]==0)),row => tail(row)) node = Node(index) node.left = split(numvar,index+1,tt1) node.right = split(numvar,index+1,tt0) } return node}root = split(3,0,tt)
Rekursive Erzeugung eines BDD aus Wahrheitstabelle
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: BDD Live
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD
Ziel ist die Verringerung der Knoten im BDD und somit Terme der Booleschen Funktion.
(Links) Transformatin 1: Löschen (Rechts) Transformation 2: Zusammenführung
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD
Bei der Löschregel gibt es einen Knoten xi dessen beide Kanten den gleichen Nachfolgerknoten xj besitzen. Der Knoten xi kann entfernt werden. Alle eingehenden Kanten werden auf xj umgelegt.
Bei der Zusammenführungsregel gibt es vier Knoten mit zweimal xi und zweimal xj mit jeweils gekreuzten Kanten von den xi zu den xj Knoten. Die beiden xi Knoten können zusammengelegt werden. Alle eingehenden Kanten werden auf den zusammengelegten Knoten mit xi umgelegt.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD
Der Vorgang ist iterativ und bottom-up.