Minimalpolynome - Zentrum für Angewandte Informatik der

Werbung
Informatik II
Minimalpolynome und Implikanten
Rainer Schrader
Zentrum für Angewandte Informatik Köln
14. November 2008
2 / 41
1 / 41
Minimalpolynome
Minimalpolynome
Was bisher geschah:
• jede Boolesche Funktion kann durch einfache Grundfunktionen
Gliederung
dargestellt werden
• insbesondere lässt sich jede Funktion in disjunktiver Normalform
• Implikanten und Primimplikanten
• Algorithmus von Quine/McCluskey
• dabei können sehr lange Ausdrücke enstehen,
• weitere Reduktionen
dargestellen
die unter Umständen zu komplexen Bausteinen führen
• wir wollen jetzt versuchen, kurze Ausdrücke zu erzeugen
3 / 41
4 / 41
Minimalpolynome
Minimalpolynome
Definition
Beispiel: Sei f (x , y , z ) wiederum if x then y else z .
(i) ein Literal ist ein Ausdruck der Form xi1 = xi bzw. xi0 = x i
(ii) ein Monom ist eine Konjunktion von Literalen
a
a
a
(z. B.: x1 1 x2 2 x3 3 mit ai ∈ {0, 1})
f (x , y , z ) = x y z ∨ x yz ∨ xy z ∨ xyz
= x (y ∨ y )z ∨ xy (z ∨ z )
= x z ∨ xy
(iii) ein Polynom ist eine Disjunktion von Monomen
(iv) die Länge eines Monoms ist die Anzahl seiner Literale,
die Länge eines Polynoms ist die Summe der Längen seiner Monome
• das ist die kürzeste Darstellung als Disjunktion von Produkten
• wir wollen im Folgenden diese Verkürzung systematisch durchführen
• und führen dazu eine in diesem Zusammenhang gebräuchliche
Bemerkung
Terminologie ein
• disjunktive Normalformen sind Polynome
• das Polynom f (x ) = x y z ∨ x y z ∨ x y z ∨ x yz ∨ xyz hat die Länge 15.
5 / 41
6 / 41
Minimalpolynome
Minimalpolynome
• zur Berechnung eines Monoms der Länge k sind k − 1 ∧-Bausteine
• sei P ein Polynom für f ∈ Bn
• P heißt Minimalpolynom, wenn kein Polynom für f geringere Länge
nötig,
• um l Monome mit ∨ zu verknüpfen, sind l − 1 Bausteine nötig.
• d.h. # Bausteine = Länge −1.
hat
• sei p = m1 ∨ m2 ∨ . . . ∨ ml ein Polynom für f
• dann gilt:
Beispiel
• sei f (x ) = x y z ∨ x y z ∨ x y z ∨ x yz ∨ xyz
• f ist ein Polynom der Länge 15
mi (a) = 1 =⇒ p(a) = f (a) = 1
• es gilt aber:
• ein Monom m heißt Implikante von f , wenn gilt
xyz ∨ x y z
=
x (y ∨ y )z = x z
x yz ∨ xyz
=
yz
x y z ∨ xyz
=
xz
m(a) = 1 =⇒ f (a) = 1
• bezeichne I(f ) die Menge der Implikanten von f
• damit enthält jedes Polynom für f nur Implikanten von f
• damit ist f (x ) = x z ∨ yz ∨ xz ein Polynom der Länge 6.
7 / 41
8 / 41
Minimalpolynome
Minimalpolynome
• Beobachtung: nach dem Umformungslemma gilt:
• m ∈ I(f ) heißt Primimplikante von f , wenn keine echte Verkürzung
von m Implikante ist
x ∨ xy = x ∨ (x ∧ y )
• sei PI(f ) die Menge der Primimplikanten
= (x ∨ x ) ∧ (x ∨ y )
• damit können wir zeigen:
= x ∧ (x ∨ y )
=x
• allgemeiner: seien m1 , m2 ∈ I(f )
• m2 eine Verlängerung von m1 , so gilt:
Satz
Jedes Minimalpolynom für f ist Disjunktion von Primimplikanten von f .
• m2 = m1 ∧ m3 und m1 ∨ m2 = m1 ∨ (m1 ∧ m3 ) = m1
• d. h. m2 kann weggelassen werden.
2
Bleibt zu klären, wie man ein Minimalpolynom bestimmen kann.
10 / 41
9 / 41
Minimalpolynome
Minimalpolynome
Die Algorithmen zur Berechnung von Minimalpolynomen bestehen aus zwei
Hauptschritten:
Gliederung
a) Berechnung der Primimplikanten
• Implikanten und Primimplikanten
• Algorithmus von Quine/McCluskey
Im Allgemeinen ist das Polynom aller Primimplikanten nicht minimal. Daher
folgt:
• weitere Reduktionen
b) weitere Reduktion der Primimplikanten
11 / 41
12 / 41
Minimalpolynome
Minimalpolynome
Lemma
• offensichtlich bilden die Minterme Implikanten
• damit kennen wir zumindest alle Implikanten maximaler Länge
Sei m ein Monom das weder x noch x enthält. Dann ist
m ∈ I(f ) ⇐⇒ mx ∈ I(f ) und mx ∈ I(f ).
• wenn eine Implikante nicht minimal ist, enthält sie einen kürzeren
Beweis:
Ausdruck, der ebenfalls Implikante ist
• sei m ∈ I(f )
• um zu testen, ob ein Monom m prim ist, müssten wir
m∈I(f )
• ist mx (a) = 1 =⇒ m(a) = 1 =⇒ f (a) = 1.
• entsprechend für mx
e von m generieren
• alle Verkürzungen m
e eine Implikante ist
• und testen, ob m
• ein solches Vorgehen würde sehr lange dauern
• seien umgekehrt beide Monome mx , mx ∈ I(f )
• ist m(a) = 1, so ist entweder mx (a) = 1 oder mx (a) = 1
• glücklicherweise gilt:
=⇒ f (a) = 1, d. h. m ∈ I(f ).
2
14 / 41
13 / 41
Minimalpolynome
Minimalpolynome
Folgerung:
Algorithmus zur Berechnung der Primimplikanten
(1) sei m Implikante, aber nicht Primimplikante
• berechne alle Implikanten Qk von f der Länge k
• berechne alle Primimplikanten Pk der Länge k
S
• dann ist PI(f ) = Pi
• nach dem letzten Lemma existiert dann ein Literal x , so dass
e und
• m = mx
e ist eine Implikante
• m
• das Verfahren startet mit der Menge Qn = der Minterme ma mit
a ∈ f −1 (1).
(2) sei mx ∈ I(f ) und m ∈ I(f )
• allgemein wird aus Qi zunächst Qi −1 und Pi berechnet.
• ist Qi = ∅, so sind nach dem vorigen Lemma Q1 , . . . , Qi −1 und
• nach dem letzten Lemma ist dann auch mx ∈ I(f )
• d.h. das Entfernen nichtnegierter Literale reicht, um zu testen, ob eine
P1 , . . . , Pi leer.
Implikante prim ist
15 / 41
16 / 41
Minimalpolynome
Sei f ∈ B4 durch ihre Minterme in Q4 definiert:
Algorithmus von Quine / McCluskey
Input:
Output:
Minimalpolynome
Beispiel
Funktionstabelle (a, f (a)) für a ∈ Bn
PI(f )
Q4,4 = ∅
Q4,3 = {x 1 x 2 x3 x 4 , x 1 x2 x 3 x 4 }
Q4,2 = {x 1 x 2 x3 x4 , x 1 x2 x 3 x4 , x1 x 2 x3 x 4 }
(1) entnimm aus der Funktionstabelle die Menge Qn der Minterme ma
Q4,1 = {x 1 x2 x3 x4 , x1 x 2 x3 x4 , x1 x2 x3 x 4 }
setze i = n
Q4,0 = {x1 x2 x3 x4 }
(2) while Qi 6= ∅
i =i −1
Qi = {m : es existiert ein j mit xj , x j 6∈ m und mxj , mx j ∈ Qi +1 }
Pi +1 = {m ∈ Qi +1 : es gibt keine Verkürzung von m in Qi }
end while
Q3,3 = ∅
Q3,2 = {x 1 x 2 x3 , x 2 x3 x 4 , x 1 x2 x 3 }
Q3,1 = {x 1 x3 x4 , x 2 x3 x4 , x 1 x2 x4 , x1 x 2 x3 , x1 x3 x 4 }
Q3,0 = {x2 x3 x4 , x1 x3 x4 , x1 x2 x3 }
(3) PI(f ) = P0 ∪ . . . ∪ Pn
P4 = ∅ (da alle Elemente angefasst wurden)
18 / 41
17 / 41
Minimalpolynome
Minimalpolynome
Q3,3 = ∅
Q3,2 = {x 1 x 2 x3 , x 2 x3 x 4 , x 1 x2 x 3 }
Lemma
Q3,1 = {x 1 x3 x4 , x 2 x3 x4 , x 1 x2 x4 , x1 x 2 x3 , x1 x3 x 4 }
Das Verfahren von Quine/McCluskey berechnet alle Primimplikanten.
Q3,0 = {x2 x3 x4 , x1 x3 x4 , x1 x2 x3 }
P4 = ∅ (da alle Elemente angefasst wurden)
Beweis:
Q2,2 = ∅
• Qn ist die Menge der Implikanten der Länge n
• die Menge Qi +1 der Implikanten der Länge i + 1 wird nach vorigem
Q2,1 = {x 2 x3 }
Q2,0 = {x3 x4 , x1 x3 }
Lemma korrekt berechnet
• hat eine Implikante der Länge i + 1 Verkürzungen, die ebenfalls
P3 = {x 1 x2 x 3 , x 1 x2 x4 } (sind Primimplikanten)
Implikanten sind:
• nach dem Lemma hat sie auch eine solche der Länge i
• d.h. Pi +1 enthält alle Primimplikanten der Länge i + 1.
P2 = Q2 = {x 2 x3 , x3 x4 , x1 x3 } (sind Primimplikanten)
PI(f ) = {x 1 x2 x 3 , x 1 x2 x4 , x1 x3 , x 2 x3 , x3 x4 }
f (x1 , x2 , x3 , x4 ) = x 1 x2 x 3 ∨ x 1 x2 x4 ∨ x1 x3 ∨ x 2 x3 ∨ x3 x4
2
Länge: 12
19 / 41
20 / 41
Minimalpolynome
Minimalpolynome
Bemerkungen zur Laufzeit
Bemerkungen zur Laufzeit
Es gibt:
` ´
(1) ni Möglichkeiten, i Variable aus n auszuwählen
(5) es gibt höchstens 3n Monome über n Variablen
(2) jeweils 2i Möglichkeiten, diese Variablen positiv oder negativ zu setzen
` ´
(3) damit ni 2i Monome der Länge i
(4) und somit höchstens
!
n
X
n i
2
i
=
i =0
(6) Operationen wie „Suchen” und „Einfügen” lassen sich mit Hilfe von
Heaps in O(log 3n )= O(n) Schritten ausführen
(7) es ist sinnvoll, Qi +1 in Mengen (verkettete Listen)
Qi +1,l , l = 0, . . . , i + 1, zu zerlegen, wobei Qi +1,l aus den Monomen
besteht, die l negative Variablen haben.
!
n
X
n i n−i
2 ·1
i
(8) für m ∈ Qi +1,l und xk eine der i + 1 − l positiven Variablen sei
m 0 ist die Verkürzung von m durch Weglassen von xk
i =0
=
(2 + 1)n
=
3n
(9) es ist dann ausreichend zu untersuchen, ob m 0 x k ∈ Qi +1,l +1
Monome über n Variablen.
22 / 41
21 / 41
Minimalpolynome
Minimalpolynome
Bemerkungen zur Laufzeit
(10) D.h. für jede Implikante muss nach höchstens n anderen Implikanten
gesucht werden
(11) somit:
Gliederung
Laufzeit = Anzahl der Implikanten · Anzahl Suchoperationen · Suchzeit
• Implikanten und Primimplikanten
• Algorithmus von Quine/McCluskey
= O(3n · n · n)
= O(3n n 2 ).
• weitere Reduktionen
(12) Der Input hat die Länge N = 2n . (d.h. n = log N und 3n = N log 3 )
Satz
Der Algorithmus von Quine / McCluskey berechnet PI(f ) in
O(N log 3 · (log N )2 ) Schritten.
23 / 41
24 / 41
Minimalpolynome
Minimalpolynome
Beispiel: sei f ∈ B4 wie vorher
• Ist dies die kürzeste Darstellung von f ?
• Wir müssen möglichst „kurze“ Primimplikanten suchen, so dass für
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
jedes a ∈ f −1 ({1}) eine Primimplikante p existiert mit p(a) = 1.
• Eine Primimplikantentafel ist eine Matrix T :
s1
0010
s2
0100
s3
0011
s4
0101
s5
1010
s6
0111
s7
1011
s8
1110
s9
1111
0
0
0
1
0
1
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
1
1
0
0
1
0
0
1
0
0
1
1
1
0
0
1
0
0
0
0
1
0
1
• die Zeilen entsprechen den Primimplikanten m1 , . . . , mk von f
• die Spalten entsprechen den Eingaben a1 , . . . , al mit f (ai ) = 1
• wir suchen „kurze“ Zeilen, so dass jede Spalte in mindestens einer
Zeile eine 1 hat
• das Matrixelement Tij hat den Wert mi (aj ).
• wir beschreiben im folgenden eine Heuristik, die eine zulässige, aber
nicht notwendigerweise optimale (kostenminimale) Lösung des
Problems liefert.
25 / 41
26 / 41
Minimalpolynome
Minimalpolynome
Regel 1: Spalten streichen
• seien s und s 0 zwei Spalten mit s ≤ s 0 (komponentenweise)
• s 0 kann gestrichen gestrichen werden,
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
• denn jede Zeile, die s überdeckt, überdeckt auch s 0
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
s1
0010
0
0
0
1
0
s2
0100
1
0
0
0
0
s3
0011
0
0
0
1
1
s4
0101
1
1
0
0
0
s5
1010
0
0
1
1
0
s6
0111
0
1
0
0
1
s7
1011
0
0
1
1
1
s8
1110
0
0
1
0
0
s9
1111
0
0
1
0
1
• im Beispiel: s1 ≤ s3 , s2 ≤ s4 , s1 ≤ s5 , s1 ≤ s7 , s8 ≤ s9 .
• streiche also die Spalten 3, 4, 5, 7 und 9.
27 / 41
s1
0010
0
0
0
1
0
s2
0100
1
0
0
0
0
s3
0011
0
0
0
1
1
s4
0101
1
1
0
0
0
s5
1010
0
0
1
1
0
s6
0111
0
1
0
0
1
s7
1011
0
0
1
1
1
s8
1110
0
0
1
0
0
s9
1111
0
0
1
0
1
Nach Streichen von Spalten:
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
s1
0010
0
0
0
1
0
s2
0100
1
0
0
0
0
s6
0111
0
1
0
0
1
s8
1110
0
0
1
0
0
28 / 41
Minimalpolynome
Minimalpolynome
Regel 2: („Kernimplikanten”)
• sei si eine Spalte, die nur eine „1” enthält
• die zu einer solchen Spalte gehörige Zeile muss auf jeden Fall
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
genommen werden (Kernimplikante)
• danach kann man die Zeile (und – wenn nicht schon vorher geschehen
– von ihr überdeckten Spalten streichen)
x 1 x2 x 3
x 1 x2 x4
x1 x3
x 2 x3
x3 x4
s1
0010
0
0
0
1
0
s2
0100
1
0
0
0
0
s6
0111
0
1
0
0
1
s8
1110
0
0
1
0
0
s1
0010
0
0
0
1
0
s2
0100
1
0
0
0
0
s6
0111
0
1
0
0
1
s8
1110
0
0
1
0
0
Nach Fixieren von Kernimplikanten:
x 1 x2 x4
x3 x4
s6
0111
1
1
• im Beispiel: Kernimplikanten sind s1 (x 2 x3 ), s2 (x 1 x2 x 3 ), s8 (x1 x3 ).
29 / 41
30 / 41
Minimalpolynome
Minimalpolynome
Regel 3: („Zeilen streichen”)
• seien z und z ’ zwei Zeilen
• mit z 0 ≤ z (komponentenweise) und Länge(z 0 ) ≥ Länge(z ),
• so streiche z 0
• die reduzierte Implikantentafel können wir als Matrix auffassen
• die verbliebenen Primimplikanten entsprechen den Zeilen
• jeder Zeile sind Kosten ci zugeordnet Kosten (ci =
b Länge der i-ten
Primimplikante)
• im Beispiel: nimm noch x3 x4 hinzu:
• wir suchen eine Teilmenge von Zeilen,so dass
f (x1 , x2 , x3 , x4 ) = x 1 x2 x 3 ∨ x1 x3 ∨ x 2 x3 ∨ x3 x4
• in jeder Spalte mindestens eine „1” steht
• die Summe der zeilenkosten minimal ist
• die nach Anwendung der Regeln 1-3 entstandene Matrix heißt
reduzierte Primimplikantentafel
• wähle in der reduzierten Primimplikantentafel eine „möglichst kurze”
Teilmenge von Zeilen, so dass in jeder Spalte mindestens eine „1” steht
31 / 41
32 / 41
Minimalpolynome
Minimalpolynome
• sei E die Menge der Spaltenindices
• jede Zeile entspricht einer Teilmenge von E
Überdeckungsproblem
Mengenüberdeckungsproblem:
gegeben:
gegeben:
• eine {0, 1}-Matrix A mit k Zeilen und l Spalten
• Kosten ci für die i-te Zeile
• endliche Menge E
• Familie M = {M1 , M2 , . . ., Mk } von Teilmengen von E
• Abbildung c : M → R+ (Kosten)
gesucht:
• eine „billigste” Teilmenge von Zeilen,
• so dass in jeder Spalte mindestens eine „1” steht
gesucht:
• Teilfamilie M∗ ⊆ M, die E überdeckt, d.h.
[
• NP-schwer (; später in Vorlesung)
• das Problem lässt sich auch mengentheoretisch formulieren:
M =E
M ∈M∗
• und
c(M∗ ) =
X
c(M )
M ∈M∗
ist minimal unter allen Überdeckungen
33 / 41
Minimalpolynome
34 / 41
Minimalpolynome
implizite Enumeration für das MÜP (prinzipielles Vorgehen)
(1) erzeuge eine Liste L0 , die nur die leere Menge enthält
(2) for i = 1, . . . , k do
(3)
kopiere die Liste Li −1 nach Li
(4)
für jede Menge A ∈ Li −1
(5)
erzeuge die Menge A0 = A ∪ {Mi }
(6)
füge A0 zu Li hinzu, falls
(7)
c(A0 ) ist kleiner als der beste bisher bekannte Wert einer
Überdeckung
(8)
A0 lässt sich mit Mengen aus {Mi +1 , . . . , Mk } zu einer
Überdeckung fortsetzen
(9)
end falls
(10)
end für
(11) end für
implizite Enumeration für das MÜP
• für das MÜP ist es unwahrscheinlich, dass ein effizienter (polynomieller)
Algorithmus existiert
• man behilft sich in der Praxis häufig mit „impliziter Enumeration”
• das Vorgehen ist übertragbar auf viele andere Probleme
35 / 41
36 / 41
Minimalpolynome
Minimalpolynome
implizite Enumeration für das MÜP (prinzipielles Vorgehen)
• der Algorithmus zählt im Prinzip alle 2k Mengen auf, die sich als
Vereinigung von Mengen in M darstellen lassen
implizite Enumeration für das MÜP (Tiefensuche)
• eine solche Menge A wird nur dann nicht weiter betrachtet, wenn
• bisher haben wir die Teilüberdeckungen erzeugt, indem wir:
• ihre Kosten bereits größer sind als der beste bisher bekannte Wert
einer Überdeckung
• alle bereits generierten Lösungen kopiert haben und
• oder sie sich nicht zu einer Überdeckung ergänzen lässt
• zusätzlich jede dieser Lösungen um eine neue Mengen
Mi erweitert haben
• die Laufzeit hängt somit davon ab, wie schnell eine kostengünstige
• wir ändern jetzt die Reihenfolge, in der wir die Lösungen erzeugen
• und versuchen, möglichst schnell eine Überdeckung zu generieren
Überdeckung gefunden wird
• das vorige Verfahren erzeugt die Mengen in einer Art „Breitensuche“
• dabei wird u.U. erst sehr spät eine Überdeckung erzeugt
• die nächste Variante versucht, durch „Tiefensuche“ möglichst früh, eine
kostengünstige Überdeckung zu generieren
37 / 41
38 / 41
Minimalpolynome
Minimalpolynome
Variablen, Bezeichnungen, Datenstrukturen:
• für N ⊆ M setze:
c(N )
[
:=
X
Algorithmus MÜP-IE
c(M )
Eingabe:
M ∈N
N
:=
[
M
E = {e1 , e2 , . . ., en }
M = {M1 , M2 , . . ., Mk }, Mi ⊆ E
M ∈N
c : M → R+
S
OBdA gelte ki=1 Mi = E
• sei Mi := {Mi +1 , Mi +2 , . . ., Mk } (1 ≤ i ≤ k )
• verwende stack für Tupel (N , i ) ∈ 2M × {0, 1, . . ., k }, wobei gilt:
Ausgabe: billigste Überdeckung M∗
• N ⊆ Mi
• N ist eine Teilüberdeckung
• N muss nur noch durch Mengen aus Mi +1 erweitert werden
39 / 41
40 / 41
Minimalpolynome
Minimalpolynome
Algorithmus MÜP-IE
M∗ = M
Satz
Der Algorithmus MÜP-IE berechnet eine billigste Überdeckung M∗ in Zeit
O(2k · k · n).
N =∅
i =0
push ((N , i ),stack)
Beweis:
while stack 6= leer do
• die Korrektheit ist offensichtlich
• Laufzeit: pro while-Durchlauf: O(k · n) Zeit
• sei T (k ) die maximale Anzahl der Tupel (N , i ) auf dem Stapel
• es gilt T (1) = 2, T (k ) = 2 · T (k − 1) ⇒ T (k ) = 2k .
(N , i ) = pop(stack)
if c(N ) < c(M∗ ) then do
S
if
N = E then M∗ := N
else if i < k then do
push((N ∪ {Mi +1 }, i + 1),stack)
S
if
N ∪ Mi +1 = E then push((N , i + 1),stack)
• die Abschätzung ist für die Praxis oft sehr pessimistisch,
• die if-Abfragen sparen oft viel Arbeit
end if
end if
end while
41 / 41
42 / 41
Zugehörige Unterlagen
Herunterladen