6 Algebraische Methoden

Werbung
Stand: 01.02.2010 – „Vorlesung Randomisierte Algorithmen“ – Dietzfelbinger
6
6.1
Algebraische Methoden
Der Satz von Schwartz-Zippel
In diesem Abschnitt betrachten wir Polynome mit mehreren Variablen X1 , . . . , Xn
über einem Körper K. Ein solches Polynom f kann man als endliche Summe von
Termen der Form
a`1 ,...,`n · X1`1 X2`2 · · · Xn`n
schreiben, wobei a`1 ,...,`n ein Element von K ist, und in verschiedenen Termen die
Exponentenfolge `1 , . . . , `n verschieden ist. Der Grad eines solchen Terms ist `1 +
· · · + `n , der Grad deg(f ) des Polynoms f ist das Maximum der Grade seiner Terme.
Das Nullpolynom hat keinen Term, sein Grad ist −∞.
Beispiele für Polynome über dem Körper Z5 :
X12 X22 + 4X1 X43 + 2X23 X33 , X1 X2 + 2X2 + X3 , X13 + 3X12 X2 , 3,
mit den Graden 6, 2, 3 und 0. Polynome kann man addieren, subtrahieren und multiplizieren, und vereinfachen, indem man Terme, die zu derselben Exponentenfolge
`1 , . . . , `n gehören, zusammenfasst.
Ein Vektor (a1 , . . . , an ) ∈ K n heißt eine Nullstelle von f , wenn sich beim Einsetzen
von ai für Xi in f und Ausrechnen der Wert f (a1 , . . . , an ) = 0 ergibt. Beispielsweise
ist (1, 3) eine Nullstelle von X13 + 3X12 X2 (über K = Z5 ).
Folgendes ist leicht zu beweisen (und zumindest für den Körper der reellen Zahlen
bekannt):
Lemma 6.1. Wenn f ein Polynom mit einer Variablen X = X1 ist, und deg(f ) =
d ≥ 0, so besitzt f höchstens d Nullstellen.
Wir können dies auf Polynome mit n Variablen verallgemeinern:
Lemma 6.2 (Schwartz-Zippel). Wenn f ein Polynom mit n Variablen und Grad
d ≥ 0 ist, und S ⊆ K, so besitzt f in S n höchstens d|S|n−1 Nullstellen.
Diese Aussage kann nicht verbessert werden. Das Polynom f = (X1 −1)(X1 −2)(X1 −
3) · · · (X1 − d) (mit n Variablen, von denen X2 , . . . , Xn in f nicht vorkommen) hat in
Znm (mit m > d Primzahl) die dmn−1 Nullstellen (i, a2 , . . . , an ), mit i = 1, . . . , d und
ai ∈ Zm beliebig.
1
Beweis von Lemma 6.2: Induktion über n. Der Induktionsanfang n = 1 ist durch
Lemma 6.1 gegeben.
Sei also jetzt n > 1, und sei als Induktionsvoraussetzung angenommen, dass die
Aussage für Polynome mit maximal n − 1 Variablen stimmt.
Wenn deg(f ) = 0 ist, dann hat f überhaupt keine Nullstelle, und es ist nichts zu zeigen. Also können wir o. B. d. A. annehmen, dass f eine Variable enthält. Wir nehmen
an, dass X1 in f vorkommt. Wir wählen δ so, dass X1 die höchste Potenz ist, mit der
X1 in f vorkommt, und klammern X1δ aus allen Termen aus, in denen dieser Faktor
vorkommt. Dies liefert die Zerlegung
f (X1 , . . . , Xn ) = X1δ · q(X2 , . . . , Xn ) + r(X1 , . . . , Xn ),
wobei in q 6= 0 die Variable X1 nicht vorkommt, der Grad von q(X2 , . . . , Xn ) maximal
d − δ ist und in r(X1 , . . . , Xn ) der Faktor X1 nur mit Exponenten < δ auftaucht.
Der Grad von r(X1 , . . . , Xn ) ist maximal d.
Wir definieren
A = {(a1 , . . . , an ) ∈ S n | q(a2 , . . . , an ) = 0}
und
B = {(a1 , . . . , an ) ∈ S n | q(a2 , . . . , an ) 6= 0 ∧ f (a1 , . . . , an ) = 0}.
Man sieht sofort, dass
f (a1 , . . . , an ) = 0 ⇒ (a1 , . . . , an ) ∈ A ∪ B.
Wir müssen also zeigen, dass |A ∪ B| ≤ |A| + |B| ≤ d|S|n−1 ist.
Dazu beobachten wir: Nach Induktionsvoraussetzung ist
|A| ≤ (d − δ)|S|n−1 .
Die Zahl |B| schätzen wir so ab: Für jeden Vektor (a2 , . . . , an ) mit q(a2 , . . . , an ) 6= 0
ist f (X1 , a2 , . . . , an ) ein Polynom in der einen Variablen X1 , vom Grad höchstens δ.
Dieses Polynom hat (nach Lemma 6.1) maximal δ Nullstellen. Wir summieren über
alle (a2 , . . . , an ) und erhalten, dass |B| ≤ |S|n−1 · δ gilt. Wenn wir die Abschätzungen
für A und B addieren, folgt |A|+|B| ≤ d|S|n−1 , also hat f maximal d|S|n−1 Nullstellen
– das ist die Induktionsbehauptung. 6.2
Vergleich von Polynomprodukten
Im folgenden sei K irgendein (endlicher oder unendlicher) Körper.
2
Problemstellung: Gegeben seien Polynome f1 . . . , fr und g1 , . . . , gs über K. Sei
f = f1 · . . . · fr und g = g1 · . . . · gs . Gilt f = g?
Um die Schwierigkeit der Fragestellung zu illustrieren, betrachten wir ein Beispiel.
Die Polynome f1 , . . . , f2n seien
X1 + 1, . . . , Xn + 1, X1 − 1, . . . , Xn − 1,
die Polynome g1 , . . . , gn seien
X12 − 1, . . . , Xn2 − 1.
Wir „sehen“, dass (aufgrund der Formel (Xi + 1)(Xi − 1) = Xi2 − 1) die Produkte
der beiden Folgen gleich sind. Algorithmisch ist dies aber schwierig zu behandeln.
(Die Terme könnten anders angeordnet sein, und zudem mit weniger offensichtlichen
anderen Faktoren multipliziert sein.) Der nächstliegende deterministische Algorithmus
wird die beiden Seiten ausmultiplizieren und dann vergleichen. Im Beispiel entstehen
dann aber exponentiell viele Terme, der Aufwand ist also immens.
Tatsächlich ist für das Problem „Vergleich von Polynomprodukten“ kein deterministischer Algorithmus bekannt, der polynomielle Laufzeit hat. Wir geben einen sehr
einfachen randomisierten Algorithmus an.
Es sei
d = max{deg(f1 ) + · · · + deg(fr ), deg(g1 ) + · · · + deg(gs )}.
(Dann ist offenbar deg(f −g) ≤ d.) Wir wählen eine beliebige endliche Menge1 S ⊆ K
mit |S| ≥ 2d. Nun wählen wir a = (a1 , . . . , an ) ∈ S n zufällig und berechnen
b = f1 (a) · . . . · fr (a) und c = g1 (a) · . . . · gs (a).
(Es wird in die einzelnen Faktoren eingesetzt und ausgewertet, dann in K mulipliziert.)
Ausgabe: 0, wenn b = c, und 1, falls b 6= c.
Algorithmus 6.1 (Polynomprodukt).
Input: Polynome f1 . . . , fr und g1 , . . . , gs über K.
Methode:
1
d := max{deg(f1 ) + · · · + deg(fr ), deg(g1 ) + · · · + deg(gs )};
2
Wähle endliche Menge S ⊆ K mit |S| ≥ 2d;
3
Wähle a = (a1 , . . . , an ) ∈ S n zufällig;
4
b := f1 (a) · . . . · fr (a);
5
c := g1 (a) · . . . · gs (a);
6
if b = c then return 0 else return 1.
Falls |K| < 2d, muss man mit den bekannten Methoden eine Körpererweiterung K 0 ⊇ K konstruieren und in K 0 rechnen.
1
3
Es ist leicht zu sehen, dass Algorithmus 6.1 nur eine polynomielle Anzahl von Körperoperationen benötigt. (Selbst wenn die Exponenten in den Polynomen groß sind, ist
– mit schneller Potenzierung – die Anzahl der Operationen nur linear in der Bitlänge
dieser Exponenten.)
Wir analysieren die Fehlerwahrscheinlichkeit.
1. Fall: f = g. – Dann ist b = f (a) = g(a) = c für jedes a, also ist die Ausgabe
immer 0.
2. Fall: f 6= g. – Dann gilt:
Ausgabe ist 0 ⇔ (f − g)(a) = 0.
Das heißt: Die Ausgabe ist fehlerhaft genau dann wenn der zufällig gewählte Vektor
a eine Nullstelle von f − g ist. Nun ist f − g ein Polynom von einem Grad ≥ 0 (weil
f 6= g) und höchstens d. Nach dem Satz von Schwartz-Zippel (Lemma 6.2) hat f − g
also höchstens d|S|n−1 Nullstellen in S n . Die Wahrscheinlichkeit, die falsche Ausgabe
0 zu erhalten, ist demnach höchstens
d|S|n−1
d
1
=
≤ .
n
|S |
|S|
2
Es handelt sich bei Algorithmus 6.1 also um einen Monte-Carlo-Algorithmus mit einseitigem Fehler, Fehlerschranke d/|S|. Wenn wir ihn k-mal mit unabhängig gewählten
Vektoren a durchführen, erhalten wir eine Fehlerschranke von (d/|S|)k .
6.3
Polynomdeterminanten
Ganz ähnlich wie beim Vergleich von Polynomprodukten ist es bei Determinanten
von Matrizen, deren Einträge Polynome sind. Gegeben sei also eine Matrix


f11 · · · f1m

.. 
A(X1 , . . . , Xn ) =  ...
. 
fm1 · · ·
fmm
mit Polynomeinträgen fij = fij (X1 , . . . , Xn ). Wir nehmen an, dass d0 ≥ deg(fij )
für alle i, j. (Oft sind die Einträge lineare Polynome, also d0 = 1.) Aus der linearen
Algebra kennt man die Determinante:
X
det(A) =
sign(σ) · f1σ(1) · . . . · fmσ(m) .
σ∈Sm
Dabei ist Sm die Menge aller Permutationen σ der Menge {1, . . . , m}, und sign(σ)
das Vorzeichen der Permutation σ.
4
Problem 1: Gegeben eine Polynommatrix A. Ist det(A) = 0, also das Nullpolynom?
Problem 2: Gegeben eine Polynommatrix A und eine Folge g1 , . . . , gs von Polynomen. Ist det(A) = g1 · . . . · gs ?
Die Summe in der Definition der Determinante hat n! Terme. Daher ist es normalerweise nicht möglich, das Polynom det(A) explizit zu berechnen. Auch hier hilft
Randomisierung.
Sei d = d0 m oder eine andere obere Schranke für deg(det(A)). Wähle eine feste Menge
S ⊆ K mit |S| ≥ 2d. Nun wähle zufällig eine Folge a = (a1 , . . . , an ) ∈ S n . Berechne


f11 (a) · · · f1m (a)


..
..
b = det(A(a)) = det 

.
.
fm1 (a) · · · fmm (a)
wie folgt: Erst wird a in jede Komponente eingesetzt, dann wird die Determinante in
K ausgerechnet (Gauss-Elimination, O(m3 ) Körper-Operationen). Die Ausgabe ist 0
wenn b = 0 ist, und 1, wenn b 6= 0 ist. Ganz analog zur Analyse von Algorithmus 6.1
sieht man folgendes: Wenn det(A) das Nullpolynom ist, dann ist die Ausgabe 0, und
wenn det(A) 6= 0, dann gilt Pr(Ausgabe ist 0) ≤ d/|S| ≤ 21 .
Ein analog gebauter Algorithmus löst auch Problem 2.
Eine graphentheoretische Anwendung der Polynomdeterminanten werden wir in Abschnitt 6.4 kennenlernen.
6.4
Perfektes Matching in bipartiten Graphen
In diesem Abschnitt betrachten wir bipartite Graphen G = (U, V, E). Dabei ist U =
{u1 , . . . , um } und V = {v1 , . . . , vm } und E ⊆ U × V . Eine Menge M ⊆ E heißt ein
Matching („paarweise Zuordnung“) in G, wenn für (u, v), (u0 v 0 ) ∈ E gilt: u = u0 ⇒
v = v 0 und v = v 0 ⇒ u = u0 . In Worten: Kanten in M sind entweder knotendisjunkt
oder gleich. Ein Matching M heißt perfekt, wenn M aus m Kanten besteht – dann ist
jeder Knoten in U genau einem Knoten in V zugeordnet.
Problem 1: Gegeben ein bipartiter Graph G wie beschrieben: besitzt G ein perfektes
Matching?
Problem 2: Zu einem bipartiten Graph G wie beschrieben: berechne ein perfektes
Matching – wenn dies möglich ist.
Es gibt Standard-Algorithmen, die diese Probleme lösen. Sie beruhen auf Flussberechnungen oder verwandten Verfahren. Wir stellen einen randomisierten Algorithmus vor.
Dieser hat allerdings schlechtere Laufzeiten als die entsprechenden Flussalgorithmen.
5
Der Vorteil liegt darin, dass er parallelisierbar ist, was für die Flussalgorithmen nicht
gilt.
Definition 6.3. G = (U, V, E) sei ein bipartiter Graph auf 2 × m Knoten. Die
Edmonds-Matrix AG ist eine m × m-Matrix mit Einträgen
Xij , falls (ui , vj ) ∈ E,
fij =
, für 1 ≤ i, j ≤ m.
0,
falls (ui , vj ) ∈
/ E,
Dabei sind die Variablen Xij , 1 ≤ i, j ≤ m, alle verschieden. Man sieht sofort, dass
die Determinante von AG entweder das Nullpolynom ist (also keinen Term enthält)
oder Grad m hat.
Satz 6.4 (Edmonds). G hat ein perfektes Matching ⇔ det(AG ) 6= 0.
Der Satz sagt also, dass man nur testen muss, ob det(AG ) das Nullpolynom ist, um
die Existenz eines perfekten Matchings zu testen.
Beweis von Satz 6.4: Aus der Definition des Edmonds-Polynoms folgt:
X
det(AG ) =
sign(σ) · f1σ(1) · · · fmσ(m) .
σ∈Sm
Alle Terme in dieser Summe, die die 0 als Faktor haben, fallen heraus. Mit anderen
Worten: ein Summand sign(σ) · f1σ(1) · · · fmσ(m) ist genau dann in der Summe enthalten, wenn fiσ(i) = Xiσ(i) für alle i ist, und das heißt, dass E alle Kanten (ui , vσ(i) )
enthält.
Das heißt: Die Summe enthält einen Term genau dann, wenn es ein σ gibt derart
dass E alle Kanten (ui , vσ(i) ) enthält. Dies ist äquivalent zur Existenz eines perfekten
Matchings.
Algorithmus 6.2 (Perfektes Matching).
Input: Bipartiter Graph G = (U, V, E) mit m Knoten auf beiden Seiten.
Methode:
1
Bilde die Edmonds-Matrix AG (eine m × m-Matrix);
2
Setze S = {1, . . . , m2 };
3
Wähle a = (a11 , . . . , a1m , . . . , am1 , . . . , amm ) ∈ S m×m zufällig;
4
b := det(AG (a)); (∗ Gauss-Elimination über Q ∗)
5
if b = 0 then return 0 else return 1.
Wie vorher sehen wir: Wenn M keine perfektes Matching hat, also det(AG ) das Nullpolynom ist, dann ist die Antwort auf jeden Fall 0. Wenn M ein perfektes Matching
6
hat, also det(AG ) nicht das Nullpolynom ist, dann gilt: Pr(Antwort ist 0) ≤ m/|S| ≤
1
m.
Bemerkung: Man kann zeigen, dass man mit polynomiell vielen Prozessoren die
Determinante einer m × m-Matrix in Zeit O((log m)2 ) berechnen kann (Algorithmus
von Berlekamp). Damit kann man auch die Existenz eines perfekten Matchings in
paralleler Zeit O((log m)2 ) [Körperoperationen] testen – aber nur randomisiert.
Problem 2, die Konstruktion eines perfekten Matchings, lässt sich wie folgt lösen:
Zunächst testet man, ob G ein perfektes Matching besitzt. Nur im positiven Falle
fährt man wir folgt rekursiv fort. Sei G0 = (U 0 , V 0 , E 0 ) der aktuelle Graph. Man
nimmt eine beliebige Kante e = (u, v) ∈ E 0 und testet, ob G00 = (U 0 , V 0 , E 0 − {e}) ein
perfektes Matching besitzt. Wenn dies der Fall ist, findet man rekursiv ein perfektes
Matching in G00 . Dieses ist auch perfektes Matching in G0 . Wenn G00 kein perfektes
Matching besitzt, findet man rekursiv ein perfektes Matching M 000 in
G000 = (U 0 − {u}, V 0 − {v}, E 0 − {e0 | e0 hat u oder v als Endpunkt}).
Dann ist M 00 ∪ {e} perfektes Matching in G0 .
Leider ist diese Art, perfekte Matchings zu finden sowohl iterativ, also nicht leicht
parallelisierbar, als auch ineffizient. Effiziente parallele Algorithmen benötigen weitere
Techniken, auf die wir hier nicht eingehen können.
7
Herunterladen