0 Daumen
119 Aufrufe

Ich beschäftige mich gerade mit OBDD's und bin beim lesen eines Vorlesungskripts auf die Anzahl der Eingaben z gestoßen für die eine boolsche Funktion, realisiert in einem OBDD, den Funktionswert 1 annimmt. Für den Startknoten ist diese Anzahl z = 2^n, also es existieren 2^n Belegungen für die Quelle.

Meine Frage ist dann daher wie man jetzt die Anzahl der Eingaben berechnet die man dann an der Einssenke mit dem Funktionswert 1 abliest. Da steht man soll wenn man einen Knoten zum ersten Mal betritt mit z Eingaben, zu den Anzahlen seiner beiden Nachfolger jeweils z/2 hinzuaddieren und dann an der Einssenke die Eingaben ablesen, die den Funktionswert 1 erzeugen. Die Anzahl der Eingaben der Knoten halbieren sich ja von oben nach unten.

Habe selber versucht bei einem Beispiel OBDD von oben nach unten mich durchzuarbeiten und die Eingaben jeweils zu notieren und zu berechnen aber iwie komme ich auf Zahlen wie 12 oder 16 obwohl offensichtlich anhand einer Wahrheitstabelle 5 Belegungen bzw Eingaben den Funktionswert 1 annehmen

Wie würde man jetzt für diese Beispielfunktion die Eingaben z berechnen, die den Funktionswert 1 annehmen?

IndexxyzFunktion f_bsp
00001
10010
20100
30110
41001
51011
61101
71111
Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Berechnung der Anzahl der Eingaben \(z\) für den Funktionswert 1 in einem OBDD

Um die Anzahl der Eingaben \(z\) zu berechnen, die in einem OBDD zum Funktionswert 1 führen, folgen wir dem im Vorlesungsskript vorgeschlagenen Ansatz. Für das gegebene Beispiel ist die Funktion abhängig von drei Variablen: \(x\), \(y\) und \(z\). Das bedeutet, es gibt \(2^3 = 8\) mögliche Eingaben, was der Gesamtzahl der Belegungen entspricht.

Die Anweisung besagt, dass sich beim Durchlaufen des OBDD die Anzahl der Eingaben, die einen Knoten erreichen, von oben nach unten halbiert. Das liegt daran, dass bei jeder Entscheidung, die auf der Wertung einer Variablen basiert, der Pfad halbiert wird: einer für den Variablenwert 0 und einer für den Wert 1. Also, wenn man den Startknoten mit \(z = 2^n\) Eingaben betritt, werden seine beiden Nachfolger jeweils mit \(z/2\) Eingaben erreicht.

Gegeben ist die Funktion \(f_{bsp}\) in einer Wahrheitstabelle. Um die Anzahl der Belegungen zu ermitteln, die zum Funktionswert 1 führen, könnte man einfach die Zeilen zählen, in denen \(f_{bsp} = 1\) ist. Anhand der gegebenen Tabelle:

- \((x=0, y=0, z=0) \rightarrow 1\)
- \((x=1, y=0, z=0) \rightarrow 1\)
- \((x=1, y=0, z=1) \rightarrow 1\)
- \((x=1, y=1, z=0) \rightarrow 1\)
- \((x=1, y=1, z=1) \rightarrow 1\)

Das ergibt insgesamt 5 Belegungen, die den Funktionswert 1 erzeugen.

Die Anzahl von \(z\), die man bei der Einssenke für den Wert 1 abliest, entspricht der Anzahl der Pfade innerhalb des OBDD, die zu einem Endzustand mit dem Wert 1 führen. Die oben manuelle Zählung bestätigt, dass 5 solcher Pfade (und somit Belegungen) existieren.

Ohne den spezifischen OBDD grafisch vorliegen zu haben, basiert die allgemeine Methode darauf, die Anzahl der gültigen Pfade durch den Baum zu zählen, indem jeder Entscheidungspunkt den Pfad in zwei Hälften teilt. Entscheidend ist, dass an jedem Knoten der Baumstruktur die Bedingungen berücksichtigt werden, die durch die Vorgänge in der Wahrheitstabelle definiert sind. In diesem Fall können die detaillierten Pfade nur dann genau nachvollzogen werden, wenn der spezifische Aufbau des OBDD bekannt ist. Dennoch spiegelt die manuelle Zählung durch die Wahrheitstabelle effektiv die erwartete Anzahl der Eingaben \(z\) wider, die zum Funktionswert 1 führen.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community