Algorithmen und Datenstrukturen

Praktische Einführung und Programmierung

Stefan Bosse

Universität Koblenz - FB Informatik

1 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume ::

Binäre Entscheidungsbäume

Ausflug in die Digitallogik und Boolesche Algebra

  • Digitallogikschaltungen sind einerseits die Grunglage um unsere Algorithmen ausführen zu können
  • Aber Digitallogikschaltungen haben auch etwas mit Graphen und Bäumen zu tun:
  1. Eine Digitallogikschaltung sowie jede Elektronikschlatung ist ein Netzwerk aus Bauelementen die miteinander verbunden sind ⇒ nicht gerichteter zyklischer Graph
  2. Eine Digitallogikschaltung kann durch Boolesche Algebra, Boolesche Funktionen und Wahrheitstabellen mathematisch modelliert und behandelt werden.
  3. Ein Boolesche Funktion kann in einen Baum entwickelt (transformiert) werden!
2 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Digitallogik

Digitallogik

Digitallogik kann auf verschiedenen Abstraktionsebenen betrachtet werden:

  1. Transistorschaltungen (oder noch tiefer Mikrochip / physikalisch)
  2. Gatterebene: Und-, Oder-Verknüpfung, Inverter, Kombinationen daraus
  3. Blockebene: Addierer, Register, Shieberegister, Multiplexer
  4. Boolesche Algebra: Boolesche Funktion (aber nur "zeitlose" kombinatorische Logik)
  5. Boolesche Algebra: Entscheidungsbäume oder Entscheidundsdiagramme
3 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Digitallogik

Digitallogik

bddrued Bäume können auch direkt als Elektronikschaltung implementiert werden!

4 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Boolesche Funktionen

Boolesche Funktionen

Eine Boolesche Funktion besteht aus:

  1. Konstanten, Werten 0/1/False/TRue
  2. Variablen (Eingänge einer Digitallogikschaltung)
  3. Termen
  4. Verknüpfungen: Konjunktion (Und), Disjunktion (Oder), Negation

Eine Boolesche Funktione bildet einen Eingangsvektor x auf einen skalaren Wert y ab:

f(x)=xy:BnBF(x)=xy:BnBmF(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.

5 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Boolesche Verknüpfungen

Boolesche Verknüpfungen

Es gibt drei grundlegende Boolesche Operatoren die Boolesche Werte und Variablen zu Termen verknüpfen:

Konjunktion=Undabcabc..Disjunktion=Oderabca+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

6 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Zerlegung Boolescher Funktionen

Zerlegung Boolescher Funktionen

Man kann jeder Boolesche Funktion nach ihren variablen wie folgt zerlegen:

f=xifxi=1+¯¯¯xifxi=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=ab+c=a(b+c)+¯¯¯a(c)=b(a+¯¯¯ac)+¯¯b(ac+¯¯¯ac)

7 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Wahrheitstabellen

Wahrheitstabellen

Jede Funktion, jede Boolesche Funktion kann als eine Tabelle wenigstens partiell dargestellt werden.

  • Es gilt die Äquivalenz:
Funktion ⇔ Tabelle ⇔ Evaluierungsbaum

Funktion

f(a,b)=y=ab

Funktionstabelle

a b y
0 0 0
0 1 0
1 0 0
1 1 1
8 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: 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

9 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Binäre Entscheidungsbäume

Ein BDD is ein Evaluierungsbaum für Boolesche Funktionen (oder Suche von y!) und besteht aus:

  1. Knoten ni die mit Variablen xj der Booleschen Funktion f(x1,x2,..) verknüpft sind.
  2. Jeder Knoten ni(xj) hat zwei ausgehende Kanten (1) und (0), jeweils eine für xj=1 und eine (gestrichelt) für xj=0.
  3. Jeder Knoten hat mindestens einen Vorgänger außer dem Wurzelknoten
  4. Jeder Ast im Baum ist wieder ein Baum
  5. Es gibt nut zwei Arten von Blättern (Terminalknoten): (1) und (0). Diese liefern das Ergebnis der Booleschen Funktion y
  6. Allgemein ist ein BDD ein Gerichteter azyklischer Graph (DAG)

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.

10 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Binäre Entscheidungsbäume

Evaluierung

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

11 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Erzeugung

Wie kann nun eine Boolesche Funktion in einen Baum transformiert werden?

Die Probleme:

  • Es gibt unendlich viele Bäume die einer Booleschen Funktion f äquivalent sind, da:
  • Es gibt unendlich viele Boolesche Funktionen f1,f2,... die einer Booleschen Funktion f äquivalent sind
  • Die Erzeugung von vollständig geordneten und reduzierten (optimalen) BDD (ROBDD) ist ein NP-vollständiges Problem!

Lösung 1: Shanon Zerlegung wobei jeweils ein Knoten xi geschaffen wird und die reusltierenden Funktionen den linken und rechten Teilbaum erzeugen werden.

f=xifxi=1+¯¯¯xifxi=0

12 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Erzeugung

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
13 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Erzeugung

BDD Erzeugeung aus Wahrheitstabelle

  • Das Gute zuerst: Leiten wir den Baum aus der Wahrheitstabelle durch schtittweise Reduzierung der Zeilen und Spalten (Arrays) mit gordneter Variablenreihenfolge ab dann ist der Baum symmetrisch, vollständig balanziert, und geordnert (Rechenkomplexität der Evaluierung ist O(n) bei n Variablen, die Höhe ist auch n)
  • Das Schleche danach: Der Baum ist überbestimmt und kann reduziert werden.
14 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Erzeugung

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).

15 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Binäre Entscheidungsbäume

Erzeugung

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

16 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: BDD Live

BDD Live

+

17 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD

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

18 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD

Reduktion von BDD

  1. 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.

  2. 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.

19 / 20

Stefan Bosse - Algorithmen und Datenstrukturen - Modul BDD Binäre Entscheidungsbäume :: Reduktion von BDD

Reduktion von BDD

Der Vorgang ist iterativ und bottom-up.

  • Man beginnt bei den Blättern und arbeitet sich bis zur Wurzel hoch.
20 / 20