Probabilistische Methode.

Werbung
Probabilistische Methode.
Swetlana Belikow
1 Einleitung
Für ein zufälliges Objekt aus einer Wahrscheinlichkeitsverteilung wird gezeigt, dass es mit einer positiven Wahrscheinlichkeit auftreten kann. In vielen
Anwendungen ist diese Wahrscheinlichkeit nicht nur positiv, sondern auch
sehr hoch. In solchen Fällen liefert der Beweis auch einen ezienten randomisierten Algorithmus, um das Objekt mit den gewünschten Eigenschaften
zu nden. [2] Diese Arbeit beschäftigt sich mit den Anwendungen der probabilistischen Methode, wie sie in [1] vorgestellt werden.
Kapitel 2 befasst sich mit den Grundprinzipien der probabilistischen Methode. Die Anwendung der Methode wird anhand eines Beispiels erklärt.
Kapitel 3 beschäftigt sich mit dem MAX-SAT-Problem. Hier werden zwei
auf der probabilistischen Methode basierende Approximationsalgorithmen
für die Lösung dieses Problems vorgestellt.
Im Kapitel 4 wird das Lovász Local Lemma behandelt. Mit Hilfe dieses Lemmas wird bewiesen, dass es für Instanzen des k-SAT-Problems mit
bestimmten Eigenschaften eine erfüllende Variablenzuweisung gibt. Ein randomisierter Algorithmus wird erläutert, der eine Lösung für solche Instanzen
in polynomieller Zeit ndet.
2 Grundidee der probabilistischen Methode
Die probabilistische Methode basiert auf zwei Grundprinzipien, die zwar auf
den ersten Blick trivial erscheinen mögen, aber ein mächtiges Werkzeug für
den Beweis der Existenz von Lösungen für eine Vielzahl von Problemen der
theoretischen Informatik sind:
1. Jede Zufallsvariable nimmt mindestens einen Wert an, der nicht gröÿer
ist und mindestens einen Wert, der nicht kleiner ist, als der Erwartungswert dieser Variable.
2. Wenn ein zufällig gewähltes Objekt mit einer positiven Wahrscheinlichkeit eine Eigenschaft besitzt, existiert mindestens ein Objekt mit
dieser Eigenschaft.
Wie diese einfachen Prinzipien verwendet werden können, wird anhand
des folgenden Beispiels ersichtlich: Gegeben sei ein ungerichteter Graph
G(V, E) mit n Knoten und m Kanten. Gesucht ist eine Partitionierung der
Knoten in zwei Mengen A und B , sodass die Anzahl der Kanten maximiert
wird, die die Partitionsgrenzen schneiden - also jene Kanten (u, v) mit der
Eigenschaft u ∈ A und v ∈ B . Dieses als MAX-CUT bekannte Problem ist
NP-Vollständig. Mit Hilfe der probabilistischen Methode kann bewiesen werden, dass es eine Partitionierung mit mindestens m/2 geschnittenen Kanten
gibt.
Satz 1 Für jeden ungerichteten Graphen G(V, E) mit n Knoten und m Kanten gibt es eine Partitionierung der Knoten in zwei Mengen A und B ,
so dass gilt:
|{(u, v) ∈ E | u ∈ A ∧ v ∈ B}| ≥ m/2
Beweis: Wird jedem Knoten von G unabhängig von den anderen zufällig
eine der beiden Partitionen zugewiesen, dann ist für jede Kante (u, v) ∈ E
die Wahrscheinlichkeit, dass ihre beiden Knoten in verschiedenen Partitionen
liegen gleich 1/2. Somit ist der Erwartungswert für die Anzahl mcut der
Kanten mit dieser Eigenschaft gleich m/2. Daraus folgt, dass es mindestens
eine Partitionierung von G geben muss, für die mcut ≥ m/2 gilt.
Man kann in diesem Beispiel die grundlegende Vorgehensweise der probabilistischen Methode erkennen, die zwei Schritte beinhaltet: Im ersten Schritt
wird ein Gedankenexperiment mit Zufallselementen durchgeführt. Im zweiten Schritt wird dieses Experiment analysiert und die Grundprinzipien werden angewandt um die Existenz einer Lösung zu beweisen.
3 MAX-SAT-Problem
MAX-SAT(maximum satisability problem) ist ein bekanntes Beispiel aus
der Klasse der NP-Vollständigen Probleme.
Denition 1 MAX-SAT-Problem. Gegeben ist ein boolescher Ausdruck in
konjunktiver Normalform (KNF) mit m Klauseln und n Variablen.
Gesucht ist eine Belegung der Variablen, die die Anzahl der erfüllten
Klauseln maximiert.
3.1
Zufallsbelegung
Mit Hilfe der probabilistischen Methode lässt sich beweisen, dass es für jede
Menge aus m Klauseln eine Belegung gibt, die mindestens m/2 Klauseln
erfüllt.
Satz 2 Für jede Menge aus m Klauseln in KNF existiert eine Variablenbelegung, die mindestens m/2 Klauseln erfüllt.
Beweis: Nehmen wir an, die Variablen werden zufällig, gleichverteilt und
unabhängig voneinander auf 1 (Wahr) oder 0 (Falsch) gesetzt.
Für 1 ≥ i ≥ m sei
½
1 falls die i -te Klausel erfüllt ist,
Zi =
0 sonst
Die Wahrscheinlichkeit, dass eine Klausel nicht erfüllt wird, ist für eine
Klausel mit k Literalen gleich 2−k . Dementsprechend ist die Wahrscheinlichkeit, dass sie erfüllt wird 1−2−k ≥ 1/2. Der Erwartungswert ist E |Zi | ≥ 1/2
für alle i. Der Erwartungswert für die Anzahl der erfüllten Klauseln ist bei
einer Zufallsbelegung der Variablen:
m
X
E |Zi | ≥ m/2
i=1
Damit ist bewiesen, dass mindestens eine Belegung existiert, die m/2 oder
mehr Klauseln erfüllt.
3.2
Randomisierte Rundung
Mit Hilfe der probabilistischen Methode ist es möglich, eine bessere Approximation für die Lösung des MAX-SAT-Problems zu erreichen. Gegeben sei
eine Instanz I . Es sei m(I) die maximal mögliche Anzahl der gleichzeitig
erfüllbaren Klauseln in I . Desweiteren sei mA (I) die Anzahl der erfüllten
Klauseln, die ein Algorithmus A liefert.
Die Performance Ratio eines Algorithmus A ist deniert als Inmum
über alle Instanzen I des Verhältnisses mA (I)/m(I). Ein Algorithmus mit
Performance Ratio von α nennt man einen α-Approximationsalgorithmus.
Falls A ein randomisierter Algorithmus ist, kann mA (I) eine Zufallsvariable
sein. In diesem Fall ersetzt man mA (I) durch den Erwartungswert E |mA (I)|
in der Denition der Performance Ratio.
Im Folgenden wird ein 3/4-Approximationsalgorithmus für MAX-SAT
vorgestellt. Jeder Klausel Cj in der Instanz I wird eine Indikator-Variable zj
zugewiesen, sodass:
½
1 falls die j -te Klausel erfüllt ist,
zj =
0 sonst
Für jede Variable xi wird ebenfalls eine Indikatorvariable yi eingeführt.
½
1 falls xi = T RU E
yi =
0 sonst
Sei Cj+ die Menge der Indices der Variablen, die in nicht-negierter Form in Cj
auftauchen, und Cj− die entsprechende Menge für die Variablen in negierter
Form. Man kann nun das MAX-SAT-Problem als ein ganzzahliges lineares
Programm betrachten:
z = max
m
X
zj
j=1
u.d.N.
X
i∈Cj+
yi +
X
(1 − yi ) ≥ zj
∀j
(1)
yi , zj ∈ {0, 1}
∀i, ∀j
(2)
i∈Cj−
Die Ungleichung 1 stellt sicher, dass eine Klausel nur dann als erfüllt
gilt, falls mindestens eines der Literale in dieser Klausel auf 1 gesetzt wird.
Da zP
j = 1 nur gilt, wenn die Klausel Cj erfüllt ist, ist die Zielfunktion
max m
j=1 zj die Anzahl der erfüllten Klauseln der Instanz.
Falls man die Bedingung 2 so ändert, dass yi und zj alle reellen Werte im Intervall [0, 1] annehmen dürfen, erhält man ein relaxiertes lineares
Programm:
z = max
m
X
zj
j=1
u.d.N.
X
i∈Cj+
yi +
X
(1 − yi ) ≥ zj
∀j
(3)
yi , zj ∈ [0, 1]
∀i, ∀j
(4)
i∈Cj−
Seien yˆi und zˆj die Werte der
P Variablen yi und zj in der Lösung des
relaxierten linearen Programms. m
j=1 zˆj ist dann die obere Grenze für die
Anzahl der erfüllten Klauseln in der Instanz I .
Algorithmus 1 Randomisierte Rundung
Input: Eine Instanz des MAX-SAT-Problems I .
Schritt 1
Löse das relaxierte lineare Programm zu I .
Schritt 2
Sei Y = {yˆi } für i = (1, ..., n) die Ausgabe von Schritt 1
Für j ∈ [0, . . . , n]:
Setze die Variable xi mit Wahrscheinlichkeit yˆi auf 1.
Ausgabe: Variablenbelegung y1 , ..., yn
Jede Variable yi wird dann mit der Wahrscheinlichkeit yˆi auf 1 gesetzt.
Diesen Prozess nennt man randomisierte Rundung.
Lemma 1 Sei Cj eine Klausel mit k Literalen. Die Wahrscheinlichkeit, dass
sie nach der randomisierten Rundung erfüllt ist, ist mindestens β zˆj ,
mit β = 1 − (1 − 1/k)k .
Beweis: Da wir uns auf eine einzelne Klausel Cj konzentrieren, kann man
ohne Beschränkung der Allgemeinheit annehmen, dass alle Literale darin in
nicht-negierter Form vorkommen und die Klausel die Form yˆ1 , . . . , yˆk hat.
Nach Bedingung (3) gilt:
yˆ1 + . . . + yˆk ≥ zˆj
Die Klausel C ist nach der randomisierten Rundung nur dann unerfüllt,
falls jede Variable yi auf 0 gerundet wurde. Da die VariablenQunabhängig
voneinander gerundet wurden, ist die Wahrscheinlichkeit dafür ki=1 (1 − yˆi ).
Um das Lemma zu beweisen, muss also gezeigt werden, dass:
1−
k
Y
(1 − yˆi ) ≥ βk zˆj
i=1
Q
Der Ausdruck 1− ki=1 (1− yˆi ) ist minimal, falls yˆi = zˆi /k für alle i. Es reicht
also zu zeigen, dass 1 − (1 − z/k)k ≥ βk z für alle k und alle 0 ≤ z ≤ 1 gilt.
Die Funktion f (x) = 1 − (1 − x/k)k ist eine konkave Funktion. Um zu
zeigen, dass sie über dem Intervall [0, 1] für alle Werte von x niemals kleiner
wird als eine lineare Funktion g(x), reicht es zu zeigen, dass dies für die
beiden Endpunkte gilt, also für x = 0 und x = 1. Die Funktion g(z) = βk z
ist eine lineare Funktion.
Satz 3 Gegeben sei eine Instanz des MAX-SAT-Problems. Sei n die erwar-
tete Anzahl der erfüllten Klauseln, die bei linearer Programmierung
und randomisierter Rundung erreicht wird. Sei desweiteren n∗ die maximale Anzahl der gleichzeitig erfüllbaren Klauseln in dieser Instanz.
Dann gilt:
n = (1 − 1/e) ∗ n∗
Dieser Satz stellt eine Verbesserung gegenüber Lemma 1 dar. Wenn man
die beiden vorgestellten Algorithmen vergleicht, stellt man fest, dass jeweils
einer von beiden ein 3/4-Approximationsalgorithmus ist. Die Abbildung 1
zeigt die Vergleichswerte für 1 − 2−k und βk für k = [1, . . . , 5]
k
1
2
3
4
5
1 − 2−k
0.5
0.75
0.875
0.938
0.969
k
1.0
0.75
0.704
0.684
0.672
Abbildung 1: Leistung der beiden Algorithmen im Vergleich
Für eine gegebene Instanz wendet man beide Algorithmen an und wählt
dann die bessere Lösung.
Satz 4 Sei n1 die erwartete Anzahl der erfüllten Klauseln bei einer zufälligen
Variablenbelegung. Sei n2 die entsprechende Anzahl die bei linearer
Programmierung und randomisierter Rundung erreicht wird. Dann gilt:
X
maxn1 , n2 ≥ 3/4
zˆj
j
Beweis: Es reicht zu zeigen, dass:
X X
X X
n1 =
(1 − 2−k ) ≥
(1 − 2−k )zˆj
k Cj
k Cj
∈S k
(5)
∈S k
Und nach der Anwendung von Lemma 1:
X X
n2 =≥
βk zˆj
(6)
k Cj ∈S k
Dann gilt:
X X
X
n1 + n2
=≥ 3/4
zˆj = 3/4
zˆj
2
k
k Cj ∈S
j
(7)
4 Lovász Local Lemma
Lovász Local Lemma ist ein Hilfsmittel der probabilistischen Methode. In diesem Kapitel wird ein Algorithmus vorgestellt, der mit Hilfe des Lovász Local
Lemmas eine erfüllende Zuweisung für eine Instanz des k-SAT-Problems ndet, falls diese bestimmte Eigenschaften besitzt.
Denition 2 k-SAT-Problem. Gegeben ist ein boolescher Ausdruck in kon-
junktiver Normalform (KNF) mit n Variablen und m Klauseln der
Länge k . Gesucht ist eine Belegung der Variablen, die diesen Ausdruck
erfüllt.
Nehmen wir an, wir haben n Ereignisse, von denen jedes mit einer Wahrscheinlichkeit von höchstens 1/2 auftreten kann. Falls die Ereignisse unabhängig sind, ist die Wahrscheinlichkeit dafür, dass keines davon eintritt 2−n .
Das Lovász Local Lemma verallgemeinert diese Aussage für den Fall, dass
jedes der Ereignisse von fast allen Anderen unabhängig ist. Seien ε1 . . . εn
Ereignisse im Wahrscheinlichkeitsraum.
Denition 3 Ein Abhängigkeitsgraph ist ein gerichteter Graph G in dem
jeder Knoten ein Ereignis εi und jede Kante die Abhängigkeit der Ereignisse voneinander darstellt.
Ein Ereignis εi ist unabhängig von einer Ereignismenge S , falls gilt:
\
P r[εi |
εj ] = P r[εi ]
j∈T
wobei T eine beliebige Teilmenge von S ist. Falls ein Ereignis εi unabhängig von allen anderen Ereignissen εj ist, existiert keine Kante (εi , εj ) im
Graphen.
Lemma 2 Lovász Local Lemma : Sei G(V, E) ein Abhängigkeitsgraph für Er-
eignisse ε1 , . . . , εn im Wahrscheinlichkeitsraum. Angenommen, es existiert ein xi ∈ [0, 1] für 1 ≤ i ≤ n, sodass gilt:
Y
P r [εi ] ≤ xi
(1 − xj )
(i,j)∈E
Dann gilt:
"
Pr
n
\
i=1
#
εi ≥
n
Y
(1 − xi )
i=1
Beweis: Sei S eine Teilmenge von Indizes [1, . . . , n]. Wir führen den Beweis durch Induktion nach k = |S|, dass für jedes S und jedes i mit i ∈
/ S
gilt:


\
P r εi |
εj  ≤ xi
j∈S
Denn dann gilt:
"
Pr
n
\
#
εj =
i=1
n
Y
P r(εi |
i=1
i−1
\
j=1
εj ) ≥
n
Y
(1 − xi )
i=1
Der Fall S = ∅ folgt aus unserer Annahme für P r[εi ].
Für den Induktionsschritt sei S1 = j ∈ S : (i, j) ∈ E und S2 = S \ S1 .
Nach der Denition der bedingten Wahrscheinlichkeit gilt:
h
i
T
P r εi ∩ ( j∈S εj )
T
=
P r( j∈S εj )
h
i
T
T
P r εi ∩ ( j∈S1 εj ) ∩ ( m∈S2 εm )
T
T
=
P r(( j∈S1 εj ) ∩ ( m∈S2 εm ))
h
³T
´ ¯T
i
¤
£T
¯
P r εi ∩
j∈S1 εj
m∈S2 εm P r
m∈S2 εm
hT
i
=
¯T
¤
£T
P r j∈S1 εj ¯ m∈S2 εm P r m∈S2 εm


P r εi |
\
εj 
j∈S
T
Nach der Kürzung des gemeinsames Faktors P r( m∈S2 εm ) resultiert:
h
³T
´ ¯T
i


¯
P r εi ∩
ε
ε
\
j
m
j∈S1
m∈S2
hT
i
P r εi |
εj 
=
¯T
¯
Pr
ε
ε
j
m
j∈S
j∈S1
m∈S2
(8)
Betrachten wir den Zähler in (8):
¯

¯
¯ \
P r εi ∩ 
εj  ¯¯
εm 
¯m∈S2
m∈S1


\


\
≤ P r εi |
εm 
(9)
= P r[εi ]
Y
≤ xi
(1 − xi ),
(10)
m∈S2
(i,j)∈E
(11)
£
¡T
¢¤
Die Ungleichung (9) gilt, da P r εi ∩
≤ P r(εi ). Die Gleichung
m∈S1 εj
(10) druckt aus, dass alle εi gegenseitig unabhängig von εm : m ∈ S2 sind.
Nun betrachten wir den Nenner in (8). Nehmen wir an, dass S1 = j1 , . . . , jr
gilt. Für r = 0 ist der Nenner gleich 1. Für r > 0 gilt:


P r εj1 ∩ . . . εjk |
\
εm 

= (1 − P r εj1 |
m∈S2


\
εm )
m∈S2

. . . (1 − P r εjr |εj1 ∩ . . . ∩ εjr−1
\
εm )
m∈S2
≥ (1 − xj1 . . . (1 − xjr ))
Y
(1 − xj ).
≥
(i,j)∈E
Daraus folgt, dass P r[εi |
ren wir, dass:
P r[
n
\
T
j∈S εi ]
≤ xi . Zum Abschluss des Beweises, notie-
εi ] = (1 − P r[εi ])(1 − P r[ε2 |ε1 ]) · · · (1 − P r[εn |
n−1
\
i=1
i=1
εi ]) ≥
n
Y
(1 − xi )
i=1
Korollar 1 Seien ε1 . . . εn Ereignisse im Wahrscheinlichkeitsraum mit
P r[εi ] ≤ p für alle i. Wenn jedes Ereignis unabhängig von allen anderen mit Ausnahme von d Ereignissen mit ep(d + 1) ≤ 1 ist, dann
gilt:
"n #
\
Pr
εi > 0
i=1
Mit Hilfe des Korollars 1 kann gezeigt werden, dass Instanzen des k-SATProblems mit bestimmten Eigenschaften eine erfüllende Variablenbelegung
haben.
Sei I eine Instanz des k-SAT-Problems mit n Variablen und m Klauseln,
die folgende Eigenschaft hat: Jede der n Variablen kommt höchstens in 2k/50
Klauseln vor. Betrachten wir die zufällige Variablenbelegung, die in 3.1 vorgestellt wurde. Jeder Variable wird mit Wahrscheinlichkeit 1/2 ein Wert (1
oder 0) zugewiesen. Sei εi für 1 ≤ i ≤ m das Ereignis, dass bei dieser Belegung die Klausel i nicht erfüllt ist. Da jede Klausel k Literale enthält, ist die
Wahrscheinlichkeit für dieses Ereignis P r[εi ] = 2−k . Dieses Ereignis ist von
den anderen mit Ausnahme denjenigen, die mit ihm gemeinsame Variablen
besitzen, unabhängig. Die Anzahl der Klauseln mit gemeinsamen Variablen
ist für eine Klausel Ci maximal k2k/50 . Nach Korollar 1 mit d = k2k/50 ,
gibt es mit positiver Wahrscheinlichkeit eine Variablenbelegung für I , die
alle Klauseln in I erfüllt. Diese Wahrscheinlichkeit kann aber beliebig klein
sein. Man kann unter Umständen sehr viele Zufallsbelegungen ausprobieren,
bis man eine Lösung ndet. Der Algorithmus, der im Weiteren vorgestellt
wird, läuft polynomiell in m.
Sei G der Abhängigkeitsgraph einer Instanz I des k-SAT-Problems. Jede
Klausel in I stellt einen Knoten in G dar. Zwei Knoten in G sein mit einer
Kante verbunden, falls sie sich eine oder mehrere Variablen teilen. Jeder
Knoten hat höchstens d = k2k/50 Nachbarn in G.
Der Algorithmus verläuft in zwei Schritten. Im ersten Schritt werden die
Variablen der Reihe nach zufällig auf 1 oder 0 gesetzt. Dabei wird nach jeder
Variable geprüft, welche Klauseln dabei erfüllt werden und welche kritisch
werden. Eine Klausel Ci ist kritisch, falls:
• k/2 der Literale in C1 schon gesetzt sind und
• Ci noch nicht erfüllt ist
Die Variablen in einer kritischen Klausel, die noch nicht gesetzt wurden, werden für den zweiten Schritt aufgehoben. Die Klauseln, die nach Schritt 1 noch
nicht erfüllt sind, werden im Folgenden als überlebende Klauseln bezeichnet.
Im Schritt 2 werden nur die verbleibenden Klauseln und nicht gesetzte Variablen behandelt. Für eine Klausel Ci gibt es zwei Gründe nach Schritt 1
zu überleben:
• Ci ist kritisch geworden
• Die Variablen in Ci , die noch nicht gesetzt worden sind, wurden für
Schritt 2 aufgehoben, weil eine andere Klausel, die diese Variablen mit
Ci teilt, kritisch geworden ist.
Somit enthält jede Klausel im Schritt 2 mindestens k/2 nicht gesetzte
Variablen. Die Wahrscheinlichkeit, dass eine Klausel im ersten Schritt kritisch wird, ist höchstens 2−k/2 , da genau k/2 ihrer Literale gesetzt sind und
keines davon die Klausel erfüllt. Das impliziert, dass die Wahrscheinlichkeit,
dass eine Klausel überlebt (d + 1)2−k/2 ist. Betrachten wir den Teilgraphen
G0 von G, der nur die überlebenden Klauseln enthält.
Lemma 3 Alle zusammenhängenden Komponenten in G0 haben mit Wahr-
scheinlichkeit 1 − o(1) die Gröÿe höchstens z log m für eine Konstante
z.
Beweis: betrachten wir eine Klauselmenge R = C1 , ..., Cr , in der jedes
Klauselpaar in G eine Entfernung von mindestens 4 hat. Eine Klausel Ci
gehört nur dann zu den überlebenden Klauseln, falls mindestens eine der
d + 1 Klauseln mit einer Entfernung von höchstens 1 zu dieser Klausel kritisch geworden ist. Für jede Klausel Ci sei Di eine kritische Klausel mit
einer Entfernung von höchstens 1 von Ci . Da alle Klauseln in der Menge R
mindestens die Distanz 4 in G haben, müssen D1 , ..., Dr unterschiedlich sein.
Es gibt (d + 1)r Möglichkeiten um Di 's auszuwählen. Da jede Klausel
Di eine Entfernung von höchstens 1 zu der Klausel Ci hat, haben die Klauseln D1 , ..., Dr eine Entfernung von mindestens 2 voneinender und haben
deswegen disjunkte Variablenmengen. Die Wahrscheinlichkeit, dass alle Di
kritisch werden beträgt höchstens 2−rk/2 . Daraus folgt, dass für die Menge
aus r Klauseln, die paarweise eine Entfernung von mindestens 4 in G haben,
die maximale Wahrscheinlichkeit dass sie alle nach dem Schritt 1 überleben,
gegeben ist durch:
[(d + 1)2−k/r ]r
(12)
Eine Teilmenge T von Klauseln wird als ein 4-Baum bezeichnet, falls gilt:
1. Zwischen je zwei beliebigen Knoten in G ist die Entfernung für jedes
Klauselpaar in T mindestens 4.
2. Falls die Knoten, die eine Entfernung von genau 4 von einander haben,
verbunden werden, wird T zusammenhängend.
Die Abbildung 2 zeigt ein Beispiel für einen 4-Baum in einem Abhängigkeitsgraphen.
Die Knoten {A, B, C} bilden einen 4-Baum. Sie haben paarweise eine
Entfernung von mindestens 4 voneinander.(AB=4, BC=5, AC=4). Falls
man in dieser Knotenmenge die Knoten verbindet, die die Entfernung von
genau 4 voneinander haben, so erhällt man einen zusammenhängenden
Graphen.
Abbildung 2: 4-Baum
Um die obere Grenze für die Anzahl der 4-Bäume der Gröÿe r in G
zu berechnen, bilden wir einen Graphen G4 wie folgt: Jeder Knoten in G4
repräsentiert eine Klausel. Ein Knotenpaar in G4 hat eine Verbindungskante,
falls es in G eine Entfernung von genau 4 aufweist. Die Abbildung 3 zeigt
G4 für den beispielhaften Abhängigkeitsgraphen aus der Abbildung 2.
Abbildung 3: G4 -Teilgraph
Jeder Knoten in G4 hat O(d4 ) Nachbarknoten. Die Anzahl der zusammenhängenden Teilgraphen der Gröÿe r in G4 beträgt
am(d4 )2r = amd8r
(13)
für ein konstantes a. Die Anzahl der 4-Bäume der Gröÿe r in G ist nicht
gröÿer, als die Anzahl der zusammenhängenden Teilgraphen der Gröÿe r in
G4 .
Die Multiplikation von (12) und (13) gibt uns die Wahrscheinlichkeit
an, dass ein 4-Baum der Gröÿe mindestens b log(m) nach dem ersten Schritt
überlebt. Diese Wahrscheinlichkeit beträgt o(1) für eine genügend groÿe Konstante b.
Sei T der maximale 4-Baum in G. Es gibt in jedem Teilgraphen von G
höchstens 3d3 −1 Knoten mit einem Abstand von höchstens 3 zu den Knoten
in T . Daraus folgt, dass die Wahrscheinlichkeit, dass ein Teilgraph der Gröÿe
3bd3 log m überlebt, o(1) ist.
Wenn die Anzahl der zusammenhängenden Komponenten nach Schritt 1
gröÿer ist als diese Grenze (3bd3 log m), wiederholen wir ihn. Die erwartete
Anzahl der Wiederholungen ist kleiner als 2.
Jede überlebende Komponente hat eine Gröÿe von O(log m). Zwei überlebende Klauseln, die sich in verschiedenen Komponenten benden, können
keine gemeinsame Variablen besitzen. Somit ist die Anzahl der nicht gesetzten Variablen in diesen Komponenten O(log m). Es gibt 2O(log(m)) mögliche
Variablenbelegungen in einer Komponente. Man kann alle diese Möglichkeiten in polynomieller Zeit durchgehen, bis man eine gefunden hat, die alle
Klauseln innerhalb der Komponente erfüllt. Da es keine Variable gibt, die
von zwei oder mehr Komponenten geteilt wird, kann dieser Vorgang für jede
Komponente einzeln wiederholt werden.
Satz 6 Der oben beschriebene Algorithmus ndet eine erfüllbare Variablenbelegung für eine Instanz I des k-SAT-Problems in der eine Variable
in höchstens 2k/50 Klauseln enthalten sein darf, in polynomieller Zeit
in m.
Die Konstante 50 in dem Satz 6 könnte verbessert werden. Der Grad, zu dem
es gemacht werden kann, ist abhängig davon, welches Ziel man hat. Wenn
es darum geht, die Existenz einer Lösung zu beweisen, kann diese Konstante verstärkt werden. Damit der oben dargestellte Algorithmus funktioniert,
gibt es aber keinen besseren Wert für sie. Diese Eigenschaft haben alle Algorithmen, die mit Hilfe des Lovász Local Lemmas Objekte mit bestimmten
Eigenschaften nden. Die Konstante, die man braucht, um die Existenz einer
Lösung zu beweisen ist besser, als die im zugehörigen Algorithmus.
Literatur
[1] Motwani, Raghavan. Randomized Algorithms. Cambridge University
Press, 1995.
[2] Noga Alon. A parallel algorithmic version of the local lemma. Random
Structures Algorithms, 2(4):367-378, 1991
Seminar randomisierte
Algorithmen,
Fingerprinttechniken
Christian Horenkamp
1
Einleitung
Im Folgenden geht es um die Benutzung von randomisierten Algorithmen
bei nicht trivialen algebraischen Sachverhalten. Im Vordergrund steht die
Gleichheit von algebraischen Objekten zu zeigen, wie z.B. Gleichungen von
Polynomen in mehreren Variablen. Dazu werden zuerst zwei sogenannte Fingerprinttechniken eingeführt und anhand von Beispielen illustriert. Wir werden danach die beiden Techniken anhand von Problemen vergleichen und
Vor- und Nachteile rausarbeiten. Es werden an vielen Stellen gezielt Anwendungsbeispiele von Fingerprinttechniken aufgeführt.
In dieser Arbeit betrachten wir immer endliche Körper um Vergleiche von
zwei algebraischen Objekten über diesen Körper überhaupt durchführen zu
können.
Alle vorgestellten Techniken bedienen sich dem Prinzip des Fingerprints. Dabei werden zwei Elemente a und b aus einer endlichen Menge U , welche nur
direkt mit hohem Aufwand verglichen werden können, durch eine Abbildung
φ : U → V in eine endliche Menge V mit kleinerer Kardinalität abgebildet.
Die Bilder φ(a) und φ(b) können dann mit weniger Aufwand verglichen werden und man hofft durch die Aussage φ(a) = φ(b) auf a = b schließen zu
können. Das Bild eines Elementes a unter φ wird dabei als Fingerprint bezeichnet und die Funktion φ selbst als Fingerprintfunktion. Das Verfahren
ist schematisch in Abbildung 1 dargestellt. Aus der Tatsache heraus, dass
wir Abbildungen von einer Menge großer Kardinalität in eine Menge mit
kleiner Kardinalität benutzen, wird diese Abbildung im Allgemeinen nicht
injektiv sein. Dadurch ist die Aussage φ(a) = φ(b) ⇒ a = b im Allgemeinen
falsch. Durch die zufällige Wahl der Fingerprintfunktion können wir diesen
Fehler kontrollieren.
In der Arbeit werden zu den behandelten Beispielen auch immer die besten
bekannten, deterministischen Algorithmen durch ihre Laufzeit angegeben.
Dabei wird aber nicht auf den Algorithmus selbst eingegangen sondern nur
die Laufzeit betrachtet um einen Vergleich zu den Fingerprint Methoden zu
erhalten.
2
Freivalds Technik
Die in diesem Abschnitt vorgestellte Fingerprinttechnik geht auf Freivald
zurück. Er führte einen Algorithmus ein, welcher in Zeit O(n2 ) mit einer
gewissen Wahrscheinlichkeit die Gleichheit zweier Matrizen überprüft. Wir
führen den Algorithmus zunächst allgemein auf der Menge der Abbildungen
MV = {f |f : V → V Abbildung} auf einem Vektorraum V ein. Durch die
Anwendung des Algorithmus auf Teilmengen von MV können wir dann die
Gleichheit zweier Matrizen überprüfen und erhalten den ursprünglichen Algorithmus von Freivald.
Seien also f und g aus MV und wir wollen die Gleichheit zeigen. Dazu betrachten wir die Menge F := {Ap | Ap : MV → V, Ap (f ) 7→ f (p) ∀ p ∈ V }. Sie
stellt uns die Menge aller möglichen Fingerprintfunktionen zur Verfügung,
aus der wir gleichverteilt ein Element wählen wollen. Sei also Ap zufällig
gleichverteilt gewählt. Es gilt nun
f = g ⇒ Ap (f ) = Ap (g).
Die Rückrichtung gilt im Allgemeinen nicht. Wir werden aber durch eine zufällige Wahl der Fingerprintfunktion die Wahrscheinlichkeit, dass die
Rückrichtung stimmt steuern können. Wir erhalten den folgenden Algorithmus für gegebenes f, g ∈ MV :
1. Wähle Ap gleichverteilt aus F
2. Setze x := Ap (f ) und y := Ap (g)
3. Gilt x = y so gibt “Ja” aus ansonsten “Nein”
Wir werden im weitern Verlauf diesen Algorithmus als die Freivald Technik
referenzieren. Dies ist historisch nicht richtig, aber zum besserem Verständnis wichtig.
Im Gegenzug dazu, dass der Algorithmus keine exakten Werte liefern kann,
wollen wir einen Geschwindigkeitsvorteil erhalten. Das erreichen wir in den
Fällen, in dem wir nur Teilmengen von MV betrachten. Dies ist zum Beispiel
U
a
b
V
F(a)
F(b)
Abbildung 1: Schema der Fingerprinttechnik
der Fall, wenn V = Kn für einen Körper K gilt und wir M ⊂ MV als die
Teilmenge der n × n Matrizen betrachten. Dann wird der Vergleich zweier
Matrizen auf einen Vergleich zweier Vektoren zurückgeführt, was uns einen
Geschwindigkeitsvorteil liefert.
Zu beachten ist nur noch, dass die Auswertungen der Abbildung Ap nicht
den Geschwindigkeitsvorsprung aufbrauchen. Um aber konkrete Aussagen
über die Laufzeit treffen zu können, betrachten wir spezielle Teilmengen
von MV , was uns in dem nächsten Unterabschnitt den ursprünglichen Algortihmus von Freivald liefert.
2.1
Verifikation von Matrixidentitäten
Sei in diesem Unterabschnitt nun V = Kn und M (n, K) ⊂ MV für einen
Körper K. M (n, K) steht hierbei für die Menge der n × n Matrizen über K.
Betrachten wir jetzt zwei Matrizen und wollen deren Gleichheit überprüfen,
so können wir mit der Freivald Technik schon einen Geschwindigkeitsvorsprung erzielen. Aber die wahre Stärke kann diese Technik entfalten, wenn
die Matrizen nicht explizit gegeben sind. Deshalb soll viel mehr verglichen
werden, ob eine algebraische Gleichung über M (n, K) erfüllt wird, wie zum
Beispiel ein Produkt von zwei Matrizen. Die Laufzeit des naiven Algorithmus
zur Berechnung des Produktes zweier Matrizen beträgt O(n3 ). Der schnellste
bekannte deterministische Algorithmus benötigt Zeit O(n2,376 ). Wir wollen
jetzt feststellen ob AB = C für geeignete A, B, C ∈ M (n, K) gilt, ohne direkt das Matrixprodukt ausrechnen zu müssen. Wir werden dazu aus einer
beliebigen Teilmenge S n ⊂ Kn zufällig einen Vektor r ∈ S n wählen. Der
Vektor r liefert uns die Fingerprintfunktion φ : M (n, K) → Kn , M 7→ M r.
Dann berechnen wir x := φ(C) und y := φ(AB) und vergleichen x mit y.
Es gilt φ(AB) = Aφ(B) daraus folgt, dass die Auswertung der Fingerprintfunktion von einem Matrix Produkt zwei Matrix-Vektor Produkte sind, was
uns die Berechnung von x und y in Zeit O(n2 ) ermöglicht. Wir erhalten eine
Gesamtlaufzeit von O(n2 ) da der Vergleich von zwei Vektoren in Zeit O(n)
möglich ist.
Die Fehlerschranke wird näher angegeben im folgenden Satz.
Satz 1 Seien A, B und C n × n-Matrizen über dem Körper K so dass
A · B 6= C gilt. Sei weiter S eine endliche Teilmenge von K. Dann gilt für
ein r welches zufällig gleichverteilt aus S n gewählt wird:
P [ABr = Cr] ≤
1
.
|S|
Beweis: Sei D := AB−C. D ist nicht die Null Matrix nach Vorraussetzung.
Die Wahrscheinlichkeit, dass ABr = Cr gilt ist wegen den Matrix-Vektor
Rechenregeln gleich der Wahrscheinlichkeit dass Dr = 0 gilt. Also
P [ABr = Cr] = P [Dr = 0].
P
Es gilt Dr = 0 genau dann, wenn für alle i ∈ {1, ..., n} nj=1 di,j ri = 0 gilt.
Wobei D = (di,j )i,j gilt. Wir nehmen ohne Einschränkung an, dass die erste
Zeile von D nicht gleich 0 ist, da D nicht die Nullmatrix ist. Außerdem sei
ohne Einschränkung d1,1 , ..., d1,k 6= 0 und d1,k+1 , ..., d1,n = 0 für ein festes k
größer als 0. Dann gilt durch umstellen
P
− ki=1 d1,i ri
.
r1 =
d1
Gehen wir davon aus, dass die Einträge des Vektor r nacheinander zufällig
gleichverteilt gewählt werden, beginnend mit dem Eintrag rn , so können wir
die Technik des deferred decisions aus Kapitel 3.5 des Buches [MotRag95]
anwenden. Daher wissen wir, dass die Wahrscheinlichkeit,
dass Dr = 0 gilt,
P
−
k
d
r
i=1 1,i i
ist, bei zuvor gewählten
gleich der Wahrscheinlichkeit, dass r1 =
d1
r2 , ..., rn . DaP
r1 gleichverteilt aus S gewählt wird ist die Wahrscheinlichkeit,
−
k
d
r
i=1 1,i i
gilt nicht größer als
dass r1 =
d1
Behauptung des Satzes.
2.2
1
|S| .
Wir erhalten somit also die
Verifikation von Polynomidentitäten
In diesem Abschnitt benutzen wir den Algorithmus von Freivald um Identitäten von Polynomen festzustellen. Wir betrachten dabei Polynome in
mehreren Variablen über den Polynomring K[x1 , x2 , ..., xn ]. Seien P1 , P2 und
P3 Polynome aus K[x1 , x2 , ..., xn ] vom Grad d. Wir möchten nun die Gleichung P1 P2 = P3 verifizieren, ohne das Produkt P1 P2 berechnen zu müssen.
Die Berechnung von P1 P2 ist in O(n log n) möglich.
Die Grundidee des Algorithmus basiert wieder auf der Freivald Technik.
Wir wollen nicht direkt P1 P2 = P3 überprüfen, sondern ob P1 P2 − P3
mit dem Nullpolynom übereinstimmt. Diese Umformulierung des Problems
ermöglicht es uns im Fall univariater Polynome spezielle Eigenschaften, des
Nullpolynoms auszunutzen. Wir wählen wieder gleichverteilt aus einer Teilmenge S von K die Werte r1 , ..., rn aus. Dieses liefert uns die Fingerprintfunktion φ : K[x1 , x2 , ..., xn ] → K mit φ(P ) = P (r1 , ..., rn ). Nach dem Algortihmus berechnen wir also φ(P1 P2 − P3 ) und φ(0). Es gilt φ(P1 P2 − P3 ) =
φ(P1 )φ(P2 ) − φ(P3 ) und φ(0) = 0, deshalb werden zur Berechnung der Fingerprintfunktion erst die Polynome ausgewertet und dann eine Multiplikation und eine Subtraktion in K ausgeführt. Dies ist deterministisch in Zeit
O(d) möglich. Im Fall univariater Polynome liegt die Wahrscheinlichkeit,
2d
, denn das Polynom
dass das Ergebnis des Algorithmus stimmt unter |S|
Q := P1 P2 − P3 hat höchstens den Grad 2d und ist genau dann Nullpolynom, wenn wir mehr als 2d verschiedene Nullstellen über C finden.
Um nun die Aussagen der Korrektheit unseres Algorithmen zu untermauern
wird der folgende Satz gezeigt.
Satz 2 (Schwartz-Zippel Theorem) Sei Q(x1 , ..., xn ) ∈ K[x1 , ..., xn ] ein
Polynom in mehreren Variablen vom Grad d. Sei weiter S ⊂ K eine endliche
Teilmenge. Für r1 , ..., rn gleichverteilt und unabhängig aus S gewählt gilt:
P [Q(r1 , ..., rn ) = 0|Q(x1 , ..., xn ) 6= 0] ≤
d
.
|S|
Beweis: Der Beweis wird per Induktion über die Anzahl der Variablen
geführt.
n = 1 Betrachten wir also univariate Polynome Q : K → K vom Grad d.
Unter der Bedingung Q 6= 0 gibt es höchstens d verschiedene Nullstellen von Q. Das heißt natürlich auch, dass die Wahrscheinlichkeit, dass
Q(x) = 0 unter der Bedingung Q 6= 0 mit einem x ∈ S gleichverteilt
d
ist.
gewählt kleiner als |S|
n − 1 → n Die Behauptung gelte nun für alle Polynome, mit weniger als n Variablen. Wir betrachten jetzt ein Polynom Q : Kn → K in n Variablen
mit Höchstgrad d. Wir können die Variable x1 aus Q(x1 , x2 , ..., xn ) ausklammern und erhalten k Polynome Qi über den Variablen x2 , ..., xn
wobei k der größte Exponent von x1 in Q(x1 , ..., xn ) ist. Die Polynome
genügen der Identität
Q(x1 , ..., xn ) =
k
X
xi1 Qi (x2 , ..., xn ).
i=0
Es gilt per Definition auch k ≤ d und Qk (x2 , ..., x3 ) 6= 0 nach Wahl
von k als höchsten Exponent von xi . Der Grad eines jeden Polynoms
xi1 Qi (x2 , ..., xn )∀i ∈ {1, ..., k} ist höchstens d und somit ist der Grad
von Qk (x2 , ..., xn ) höchstens d − k. Zusammen mit der Induktionsverankerung folgt
P [Qk (r2 , ..., rn ) = 0] ≤
d−k
.
S
(1)
Nehmen wir an, dass Qk (r2 , ..., rn ) 6= 0 gilt. Betrachten wir das Polynom
k
X
xi1 Qi (r2 , ..., rn ).
q(x1 ) = Q(x1 , r2 , ..., rn ) =
i=0
Das Polynom hat wegen Qk (r2 , ..., rn ) 6= 0 den Grad k. Wegen k ≤ d
folgt mit der Induktionsvorraussetzung
P [Q(r1 , ..., rn ) = 0|Qk (r2 , ..., rn ) 6= 0] ≤
k
.
|S|
Betrachten wir die totale Wahrscheinlichkeit, so gilt allgemein
P [A] = P [A|B] · P [B] + P [A|B] · P [B].
(2)
Da P (E) ≤ 1 für alle Ereignisse E gilt, können wir P (A) abschätzen
und erhalten mit A = (Q(r1 , ..., rn ) = 0), B = (Qk (r2 , ..., rn ) = 0) und
den Gleichungen 1 und 2
P (Q(r1 , ..., rn ) = 0) ≤ P (B) + P (A|B)
d−k
k
k
≤
+
=
|S|
|S|
|S|
Anstatt ein Produkt von Polynomen mit einem Polynom zu vergleichen
können auch zwei Polynome direkt verglichen werden. Dieses macht aber
nur Sinn, wenn die Polynome nicht expliziet vorliegen und die Umwandlung
in die expliziete Form zu lange dauern würde. Dies kann zum Beispiel ausgenutzt werden, um zu zeigen dass die Determinante der Vandermonde Matrix
eine spezielle Form hat, was wir im nachfolgendem Abschnitt sehen.
2.3
Die Determinante der Vandermonde Matrix
In diesem Beispiel werden wir eine spezielle Formel für die Determinante
der Vandermonde Matrix verifizieren. Die Vandermonde Matrix M wird
definiert für gegebene x1 , ..., xn ∈ K durch
M (x1 , ..., xn )i,j := (xji )
Sie wird in der Numerik zur Poylnominterpolation verwendet und hat daher
nicht nur theoretische Bedeutung.
Q
Die Determinante ist allgemein gegeben durch det(M ) = 1≤j<i≤n (xi − xj ).
In der Algebra wird der Beweis dieser Identität per Induktion erbracht.
Wir gehen aber davon aus, dass uns der Beweis
nicht zur Verfügung steht.
Q
Deshalb lösen wir das Problem det(M ) − 1≤j<i≤nQ
(xi − xj ) = 0 mit der
Technik aus 2.2, denn die Determinante von M und 1≤j<i≤n (xi − xj ) sind
Polynome die schwer direkt zu vergleichen aber schnell in festen Punkten
auswertbar sind.
3
Eine weitere Fingerprinttechnik
Nachdem wir uns mit der Freivald Technik vertraut gemacht haben, führen
wir eine zweite Fingerprinttechnik ein. Sie wird nicht so allgemein eingeführt,
wie die Freivald Technik. Sie wird vielmehr aus einem gegebenen Problem
heraus entwickelt. Wir werden später sehen, dass diese Technik unter bestimmten Vorraussetzungen besser ist, als die Freivald Technik.
3.1
Gleichheit von Zeichenketten
In diesem Abschnitt lösen wir uns zunächst von den algebraischen Objekten
und führen eine Fingerprinttechnik ein, die uns ermöglicht die Gleichheit von
Zeichenketten festzustellen. Ein Einsatzgebiet ist die Datenreplikation, hierbei werden große Menge von Daten mehrfach an verschiedenen Orten gespeichert. Um eine Konsistenz zu wahren wird in bestimmten Abständen eine
Verifikation der Daten vorgenommen. Da der Netzverkehr zwischen den oft
physikalisch getrennten Speicherstellen teuer ist, muss es möglich gemacht
werden mit einer kleineren Anzahl Bits den gesamten Datenbestand mit hoher Wahrscheinlichkeit zu verifizieren. Deshalb wird in diesem Kapitel mehr
Wert auf die Menge der übertragenen Bits gelegt als auf die Laufzeit des
Algorithmus. Dies korrespondiert aber in vielen Fällen mit der Laufzeit. Wir
wollen im Folgenden zwei Datensätze a := (a1 , ..., an ) und b := (b1 , ..., bn ),
mit ai , bi ∈ {0, 1} ∀i ∈ {1, ..., n}, auf
P Gleichheit überprüfen.
P Dazu interpretieren wir die Datensätze als ã := ni=0 ai 2i+1 und b̃ := ni=0 bi 2i+1 , was uns
jeweils eine ganze Zahle mit n−Bit liefert. Es ist klar, dass a = b gilt, genau
dann wenn ã = b̃ gilt. Betrachten wir die Fingerprintfunktion Fp : K → K
mit Fp (x) = x mod p für eine Primzahl p. So wollen wir aus der Tatsache,
a 6= b auf Fp (ã) 6= Fp (b̃) schließen. Dies ist im Allgemeinen sicherlich falsch.
Aber der Fingerprint Fp (ã) bzw. Fp (b̃) besteht nur aus O(log(p)) Bits, was
uns einen gewissen Fehler rechtfertigen lässt. Um vernünftige Aussagen über
die Korrektheit treffen zu können, wird die Primzahl p zufällig gewählt. Betrachten wir aber zunächst ein Ergebnis aus der Zahlentheorie.
Sei π : N → N die Funktion, die eine Zahl k auf die Anzahl der Primzahlen
kleiner als k schickt. Aus der Zahlentheorie wissen wir, dass limk→∞ π(k) =
k
ln(k) gilt. Ausgehend von dieser Aussage können wir den nachstehenden Satz
folgern.
Satz 3 Für a, b ∈ N, großes t ∈ R und τ := tn log tn gilt
1
n
=O
.
P [Fp (a) = Fp (b)|a 6= b] ≤
π(t)
t
Beweis: Gegeben seien die beiden ganzen Zahlen a und b. Betrachten wir
c := |a−b|, dann gilt die Aussage (a 6= b ⇒ Fp (a) 6= Fp (b)) genau dann nicht,
wenn c 6= 0 und p teilt c. Wir betrachten also zunächst einmal das Problem,
wieviele Primzahlen c teilen können. Dazu definieren wir uns N := 2n . Es
gilt, dass N die größte Zahl ist, die wir mit n-Bits darstellen können. daraus
folgt c ≤ N . Desweiteren gilt, für N , dass die Anzahl disjunkter Primteiler
von N kleiner als n ist. Denn jede Primzahl ist größer als 1 und hätte N
mehr als n disjunkte Primteiler, so würde N ≥ 2n gelten, da alle disjunkten
Primteiler größer als 2 sind.
Wählen wir einen obere Schranke τ für die Wahl der Primzahl p welche
größer ist als n = log N . Die Anzahl aller Primzahlen kleiner als τ ist gegeben
τ
durch π(τ ) ∼ ln(τ
) . Da p ≤ τ gilt, ist die Anzahl der Bits, die übertragen
werden müssen kleiner als O(log τ ). Mit τ = tn log tn für große t, gilt dann
1
n
=O
P [Fp (a) = Fp (b)|a 6= b] ≤
π(τ )
t
da n die Höchstzahl aller möglichen Primteiler von τ ist und π(τ ) die Gesamtzahl aller Primzahlen kleiner als τ . Wegen π(τ ) ∼ lnτ τ , da t groß gewählt
log tn)
log tn)
)
= n·ln(tn
= 1t · ln(tn
= O 1t und somit die Behaupist, gilt n·ln(τ
τ
tn log tn
log tn
tung.
Wir müssen uns nur noch über die Anzahl der zu übertragenden Bits kümmern. Nach den Gesetzen des Logarithmus und wegen τ = tn log tn gilt dass
die Anzahl der übertragenenen Bits gleich O(log(t) + log(n)) ist. Wählen
wir t = n, so werden nur O(log(n)) Bits übertragen was gegenüber O(n)
Bits eine enorme Einsparung ist.
Ein Problem, welches bei dieser Fingerprinttechnik zu beachten ist, ist die
zufällige Wahl von Primzahlen, was nicht sehr trivial ist.
4
Vergleich der beiden Fingerprinttechniken
In diesem Abschnitt wollen wir die beiden Fingerprinttechniken vergleichen.
Dazu betrachten wir verschiedene Probleme, auf denen wir die beiden Techniken gleichermaßen anwenden können. Betrachten wir zunächst das Problem des Vergleichs von zwei Zeichenketten.
4.1
Vergleich von zwei Zeichenketten
Es sind nun zwei endliche Zeichenketten a = (a1 , ..., an ) und b = (b1 , ..., bn )
zu vergleichen. Um die Zeichenketten in den Kontext der Freivald Technik
bringen zu können, betrachten wir das endliche Alphabet Σ aus denen die
Zeichenketten gebildet sind. Da Σ endlich ist, können wir jedes Element mit
einem Element aus Γ = {1, 2, ..., k − 1} mit k = |Σ| identifizieren, sei also
ohne Einschränkung ai ∈PΓ ∀ i ∈ {1, 2, ..., n}. Betrachten
die beiPn−1 wir jetzt
n−1
i und B(z) :=
i . Dann gilt
den Polynome A(z) :=
a
z
b
z
i=0 i+1
i=0 i+1
A(z) = B(z) genau dann, wenn a = b gilt, da Polynome genau dann gleich
sind, wenn ihre Koeffizienten gleich sind.
Um die Freivald Technik anwenden zu können betrachten wir die Polynome
A und B über den Körper Zp für eine feste Primzahl p. Dabei wird p so
gewählt, dass p > 2n und p > k gilt. Dadurch ist gewährleistet, dass die Polynome nur gleich sein können, wenn ihre Koeffizienten gleich sind. Es wird
dann eine Zahl r ∈ Zp zufällig gleichverteilt gewählt und die beiden Fingerprints A(r) und B(r) berechnet. Gilt a = b so gilt natürlich A(r) = B(r). Auf
der anderen Seite gilt a 6= b so, sind die beiden Polynome nicht gleich und
die Wahrscheinlichkeit, dass die beiden Fingerprints gleich sind, ist kleiner
als np . Da wir p so gewählt haben, dass p > 2n gilt, folgt dass die Wahrscheinlichkeit, dass die beiden Polynome gleich sind unter 12 liegt. Werden
die Zeichenketten als Binärwerte betrachtet, also k = 2 und p ≤ n, so ist der
Fingerprint eine ganze Zahl kleiner als n und wir können den Fingerprint
mit O(log(n)) Bits kodieren, was uns die Anzahl der zu übertragenden Bits
liefert.
Zum Vergleich wird bei der zweiten Fingerprinttechnik z durch z = 2 fixiert.
Und als Fingerprint wird A(2) mod q und B(2) mod q berechnet. Wir haben schon gesehen, dass durch diese Technik, der Vergleich zweier n−Bit
Zeichenketten auf den Verlgeich von O(log(n))−Bits reduziert werden kann.
Wir erhalten also zusammen, dass es keinen Unterschied macht, welche Fingerprinttechnik bei diesem Problem gewählt wird. Aber es gibt auch Anwendungen, in dem die zweite Technik besser abschneidet. Dies sehen wir
in dem folgendem Abschnitt.
4.2
Suche von Zeichenketten in einem Text
Betrachten wir nun das Problem in einem gegebenen Text X = x1 x2 ...xn
eine Zeichenkette Y = y1 y2 ...ym zu finden, wobei m < n gilt. Wir betrachten
von vornherein nur Zeichen über dem Alphabet Σ = {0, 1}, was keine Einschränkung darstellt. Wir möchten also ein j finden mit 1 ≤ j ≤ n − m + 1
und xj+i−1 = yi ∀ i ∈ {1, ..., m}. Naiv können wir das Problem in Zeit O(nm)
lösen, in dem wir für jedes j ∈ {1, .., n − m + 1} die Bedingung xj+i−1 =
yi ∀i ∈ {1, ..., m} überprüfen. Der Einfachheit halber definieren wir uns die
Zeichenkette X(j) := xj xj+1 ...xj+m−1 ∀j ∈ {1, ..., n − m + 1} und definieren
unser ursprüngliches Problem durch das Auffinden eines j ∈ {1, ..., n−m+1},
mit X(j) = Y . Ausserdem setzen wir fest, dass wir das minimale j finden
möchten, dass und X(j) = Y liefert um eine Eindeutigkeit in der Lösung
zu erhalten. Der naive Algorithmus würde alle X(j) mit Y vergleichen. Wir
wollen aber mit einer Fingerprintfunktion F , den Fingerprint F (Y ) mit allen
Fingerprints F (X(j)) für alle j ∈ {1, ..., m + n − 1} vergleichen. Wir werden die Fingerprintfunktion so wählen, dass mit hoher Wahrscheinlichkeit
(X(j) 6= Y ⇒ F (X(j)) 6= F (Y )) gilt und sie leicht zu berechnen ist.
Benutzen wir die Fingerprintfunktion der zweiten Fingerprinttechnik. Wir
setzen also ein z ∈ {0, 1} fest und wählen eine Primzahl p kleiner als eine
obere Schranke τ und erhalten die Fingerprintfunktion F (Y ) := Fp (Y ) = Y
mod p wobei Y als eine m−stellige Binärzahl aufgefasst wird. Die Fehlerschranke dieses Algorithmus wurde schon in Satz 3 gezeigt. daraus folgt,
dass
m log τ
m
=O
P [Fp (Y ) = Fp (X(j))|Y 6= X(j)] ≤
π(τ )
τ
gilt. Da für jedes j ein Fehler bei der Überprüfung auftritt, gilt insgesamt,
dass die Fehlerschranke bei O( nm τlog τ ) liegt. Bei der Wahl von τ durch
τ := n2 m log n2 m erhalten wir eine Fehlerschranke von O( n1 ).
Im Folgenden untersuchen wir nun die Laufzeit. Dazu nutzen wir bestimmte
Eigenschaften der Fingerprintfunktion aus. Es gilt zunächst allgemein
X(j + 1) = 2(X(j) − 2m−1 xj ) + xj+m
(3)
wegen den Eigenschaften der Binärdarstellung. Ausgehend von dieser Gleichung können wir dann effektiv Fp (X(j + 1)) berechnen, denn es gilt
Fp (X(j + 1)) = 2(Fp (X(j)) − 2m−1 xj ) + xj+m
mod p.
Das heißt, wenn wir den Fingerprint von X(j) berechnet haben, dass die
Berechnung des Fingerprints von X(j + 1) nur Zeit O(1) benötigt. Daraus
ergibt sich eine Laufzeit des gesamten Algorithmus von O(n + m).
Würde man im Gegensatz die erste Fingerprinttechnik verwenden, könnte
man die Eigenschaft aus Gleichung 3 nicht ausnutzen und die Berechnung
des Fingerprints wäre nicht in Zeit O(1) möglich und wir würden die Gesamtlaufzeit von O(mn+m) benötigen. Dadurch ist in diesem Fall die zweite
Technik, die Technik der Wahl.
Literatur
[MotRag95]
Randomisierte Algorithmen; Motwani, Raghavan; Cambridge University Press, 1995
Diskretisierung eines Bereiches einer Ebene
Peter Isaak
1
Einleitung
In dieser Ausarbeitung werden 2 Möglichkeiten zu Diskretisierung von Bereichen in der Ebene präsentiert, die durch mehrere Segmente unterteilt werden. Zum einen wird die randomisierte Trapezierung vorgestellt, die aus einer
Menge von Segmenten einen planaren Graphen aufbaut, und zum anderen
wird das Random Sampling vorgestellt, mit dem man in der Ebene, die durch
Segmente unterteilt ist, Anfragen verarbeiten kann, in welchem Bereich der
Ebene sich ein Punkt bendet. Beide Methoden sind aus [1] entnommen.
2
2.1
2 verschiedene Ansätze
Trapezierung mittels randomisierter inkrementeller
Konstruktion
Eine einfache Methode beim Aufbau randomisierter geometrischer Algorithmen ist die Methode der randomisierten inkrementellen Konstruktion. Hier
werden die
n
Objekte - die unsere Eingabe darstellen - einzeln betrachtet,
und zwar in einer zufälligen Reihenfolge. Es wird eine Teillösung berechnet,
bei der man durch Hinzunahme des nächsten Objektes die nächste Teillösung
berechnet, bis man nach
n
Schritten bei der Lösung angekommen ist. Diese
Methode hat groÿe Ähnlichkeit mit gängigen Algorithmen mit dem Unterschied, daÿ in der Praxis die Objekte oftmals in der Reihenfolge verarbeitet
werden, in der sie ankommen, während in diesem Fall eine randomisierte
Folge betrachtet wird.
2.1.1
Funktionsweise
Nehmen wir an, wir benden uns in einer Ebene. In dieser Ebene bendet
sich eine Menge von Liniensegmenten - diese Menge nennen wir
S . Zusätzlich
gehen wir davon aus, daÿ keine 2 Liniensegmente die gleichen x-Koordinaten
haben. Sei
k
die Anzahl der Punkte, in denen sich 2 oder auch mehr Linien
kreuzen. Wir ziehen durch jeden Endpunkt und durch jeden Kreuzungspunkt
eine vertikale Linie. Diese Vertikalen gehen nur soweit, bis sie auf ein anderes
Segment stoÿen. Es kann auch vorkommen, daÿ eine Linie bis in die Unendlichkeit geht. Das Ergebnis nennt man Trapezierung. Die Ebene ist in eine
Abbildung 1: Trapezierung
Menge von Trapezen unterteilt, manche davon mit unendlicher Ausdehnung.
Begrenzt man jetzt die Ebene künstlich (so daÿ alle Segmente natürlich innerhalb der Begrenzung liegen), so kann man sich die resultierende Trapezierung
als planaren Graphen vorstellen, bei dem die Knoten
1. an den Endpunkten der Segmente
2. an Kreuzungspunkten der Segmente
3. an Kreuzungspunkten der Vertikalen mit der Begrenzung
liegen.
S die Eingabe. Ohne Beschränkung der Allgemeinheit nehmen wir an, daÿ
keine 2 Endpunkte der Linien in S gleiche x-Koordinaten haben. Generiere als
erstes eine zufällige Permutation von S . Sei dabei si das i-te Segment dieser
Permutation. Sei weiterhin Si deniert als {s1 , ..., si }. Nach Abschluÿ des iten Schrittes hat der Algorithmus dann trap(Si ) berechnet, indem er während
des i-ten Schrittes zu trap(Si−1 ) das Segment si hinzufügt. Sei auÿerdem S\Si
die Menge der Segmente, die noch nicht in trap(Si ) vorkommen (also die
Menge {si+1 , ..., sn }). Für jedes Element aus S \ Si wird ein bidirektionaler
Zeiger gespeichert, der angibt in welchem Segment von trap(Si ) sich der
Sei
linke Startpunkt des jeweiligen Segmentes bendet. Also kann man zu einer
beliebigen Facette aus
trap(Si ) die Menge der Segmente aus S\Si in Zeit O(n)
auslesen, und umgekehrt zu jedem Segment die jeweilige Facette bestimmen.
Im Folgenden wird ein Algorithmus vorgestellt, der mit einer Laufzeit von
O(n log n + k)
zu einer Menge von Segmenten
S
die Trapezierung
trap(S)
berechnet:
1. Wiederhole folgende Schritte
2. Füge Segment
si
n-mal
ein
3. Ziehe durch die beiden Endpunkte von
von
si
mit anderen Segmenten aus
Si−1
si
und durch Kreuzungspunkte
eine Vertikale
si und den Vertikalen aus
trap(Si−1 ) die ensprechenden Vertikalen und aktualisiere die Zeiger der
Segmente aus S \ Si
4. Aktualisiere an jedem Kreuzungspunkt von
Im Folgenden wird eine detailliertere Beschreibung der Schritte 3 und 4 gegeben.
si , fangen wir damit an, daÿ wir zuerst die
linken Endpunkt von si enthält. Durch diesen
Zu Schritt 3: Gegeben sei Segment
Facette raussuchen, die den
Punkt wird eine Vertikale gezogen, die ihren oberen und unteren Endpunkt
an der Stelle hat, an der sie ein anderes Segment aus
Si−1
oder die Begren-
zung trit. Nach demselben Prinzip wird durch jeden Kreuzungspunkt des
Segments
si
mit Segmenten aus
alle Facetten, durch die
Endpunkt von
si
si
Si−1
eine Vertikale gezogen. Hierbei werden
verläuft, in 2 Teile geteilt. Wenn wir am rechten
ankommen, ziehen wir auch dort eine Vertikale, die ihre
Endpunkte an den Schnittpunkten zu anderen Segmenten aus
Si−1
oder den
horizontalen Begrenzungslinien hat.
Zu Schritt 4: Sind alle Vertikalen berechnet, müssen jetzt noch die alten Vertikalen aktualisiert werden. Dafür betrachten wir alle Facetten aus
durch die
si
trap(Si−1 ),
verläuft. Jedesmal, wenn das Segment eine Vertikale schneidet,
muÿ der Endpunkt dieser Vertikale angepaÿt werden (das heiÿt, daÿ ein Teil
dieser Vertikale entfernt wird, so daÿ 2 Facetten zu einer verschmelzen). Zu-
S \ Si
aktualisiert
werden. Dafür betrachten wir wieder lediglich die Facetten von
trap(Si−1 ),
letzt müssen noch die Zeiger der restlichen Segmente aus
durch die unser Segment
2.1.2
si
verläuft.
Beispiel
An dieser Stelle soll ein Beispiel nochmal die Funktionsweise des Algorithmus verdeutlichen. Wir haben 3 Segmente
{s1 , s2 , s3 },
die wir zufällig in die
Ebene einfügen. Durch Randomisierung haben wir eine Reihenfolge
bestimmt. Wir beginnen mit dem ersten Segment
s2
s2 , s1 , s3
und fügen es ein.
Es ergibt sich ein Bild, wie in Abbildung 2. Durch die beiden Endpunkte
Abbildung 2: Trapezierung nach dem 1. Schritt
des Segmentes verlaufen die Vertikalen. In diesem Schritt entfallen andere
Aktionen, da wir weder Schnittpunkte mit anderen Segmenten noch mit anderen Vertikalen haben. Was noch bleibt, ist die Aktualisierung der Zeiger
der Segmente, die noch nicht eingefügt wurden, also
Endpunkt von
s1
liegt in Facette
f1 ,
s1
und
s3 .
Der linke
der linke Endpunkt von Segment
s3
in
f2 .
s1 eingefügt. Das Segment verläuft durch alle 4
Facetten in der Reihenfolge f1 , f2 , f3 , f4 . Zuerst muÿ durch den linken Endpunkt eine Vertikale gezogen werden. An der Stelle, wo das Segment aus f2
in f3 übergeht, haben wir einen Schnittpunkt der beiden Segmente und zie-
Als nächstes wird Segment
hen dort auch eine Vertikale. Als letztes ziehen wir auch durch den rechten
Endpunkt eine Vertikale.
Jetzt müssen noch die bestehenden Vetikalen wieder angepaÿt werden. Man
sieht, daÿ die Vertikalen durch die beiden Endpunkte von Segment
ment
s1
s2
Seg-
schneiden und angepaÿt werden müssen, so daÿ sie in dem Punkt
enden, wo sie Segment
s1
schneiden. Zuletzt müssen, wie im letzten Schritt,
die Zeiger der restlichen Segmente (s3 ) angepaÿt werden. Der linke Endpunkt
vpn
s3
liegt in Facette
f2 .
Im letzten Schritt wird das (letzte) Segment
s3
eingefügt. Wir schauen uns
die Trapezierung aus dem letzten Schritt an, und sehen, daÿ
Facetten
f2 , f4 , f5 , f9
s3
durch die
verläuft. Zuerst ziehen wir wieder eine Vertikale durch
s3 (an dieser Stelle muÿ man darauf achten, daÿ die
Vertikale am Schnittpunkt mit s1 endet). Danach ziehen wir auch Vertikale
durch die Schnittpunkte mit den anderen beiden Segmenten s1 und s2 und
den linken Endpunkt von
Abbildung 3: Trapezierung nach dem 2. Schritt
durch den rechten Endpunkt.
Jetzt müssen wir schauen, an welchen Stellen andere Vertikale aus der vorhergehenden Trapezierung geschnitten werden und sie entsprechend anpassen.
Dieses Mal ist das nur an einer Stelle der Fall - nämlich bei der Vertikalen,
die früher die Facetten
f5
und
f9
getrennt hat. Zeiger müssen keine mehr ak-
tualisiert werden, da keine Segmente übrig sind. Wir sind damit fertig. Das
Ergebnis ist in Abbildung 4 zu sehen.
2.1.3
Analyse
Für eine Facette
f
Endpunkt in
f
i
trap(Si−1 )
auf
trap(Si )
i
f
bestimmen. Stellen wir uns vor,
ein beliebiges Segment aus
Zug ist legitim, denn jedes Segment aus
die Stelle
die
linker
liegt. Wir wollen mit Rückwärtsanalyse die erwarteten Kosten
eines Updates von
daÿ im Schritt
trap(Si−1 ) sei n(f ) die Anzahl der Knoten,
l(f ) die Anzahl der Segmente aus S \ Si , deren
aus
umschlieÿen, und sei
Si
trap(Si )
gelöscht wird. Dieser
könnte bei der Permutation an
gekommen sein.
Die erwarteten Kosten eines Updates sind nach Kapitel 2.1.1
1X X
[n(f ) + l(f )]
i s∈S
i
F (s)
f ∈F (s)
ist hierbei die Menge der Facetten aus
Punkt des Segments
s
enthalten.
trap(Si ),
die mindestens einen
Abbildung 4: Trapezierung nach dem 3. Schritt
Jetzt muÿ dieser Ausdruck nur noch in Ausdrücke umgewandelt werden, die
P
P
f ∈F (s) l(f ) ist proportional zu der
s∈Si
Gesamtanzahl der Zeiger der Segmente aus S \ Si , also n − i. Weiterhin ist
n
aus
und
k
bestehen. Der Term
P
P
f ∈F (s) n(f ) proportional zu i+ki , wobei ki die Anzahl der Punkte ist,
s∈Si
in denen sich 2 (oder auch mehrere) Segmente aus Si schneiden. Also liegen
n+E[ki ]
die erwarteten Kosten für ein Update beim Einfügen von si bei
. Was
i
bleibt, ist die Berechnung des Erwartungswertes von ki , unter der Voraussetzung, daÿ
eine zufällige Teilmenge aus
S
mit
i
Segmenten ist. Sei
x
einer
r und s) aus S schneiden. Also
taucht x in trap(Si ) nur dann auf, wenn r und s beide in Si liegen. Die Wahr-
der
k
Si
Punkte, an denen sich 2 Segmente (z.B.
i2
. Dadurch, daÿ der Erwartungswert
n2
Möglichkeiten von x eine Wahrscheinlichkeit von
scheinlichkeit dafür ist proportional zu
linear ist, ergibt sich für k
2
E[ki ] = O( ki
). An dieser Stelle wird explizit davon Gebrauch gemacht, daÿ
n2
es sich bei Si um eine zufällige Teilmenge von S handelt. Summiert man die
Kosten über alle Schritte, ergibt sich:
Theorem 1: Die erwarteten Kosten einer Trapezierung von
ist
O(n log n + k),
wobei
k
n
Segmenten
die Anzahl der Schnittpunkte zweier oder auch
mehrerer Segmente ist.
2.2
Random Sampling
Es gibt dennoch Situationen, in denen randomisierte inkrementelle Konstruktion nicht unbedingt die beste Wahl ist. Sie ist von sich aus sequentiell aufge-
Abbildung 5: Arrangement von Linien
baut, bietet also keinerlei Möglichkeiten zum Design paralleler geometrischer
Algorithmen. Zusätzlich kann der Fall auftreten, daÿ eine Struktur zu weiteren Zwecken aufgebaut wird, z.B. um Suchprobleme zu lösen. Hier wenden
wir uns einer neuen Methode zu, dem random sampling oder auch randomi-
sierten divide-and-conquer.
2.2.1
Funktionsweise
eine Menge von Geraden in einer Ebene. Die Linien aus L unterteilen
2
die Ebene in O(n ) konvexe Teilstücke. Das Ergebnis nennen wir ein ArranSei
L
gement aus Linien. Wir beschränken uns in Zukunft darauf, daÿ wir lediglich
an einem Teil der Ebene interessiert sind, der alle Schnittpunkte der Geraden
aus
L
enthält und von einem Dreieck
τ
umschlossen wird. Dieses Teilstück
kann als planarer Graph angesehen werden. Wir betrachten jeden Schnittpunkt zweier Geraden als Knoten im Graphen (dabei gehen wir aus, daÿ es
L gehen). Knoten
aus L und dem Be-
keine Schnittpunkte gibt, durch die mehr als 2 Geraden aus
werden zusätzlich an den Schnittpunkten der Geraden
grenzungsdreieck
τ
angelegt. Eine Kante zwischen 2 Knoten existiert genau
dann, wenn es im Arrangement eine Verbindung zwischen den entsprechenden Schnittpunkten gibt. Jede Facette dieses planaren Graphen entspricht
genau einer Region in
τ,
die von Linien aus
L
umschlossen wird. Wir inter-
essieren uns nun für folgende Frage: gegeben sei ein Punkt
q
in der Ebene -
welche Facette des Graphen enthält ihn? Das angesprochene Problem nennt
man point location problem in an arrangement of lines.
Um es möglichst einfach zu halten, wird jede Facette in unserem Arran-
T (L).
von T (L)
gement trianguliert. Das triangulierte Arrangement nennen wir dann
Diese Notation mag nicht eindeutig sein, denn die exakte Form
hängt wiederum von dem Dreieck ab, das
T (L)
umschlieÿt, sie ist dennoch
hinreichend, denn:
1. Bei unserem Problem (point location) ist es für eine Facette
unser Punkt
q
f
in der
liegt nicht relevant, von welchem Dreieck der Punkt
umschlossen wird.
2. Im Allgemeinen wird das Dreieck, das den Punkt
q
umschliesst eindeu-
tig sein.
Im Folgenden wird der Algorithmus vorgestellt.
1. Wähle zufällig eine Menge von Linien (unser random sample )
mit
|R| = r,
wobei
r
R
aus
L
eine genügend groÿe Konstante ist, deren Gröÿe
später besprochen wird. Baue aus dieser Menge R das Arrangement
2
Die Anzahl der Facetten in T (R) ist O(r ) und somit konstant.
T (R).
2. Bestimme für jede (triangulierte) Facette
f
die Menge der Linien aus
L \ R, die f schneiden - diese Menge nennen wir Lf . Das ist machbar
r
O(nr2 ). Wir nennen eine Facette gut, wenn sie von höchstens an log
r
Linien aus L geschnitten wird. Wir nennen ein Sample gut, wenn alle
Facetten gut sind. Wiederhole diesen Vorgang bis ein gutes Sample R
in
gefunden wurde.
3. Für jede Facette
f
aus
T (R)
und eine Konstante
b
für die
|Lf | > b
gilt, wende diesen Prozeÿ rekursiv an. Dabei gilt zu beachten, daÿ bei
den Rekursionsschritten das Dreieck, das die Facette
Grenze dient. Zu jeder Facette
f
f
umschlieÿt, als
gibt es einen Zeiger auf das nach-
folgende Arrangement. Durch diese Zeiger wird dann im Endeekt die
Suche ermöglicht.
Das Ergebnis ist eine Art Suchbaum, bei dem jeder Knoten einer Facette im
jeweiligen Arrangement entspricht, und die Kanten von den Knoten jeweils
auf das nachfolgende Arrangement zeigen (sofern vorhanden).
Um unsere Suche durchzuführen, gehen wir folgendermaÿen vor: gegeben sei
das Dreieck
τ
und ein Punkt
q , von dem wir wissen wollen, in welcher Facette
O(1)) in welcher Facette f
er sich bendet. Wir bestimmen als erstes (in Zeit
T (R) sich unser Punkt bendet, und führen
Lf fort, bis wir an einem Blatt ankommen.
aus
in
unsere Suche dann rekursiv
Doch was sind die Kosten einer Suche unter Verwendung dieser Struktur?
Seien
Q(n)
die Kosten einer Suche in einer Menge aus
sich
Q(n) ≤ c + Q
an log r
r
n
Linien, dann ergibt
wobei
a
im Vergleich zu
r
log r
klein ist und
c
eine Konstante ist, die die
Kosten beschreibt, wenn man im Suchbaum eine Ebene tiefer geht. Für diese
an log r
Rekursion gilt oensichtlich Q(n) = O(log n). Da |Lf | ≤
gilt, können
r
wir sagen, daÿ für eine Anfrage q eine Laufzeit von O(log n) benötigt wird.
Diese Laufzeit ist keine erwartete Laufzeit, sondern eine obere Schranke.
2.2.2
Beispiel
Auch zum Thema Random Sampling soll hier ein Beispiel aufgeführt werden,
das die Funktionsweise des Algorithmus verdeutlichen soll. Es wird nicht der
Abbildung 6: Beispielarrangement
ganze Algorithmus durchgerechnet, aber 2 Schritte, damit die grundlegenden
Schritte verstanden werden können. Benutzt wird wieder das Arrangement
aus dem vorigen Kapitel mit den Linien
Dreieck
τ
L = {l1 , l2 , l3 , l4 , l5 },
das von dem
umschlossen wird.
Nach Schritt 1 unseres Algorithmus wählen wir aus der Menge der Linien
R. Sei R = {l1 , l3 }. Aus diesen beiden Linien bauen
wir das Arrangement T (R) und triangulieren es. Nehmen wir an dieser Stelle
an, das Sample sei gut, das heiÿt, die Anzahl der Linien aus L \ R, die ei-
zufällig unser Sample
ne Facette schneiden, überschreitet für jede Facette nicht einen bestimmten
Schwellenwert. Nehmen wir an, dieser Wert ist 3. Das Ergebnis ist in Abbildung 6 zu sehen. Es haben sich 7 Facetten gebildet. Für jede Facette
bauen wir jetzt die Menge
Lf5 = {l2 , l4 , l5 }.
Lf
f5
die Menge
für die gilt
|Lf | > b (b
b = 2,
auf. Zum Beispiel ist für Facette
Jetzt müssen wir für jede Facette
f,
f
ist konstant) den Vorgang rekursiv wiederholen. Nehmen wir an, daÿ
f5 und f6 der Algorithmus wiederholt werden. Wir werden
f5 durchführen.
jetzt also lediglich Facette f5 . Wie weiter oben schon er-
so muÿ für Facette
die Rekursion beispielhaft noch an Facette
Wir betrachten
Abbildung 7: Sampling nach dem 1. Schritt
Abbildung 8: Sampling nach dem 2. Schritt
l2 , l4 und l5 . Aus diesen
R = {l2 , l5 }. Daraus bauen wir das
wähnt wird diese Facette von 3 Linien geschnitten:
3 Linien wählen wir unser Sample
Arrangement
T (R),
R.
Sei
triangulieren es und überprüfen ob es gut ist. Da keine
Facette von mehr als 1 Linie geschnitten wird, ist es gut, und wir sind fertig.
Das Ergebnis ist ein Suchbaum, den man jetzt durchwandern kann, wenn
man von einem Punkt
q
innerhalb von
τ
wissen möchte, in welcher Facette
er sich bendet.
2.2.3
Analyse
Wir kommen jetzt zur Berechnung der Kosten beim Aufbau der rekursiven
Datenstruktur. Wir stellen als erstes folgendes Lemma auf.
T (R) von mehr
1
für eine genügend
2
Lemma 1: Die Wahrscheinlichkeit, daÿ eine Facette aus
an log r
Linien aus
r
groÿe Konstante a.
als
L
geschnitten wird, ist kleiner als
Beweis: Sei S die Menge aller Punkte, an denen sich entweder 2 Linien aus
L, oder eine Linie aus L mit der Begrenzung schneiden. Sei ∆ die Menge aller
Tripel aus Punkten aus
S.
Was ist die Wahrscheinlichkeit, daÿ ein Dreieck,
das durch ein Tripel aus ∆ deniert wird, in T (R) auftaucht, und von mehr
an log r
Linien aus L geschnitten wird? Für ein Tripel δ ∈ ∆ bezeichnen
als
r
wir mit I(δ) die Menge der Linien aus L, die das Dreieck, das von δ de-
G(δ) bezeichnen wir die Menge der Linien, die die
Punkte aus δ erzeugen (logischerweise ist |G(δ)| ≤ 6). Um eine Schranke
für die Wahrscheinlichkeit zu berechnen, daÿ das Tripel δ eine Facette aus
(T (R) beschreibt, schreiben wir es als Produkt zweier Wahrscheinlichkeiten.
Sei E1 (δ) das Ereignis, wenn alle Linien aus G(δ) in R liegen, und E2 (δ) das
Ereignis, wenn keine der Linien aus I(δ) in R liegen. Natürlich müssen beide
Ereignisse eintreen, so daÿ δ eine Facette aus R beschreibt. Dann gilt
niert wird, schneiden. Mit
[δ beschreibt eine F acette aus T (R)] ≤ Pr[E1 (δ)]Pr[E2 (δ)|E1 (δ)].
Pr
Als nächstes wird Pr[E2 (δ)|E1 (δ)] abgeschätzt. Hat man die Linien gewählt,
die
G(δ)
bilden, schauen wir, was mit den restlichen
r − G(δ)
Linien einer Linie aus
I(δ)
R
r−G(δ)
Linien aus
passiert. Wir betrachten hierbei die Wahrscheinlichkeit, daÿ keine der
entspricht. Die Wahrscheinlichkeit hierfür wird
durch folgende Ungleichung für alle Werte von
r > 12
(denn
|G(δ)| ≤ 6)
beschrieben
r−|G(δ)|−1 Y
i=0
|I(δ)|
1−
n − |G(δ)| − i
Wir sind nur an den
δ
≤
|I(δ)|
1−
n
interessiert, für die gilt
r−|G(δ)|
I(δ) >
≤ e−
r|I(δ)|
2n
an log r
- solche Tripel
r
nennen wir groÿe Tripel. Für groÿe Tripel gilt also
a
[Ein gr. T ripel taucht als F ac. in T (R) auf ] ≤ r− 2
Pr
X
[E1 (δ)]
Pr
gr. T ripel δ
Die obere Summe entspricht nun der erwarteten Anzahl groÿer Tripel in
Da
R
ein Arrangement aus
R.
r
Linien ist, und jeder Punkt eines Tripel aus
6
max. 2 Linien erzeugt wird, folgt für die Summe, daÿ sie nie gröÿer als r ist.
Daraus folgt, für
a > 12,
das Lemma.
Korollar 1: Die erwartete Anzahl der Versuche, um ein gutes Sample
R
zu erhalten, ist höchstens 2.
Nach der vorangehenden Analyse erfüllt die benötigte Zeit zum Aufbau der
Datenstruktur die Ungleichung
2
2
T (n) ≤ n + cr T
an log r
r
wobei
c
eine Konstante ist, und
T (k)
die obere Schranke für die erwarte-
ten Kosten eines Aufbaus einer Datenstruktur aus einem Arrangement aus k
2+(r)
Linien bezeichnet. Daraus folgt T (n) = O(n
), wobei (r) eine positive
Konstante ist, die immer kleiner wird, wenn
r
gröÿer wird.
O(n2+ )
für n Linien und ein > 0 auf und kann Punkte in der Ebene in Zeit O(log n)
Theorem 2: Der obere Algorithmus baut die Datenstruktur in Zeit
lokalisieren.
Literatur
[1] Motwani,
Raghavan
Press, 1995
Randomized
Algorithms,
Cambridge
University
Randomisierte Algorithmen für lineare
Programmierung
Frank Hellweg
1 Einführung
Das Problem der linearen Programmierung ist eines der wichtigsten und besterforschten
Probleme der Informatik. Das liegt vor allem daran, dass sich sehr viele Probleme der
Komplexitätsklasse P bequem als lineares Programm (kurz: LP ) formulieren lassen1 ;
steht ein effizienter Algorithmus zum Lösen von LPs zur Verfügung, so lassen sich alle
diese Probleme ebenfalls effizient lösen. Darüber hinaus ist das gängige Verfahren, um
gemischt-ganzzahlige Programme optimal zu lösen – mit diesen lassen sich wiederum alle
Probleme in N P modellieren – ein Branch-and-Bound -Ansatz, der auf der Relaxation
der Ganzzahligkeitsbedingungen basiert. Dadurch entstehen wiederum LPs, die gelöst
werden müssen. Effiziente Algorithmen für lineare Programmierung sind also für sehr
viele Probleme von Nutzen. Hier soll die lineare Programmierung nur knapp vorgestellt
werden. Eine detailliertere Beschreibung bietet zum Beispiel [1].
Ein lineares Programm besteht aus n linearen Ungleichungen auf d Variablen. Im Allgemeinen betrachtet man nur Ungleichungen der Form aTi x ≤ bi , d.h. ai , x ∈ Rd und
bi ∈ R für i ∈ {1, . . . n}. Alle linearen Gleichungen und Ungleichungen auf den d Variablen lassen sich durch Ungleichungen dieser Form darstellen. Üblicherweise wird das
Ungleichungssystem in Matrixschreibweise als Ax ≤ b dargestellt, wobei
 T 


a1
b1
 aT 
 b2 
 2 


A =  .  und b =  .  .
 .. 
 .. 
aTn
bn
Die durch Ax ≤ b definierten Ungleichungen definieren zusammen ein konvexes Polyeder gültiger Lösungen im Rd . Die Seitenflächen des Polyeders sind hierbei bestimmt
durch die Schnitte der Hyperebenen, die durch die einzelnen Restriktionen bei jeweiliger Gleichheit der linken und rechten Seite definiert werden. Aus diesem Polyeder soll
mit Hilfe einer linearen Zielfunktion eine optimale Lösung ermittelt werden. Wir beschränken uns dabei auf Minimierungsprobleme; eine Multiplikation der Zielfunktion
1
Natürlich gibt es für jedes Problem in P eine polynomielle Reduktion auf lineare Programmierung;
diese muss jedoch nicht intuitiv ersichtlich sein.
1
mit −1 erzeugt aus einem Maximierungs- ein Minimierungsproblem. Enthalte c ∈ Rd die
Zielfunktionskoeffizienten. Dann lässt sich ein lineares Programm wie folgt formulieren:
min cT x
u.d.N. Ax ≤ b
Im Allgemeinen nimmt man nun noch 0 als untere Schranke auf jeder Variablen an,
wodurch man die sogenannte Standardform enthält, aber wir werden diese Schranke im
Folgenden nicht benötigen.
Der bekannteste Algorithmus zum Lösen von linearen Programmen ist der SimplexAlgorithmus. Dieser durchläuft die Eckpunkte des durch Ax ≤ b definierten Polyeders,
wobei in jeder Iteration ein Eckpunkt gewählt wird, der einen mindestens ebenso guten
Zielfunktionswert hat wie der vorhergehende und zu diesem benachbart ist. Dabei kann
sichergestellt werden, dass der Algorithmus terminiert. Hat ein LP eine optimale Lösung
– das ist nicht der Fall, wenn es entweder unbeschränkt ist oder keine gültige Lösung
hat – dann hat es auch mindestens eine gültige Lösung in einem Eckpunkt. Eine solche
Lösung liefert der Simplex-Algorithmus zurück. Weitere Details können [1] entnommen
werden. Abbildung 1 verdeutlicht die Arbeitsweise des Simplex-Algorithmus.
X2
c
X1
Abbildung 1: Durch lineare Ungleichungen definiertes Polyeder, Zielfunktion c (violett)
und möglicher Lösungspfad des Simplex-Algorithmus (rot, mit Pfeilen) für
ein Maximierungsproblem.
Da das Polyeder der gültigen Lösungen exponentiell in d viele Ecken haben kann, ist die
Worst-Case-Laufzeit des Simplex-Algorithmus nicht polynomiell beschränkt. Allerdings
sind LPs, die zu einer solch großen Laufzeit führen, in der Praxis sehr selten.
2
Bezeichne mit F(A, b) den durch die gültigen Lösungen von Ax ≤ b definierten Polyeder. Im Folgenden sei angenommen, dass F(A, b) weder leer noch unbeschränkt ist
und bezüglich der Zielfunktion cT x eine eindeutige optimale Lösung in einem Eckpunkt
besitzt. Ferner entstehe jeder Eckpunkt von F(A, b) durch den Schnitt von genau d Seitenflächen.
Im Weiteren bezeichne H die Menge der Restriktionen, die durch A und b definiert
werden. Wir definieren nun die Abbildung Opt : P(H) → Rd × {0, 1} , wobei für S ⊆ H
(
(x, 1) falls x die optimale Lösung des durch S definierten LP ist
Opt(S) =
(~0, 0) falls das durch S definierte LP unbeschränkt ist
gelte. Die Abbildung C : Rd × {0, 1} → R sei für (x, y) ∈ Rd × {0, 1} durch
(
cT x falls y=1
C(x, y) :=
−∞ sonst
definiert. Das Vorhandensein einer festen, aber beliebigen Zielfunktion cT x sei dabei und
im Folgenden implizit angenommen. Es ist also Opt(H) die optimale Lösung des durch H
definierten linearen Programms und C(Opt(H)) der zugehörige Zielfunktionswert. Für
S ⊂ H kann natürlich auch C(Opt(S)) = −∞ gelten.
Eine Basis B(S) für eine Menge von Restriktionen S sei eine minimale Teilmenge B ⊆ S
mit Opt(B) = Opt(S). B(H) besteht also aus den d Restriktionen in H, deren Schnittpunkt die optimale Lösung des linearen Programms ist. Kann eine solche Basis für H
bestimmt werden, so kann eine optimale Lösung des linearen Programms leicht durch
Berechnung des Schnitts der durch die enthaltenen Restriktionen definierten Hyperebenen bestimmt werden. Dazu muss nur ein lineares Gleichungssystem über d Variablen
gelöst werden, was in Laufzeit O(d3 ) möglich ist2 .
2 Random-Sampling-Algorithmen für lineare Programmierung
Zuerst wollen wir uns der Random-Sampling-Technik bedienen, um lineare Programme
zu lösen. Wir werden dazu zwei Algorithmen kennen lernen.
Beim Random Sampling wird im Allgemeinen eine zufällige Teilmenge (Sample) der
Menge H der Restriktionen des zu lösenden linearen Programms gewählt. Für die optimale Lösung des nur die gewählten Restriktionen umfassenden kleineren LPs wird nach
Restriktionen in H gesucht, die durch diese verletzt sind. Diese verletzten Restriktionen
sind Kandidaten für B(H).
Der folgende Algorithmus SampLP löst ein lineares Programm mit Hilfe der RandomSampling-Technik. Dabei bedient er sich für kleine LPs, die höchstens 9d2 Restriktionen
haben, des Simplex-Algorithmus. Für größere Probleme wird eine Menge S von engen“
”
Restriktionen erstellt. In jeder Iteration wird zufällig die Restriktionenmenge R aus H\S
2
Dies ist die Laufzeitschranke für die Gauß-Elimination. Tatsächlich gibt es schnellere Algorithmen zur
Lösung von linearen Gleichungssystemen
3
gewählt und das LP, das durch S ∪ R definiert ist, rekursiv gelöst. Die Restriktionen
aus H, die durch die optimale Lösung dieses LPs verletzt sind, werden, wenn es nicht
zu viele sind, zu S hinzugefügt3 . Sobald B(H) ⊆ S, gibt es keine verletzende Restriktion
mehr, und die erhaltene Lösung kann als optimal zurückgegeben werden.
SampLP(H)
1 if |H| < 9d2
2
then return Simplex(H)
3
else
4
V ←H
5
S←∅
6
while |V | > 0
7
8
9
9
10
n p
o
do Wähle zufällig R ⊆ H\S mit |R| = min d |H|, |H\S|
x ← SampLP(R ∪ S)
V ← {h ∈p
H|x verletzt h}
if |V | ≤ 2 |H| then S ← S ∪ V
return x
Unter den in einer erfolgreichen“ Iteration (d.h., die Menge V war nicht zu groß) der
”
while-Schleife zu S hinzugefügten Restriktionen muss sich mindestens eine Restriktion
aus B(H) befinden, die noch nicht in S war, falls nicht B(H) ⊆ S (woraus. x = Opt(H)
folgen würde); ansonsten würde B(H) nicht durch x verletzt, was ein Widerspruch zur
Annahme B(H) 6⊆ S ist. Andererseits werden auch nicht zwangsläufig alle Restriktionen
aus B(H) in einer Iteration zu S hinzugefügt, wie Abbildung 2 zeigt.
Es stellt sich die Frage, wie hoch der Anteil der erfolglosen Iterationen
Gesamtzahl
h an der p
i
der Iterationen ist, das heißt: Wie groß ist die Wahrscheinlichkeit Pr |V | > 2 |H| ? Zur
Beantwortung dieser Frage benötigen wir das folgende Lemma:
Lemma 1. Sei S ⊆ H und sei
⊆ H\S eine
n R
o zufällig gewählte Menge von Restriktionen
p
aus H, wobei r := |R| = min d |H|, |H\S| . Sei x die optimale Lösung des durch R∪S
definierten LP und m := |H\S|. Dann ist die erwartete Anzahl der durch x verletzten
Restriktionen höchstens
d(m − r + 1)
.
r−d
Beweis. Sei CH = {Opt(T ∪ S|T ⊆ H\S} und CR = {Opt(T ∪ S|T ⊆ R}. Dann gilt
SampLP(R ∪ S) = Opt(R ∪ S) ∈ CR ⊆ CH .
3
Die Ausgabe von Simplex(S) für eine Restriktionenmenge S ⊆ H sei Opt(S). Falls nun Opt(S) = (~0, 0),
dann seien genau die Restriktionen von H verletzt, für die der Winkel zwischen den Normalenvektoren
der durch die jeweilige Restriktion definierten Hyperebene (vom durch die Hyperebene definierten
Halbraum weg zeigend) und der durch die Zielfunktion definierten Hyperebene kleiner als 90 Grad
ist; das heißt, alle Restriktionen aus H, die das LP in Richtung der Zielfunktion beschränken, gelten
als verletzt.
4
X2
u
v
c
w
X1
Abbildung 2: Zielfunktion c eines Minimierungsproblems und drei Restriktionen u, v, w.
Die Pfeile zeigen an, welchen Halbraum die Restriktionen definieren.
Opt({v, w}) verletzt u, aber nicht w.
Außerdem ist Opt(R ∪ S) das einzige Element in CR , das alle Restriktionen in R erfüllt.
Sei nun x ∈ CH fest, aber beliebig, vx die Anzahl von Restriktionen in H, die durch x
verletzt werden. Die Indikatorvariable ix sei dann 1, wenn x = Opt(R ∪ S) und 0 sonst.
Dann gilt für die erwartete Größe von V


X
X
X
E [|V |] = E 
vx ix  =
vx E [ix ] =
vx Pr [x = Opt(R ∪ S)]
x∈CH
x∈CH
x∈CH
aufgrund der Linearität des Erwartungswerts. Damit x = Opt(R ∪ S) gilt, müssen die d
Restriktionen, die x definieren, in R sein. Die restlichen r −d Restriktionen in R müssen
aus den verbleibenden m − d Restriktionen gewählt werden. Von diesen scheiden noch
einmal vx Restriktionen aus, weil sie durch x verletzt würden. Insgesamt werden aus m
Restriktionen r ausgewählt. Es gilt also
d
d
Pr [x = Opt(R ∪ S)] =
=
m−vx −r
r−d
m
r
=
m−vx −r
r−d
m
r
m − vx − d − (r − d − 1)
r−d
5
(m−vx −d)!
m−vx −d−(r−d)!(r−d)!
=
m
r
(m−vx −d)!
(m−vx −d−(r−d−1))!(r−d−1)!
·
m
r
m−r+1
≤
·
r−d
m−vx −r
r−d
m
r
und damit
m−r+1 X
E [|V |] ≤
vx
r−d
x∈CH
m−vx −r
r−d
m
r
m−r+1 X
≤
vx
r−d
x∈CH
vx
1
m−vx −r
r−d
m
r
.
x −r
(v1x )(m−v
r−d )
nach einem ähnlichen Argument wie oben die Wahrscheinlichkteit,
m
(r)
dass x ein Element aus CR ist, für das genau eine Restriktion aus R verletzt ist: R darf
dazu aus den m − vx − d Restriktionen, die durch x nicht verletzt sind, nur noch r − d − 1
enthalten, dafür muss eine von vx Restriktionen, die x verletzen, in R sein.
Durch Gewichtung mit vx und Summation erhalten wir, da CR ⊆ CH , die erwartete
Anzahl von Elementen in CR , durch die genau eine Restriktion aus R verletzt ist. Jedes dieser Elemente ist allerdings das Optimum eines linearen Programms, das durch
(R\{h}) ∪ S für h ∈ R definiert wird. Es gibt aber nur d solcher Elemente h ∈ R, für die
Opt((R\{h}) ∪ S) 6= Opt(R ∪ S), da Opt(R ∪ S) durch genau d Restriktionen definiert
ist. Also gilt
"(
)#
y verletzt ge- m−r+1
d(m − r + 1)
E [|V |] ≤
· E y ∈ CR .
≤
nau ein h ∈ R r−d
r−d
Dabei ist
2
Lemma 2. In einer Iteration der while-Schleife von SampLP gilt
h
p i 1
Pr |V | > 2 |H| ≤ .
2
Beweis. Seip
wieder r = |R| und m = |H\S|. Wir unterscheiden zwei Fälle: Gilt in Zeile
7 |H\S| < d |H|, werden alle verbleibenden Restriktionen ausgewählt. Es folgt |V | = 0,
da H = R ∪ S. Die Iteration ist auf jeden Fall erfolgreich, d.h.
h
p i
1
Pr[ |V | > 2 |H| = 0 ≤ .
2
p
√
Ansonsten gilt r = d |H| ≥ d m, so dass
√ √
√
√
m( m − d +
m−d m+1
d(m − r + 1) d(m − d m + 1)
√
√
√
≤
=
=
r−d
d m−d
m
m
√
√
1
= m − d + √ ≤ m.
m
6
√1 )
m
Mit Hilfe der Markov-Ungleichung folgt
h
p i
E[|V |]
d(m − r + 1)
1
√ ≤ .
≤
Pr |V | > 2 |H| ≤ p
2
2(r − d) m
2 |H|
2
Satz 1. Der Algorithmus SampLP hat für n := |H| eine erwartete Worst-Case-Laufzeit
√
von O(d2 n) + (d2 log n)O(dd/2+O(1) ) + O(d4 n log n).
Beweis. Da nach Lemma 2 im Erwartungswert mindestens jede zweite Iteration erfolgreich ist, werden
erwartet alle zwei Iterationen Elemente zu S hinzugefügt. Dies sind
p
höchstens 2 |H| Elemente, von denenpmindestens eins in B(H) enthalten p
ist. Wenn
B(H) ⊆ S, enthält S also höchstens 2d |H| Elemente, so dass |R ∪ S| ≤ 3d |H| gilt.
Bis dahin wurde SampLP erwartet 2d mal rekursiv aufgerufen und es wurden erwartet
2d mal in O(d) Laufzeit O(|H|) Restriktionen auf Verletzung geprüft. Bezeichne T (n) die
Kosten für den Aufruf von SampLP mit einem LP mit n Restriktionen. Wenn man die
Kosten für einen Aufruf von Simplex mit höchstens 9d2 Restriktionen mit O(dd/2+a )
für eine Konstante a abschätzt, ergibt sich folgende Rekurrenz:
(
√
2d · T (3d n) + O(d2 n) falls n > 9d2
T (n) ≤
O(dd/2+a )
sonst
Durch Auflösen der Rekurrenz erhält man eine Laufzeitschranke von
√
T (n) ≤ O(d2 n) + (d2 log n)O(dd/2+a ) + O(d4 n log n).
2
Der zweite Random-Sampling-Algorithmus, IterSampLP, bedient sich einer Technik,
die als iterative reweighting bekannt ist. Für jede Restriktion h der Menge H der übergebenen Restriktionen
P wird ein Gewicht wh geführt, das anfangs 1 ist. Bezeichne dabei
für S ⊆ H w(S) := h∈S wh das Gesamtgewicht einer Restriktionenmenge S.
Am Anfang jeder Iteration wird eine Menge R ⊆ H der Größe |R| = 9d2 gewählt, wobei
für h ∈ H
wh
Pr[h ∈ R] =
w(H)
gilt. Das durch R definierte LP wird mit Hilfe der Simplex-Methode gelöst, und, wie beim
oben vorgestellten Algorithmus SampLP, wird eine Menge V ⊆ H mit den Restriktionen
2
aus H erstellt, die durch diese Lösung verletzt werden. Gilt w(V ) ≤ 9d−1
w(H), so wird
für jede Restriktion in V das Gewicht verdoppelt. Das führt dazu, dass die Gewichte der
Restriktionen in B(H) schneller steigen als die der restlichen Restriktionen und damit
die Wahrscheinlichkeit, dass B(H) ⊆ R.
7
IterSampLP(H)
1 if |H| < 9d2
2
then return Simplex(H)
3
else
3
for h ∈ Hdo wh ← 1
4
V ←H
5
while |V | > 0
6
do Wähle zufällig gewichtet R ⊆ H\S mit |R| = 9d2
7
x ← Simplex(R)
8
V ← {h ∈ H|x verletzt h}
2
9
if w(V ) ≤ 9d−1
w(H)
9
then for h ∈ Hdo wh ← 2wh
10
return x
2
w(H),
Wir definieren analog zu SampLP eine Iteration als erfolgreich, wenn w(V ) ≤ 9d−1
d.h. es wurden Gewichte von Restriktionen geändert oder es gab keine verletzende Restriktion.
h
i
2
Lemma 3. In einer Iteration von IterSampLP gilt Pr w(V ) > 9d−1
w(H) ≤ 12 .
Lemma 3 folgt analog zu Lemma 1 und 2, wenn S := ∅ gesetzt wird und für R und H die
Verwendung von Multimengen erlaubt wird, in denen jedes Element wh mal vorkommt.
Satz 2. Der Algorithmus IterSampLP hat eine erwartete Worst-Case-Laufzeit von
O(d2 n log n) + O(dd/2+O(1) log n) für n := |H|.
Beweis. Wir betrachten zunächst nur die Iterationen,
V 6= ∅ gilt. Nach k · d
P in denen
n
h
Iterationen, k ∈ N fest, aber beliebig, gilt w(B(H)) = h∈B(H) 2 , wobei nh angebe, wie
häufig h innerhalb der k · d Iterationen in V war.
P
Es muss pro Iteration mindestens ein Element aus B(H) in V sein, so dass h∈B(H) 2nh ≥
k · d gilt. Es folgt E[nh ] ≥ k für h ∈ B(H) und damit
X
w(B(H)) =
2nh ≥ d2k ,
h∈B(H)
da B(H) genau d Restriktionen enthält.
Betrachten wir nun die gesamte Gewichtsanpassung innerhalb dieser k · d Iterationen.
2
Anfangs gilt w(H) = n, und in jeder erfolgreichen Iteration werden höchstens 9d−1
w(H)
Gewichte angepasst. Nach k · d Iterationen gilt dann also
2kd
2
w(H) ≤ n · 1 +
≤ n · e 9d−1 .
9d − 1
Das bedeutet, dass für
k>
ln nd
ln 2 −
2d
9d−1
8
∈ O(log n)
w(B(H)) > w(H) gelten würde. Es kann also nur O(d log n) erfolgreiche Iterationen
geben.
Gilt V = ∅, ist das Ergebnis optimal. Pro Durchlauf des Algorithmus tritt dieser Fall
genau einmal, nämlich in der letzten Iteration, auf. Zusammen mit Lemma 3 folgt also,
dass der Algorithmus erwartet O(d log n) Iterationen benötigt. Mit einer Laufzeitschranke
von O(dd/2+a ), a konstant, für einen Simplexaufruf mit einem LP mit 9d2 Restriktionen
und einer Laufzeit von O(nd) für die Berechnung von V folgt eine erwartete WorstCase-Laufzeit von
O(d2 n log n) · O(dd/2+a+1 log n).
2
3 Inkrementelle Konstruktionen für lineare Programmierung
In diesem Kapitel werden zwei randomisierte Algorithmen für lineare Programmierung
vorgestellt, die nach der Methode der inkrementellen Konstruktion vorgehen, d.h., sie
verwalten eine Menge von Restriktionen, die sie Restriktion um Restriktion erweitern,
bis sie der Menge B(H) entspricht.
Der Algorithmus SeidelLP arbeitet nach genau diesem Schema, wie in der Folge deutlich werden wird. Es wird das Vorhandensein einer Funktion Schnitt vorausgesetzt, der
eine Basis übergeben wird und die den Schnittpunkt der durch sie definierten Ebenen in
Laufzeit O(d3 ) berechnet. Falls es diesen nicht gibt, gibt sie (~0, 0) zurück. Des weiteren
wird eine Funktion Project benötigt, die eine Menge von Restriktionen H und eine
einzelne Restriktion h erhält und in Laufzeit O(d · |H|) die Restriktionen aus H auf die
durch h definierte Hyperebene projeziert und die so entstehenden Restriktionen zurückgibt.
Der Algorithmus entfernt in jeder Rekursionsstufe eine Restriktion h aus der Menge H
der Restriktionen und löst das entstehende LP rekursiv. Verletzt die Lösung die soeben
entfernte Restriktion h nicht, dann ist eine optimale Lösung gefunden. Ansonsten liegt
h in B(H). Das bedeutet, dass die optimale Lösung des gesamten LPs sie mit Gleichheit erfüllt. Deswegen kann sie fallen gelassen werden, wenn alle anderen Restriktionen
auf die entsprechende durch h definierte Hyperebene projeziert werden. Das entstehende
Problem kann dann rekursiv gelöst werden. Werden genau d Restriktionen übergeben,
so wird mit Hilfe von Schnitt deren Schnittpunkt bestimmt und zurückgegeben.
Auch hier ist wieder die Problematik der Unbeschränktheit von Unterproblemen zu beachten. In diesem Fall kann der Algorithmus Schnitt keine Lösung finden, da die durch
die übergebenen Ungleichungen definierten Hyperebenen keinen gemeinsamen Schnittpunkt aufweisen. Die Auswahl verletzter Restriktionen in den übergeordneten Rekursionsstufen erfolgt in diesem Fall analog zum Algorithmus SampLP.
Betrachtet man die Rekursion abwärts, so wird auch deutlich, warum es sich bei SeidelLP um eine inkrementelle Konstruktion handelt: Startend mit einer Menge von d
Restriktionen wird von Rekursionsstufe zu Rekursionsstufe aufwärts jeweils die vorher
entfernte Restriktion h betrachtet und entschieden, ob diese zur Basis der jeweiligen
Restriktionenmenge H gehört oder nicht.
9
SeidelLP(H)
1 if |H| = d
2
then return Schnitt(H)
3
else
4
Wähle zufällig gleichverteilt h ∈ H
5
x ← SeidelLP(H\{h})
6
if x verletzt h nicht
7
then return x
8
else return SeidelLP(Project(H\{h}, h))
Satz 3. Für n := |H| hat der Algorithmus SeidelLP eine erwartete Worst-CaseLaufzeit von O(nd!).
Beweis. Es gilt offensichtlich in jeder Rekursionsstufe von SeidelLP Pr[h ∈ B(H)] =
d
n . Mit dieser Wahrscheinlichkeit ist der Zusatzaufwand der Projektion von H auf h
in O(dn) und der Aufruf von SeidelLP mit der so modifizierten Restriktionenmenge
nötig.
Die Prüfung, ob h durch Opt(H\{h}) verletzt ist, ist in jeder Iteration nötig und erfolgt
in Laufzeit O(d). Wenn n ≤ d, wird nur die Funktion Schnitt aufgerufen, die Laufzeit
O(n3 ) = O(d3 ) benötigt. Insgesamt ergibt sich folgende Rekurrenz:
(
O(d3 )
falls n ≤ d
T (n, d) =
d
T (n − 1, d) + O(d) + n [O(dn) + T (n − 1, d − 1)] sonst
Auflösen der Rekurrenz ergibt eine erwartete Laufzeitschranke von O(nd!).
2
Beim Algorithmus SeidelLP fällt auf, dass, falls h durch Opt(H\{h}) verletzt wird,
jegliche Information über die Lösung des durch H\{h} definierten LPs, insbesondere
B(H\{h}), verworfen wird. Zwar gibt Abbildung 3 ein Beispiel dafür, dass Opt(B(H\{h}))
= Opt(H) im Allgemeinen nicht gilt; trotzdem kann man diese Information gewinnbringend einsetzen, wie der Algorithmus BasisLP zeigt.
BasisLP(H, T )
1 if H = T
2
then return (Schnitt(T ), T )
3
else
4
Wähle zufällig gleichverteilt h ∈ H\T
5
(x, T 0 ) ← BasisLP(H\{h}, T )
6
if x verletzt h nicht
7
then return (x, T 0 )
8
else return BasisLP(H, Basis(T 0 ∪ {h}))
Der Algorithmus benötigt die schon aus SeidelLP bekannte Hilfsfunktion Schnitt und
zusätzlich eine Funktion Basis, die die Basis eines linearen
Programms mit d+1 Restrik
tionen berechnen kann. Dazu ruft sie für alle d+1
=
d
möglichen
Basen die Funktion
d
10
X2
u
h
v
c
w
X1
Abbildung 3: Zielfunktion c eines Minimierungsproblems und vier Restriktionen
u, v, w, h. Die Pfeile zeigen an, welchen Halbraum die Restriktionen definieren. Es gilt B(B({u, v, w}) ∪ {h}) = {h, w}, aber B({u, v, w, h})) = {h, v}.
Schnitt auf, die in O(d3 ) den Schnittpunkt der d Restriktionen bestimmt. Verletzt die
erhaltene Lösung keine Restriktion der bisher besten gefundenen Basis, so wird sie als
neuer bester Kandidat übernommen, andernfalls verworfen. Letztere Prüfung ist in O(d)
möglich, so dass für Basis eine Laufzeitschranke von O(d4 ) folgt.
Zusätzlich zu der Restriktionenmenge H des zu lösenden linearen Programms bekommt
BasisLP eine Menge T ⊆ H von genau d Restriktionen übergeben. Diese Restriktionen
sind Kandidaten für die Basis B(H). Für den ersten Aufruf von BasisLP wird die Menge
T konstruiert, indem für jede Variable xi , 1 ≤ i ≤ d, abhängig vom Zielfunktionskoeffizienten ci von xi eine Restriktion
(
≤∞
falls ci ≥ 0
xi
≥ −∞ sonst
zu H und T hinzugefügt wird. Diese Restriktionen werden durch keine zulässige Lösung
des Ausgangsproblems verletzt und, da dieses nach Voraussetzung beschränkt ist, im
Laufe des Algorithmus aus T entfernt.
BasisLP gibt ein Tupel aus der Basis B(H) und der optimalen Lösung x = Opt(B(H)),
die durch diese Basis definiert wird, zurück. Dass die Lösung mitübergeben wird, hat
alleine den Grund, dass sie so nur in der jeweils höchsten Rekursionsstufe berechnet werden muss: Werden genau d Restriktionen in H übergeben (d.h. H = T , da T ⊆ H), so
gilt natürlich T = B(H). Mit Hilfe von Schnitt wird dann die optimale Lösung gemäß
11
dieser Basis berechnet und zusammen mit B(H) zurückgegeben.
Der allgemeine Ablauf des Algorithmus ist analog zu SeidelLP: In jeder Rekursion
wird eine Restriktion h ∈ H entfernt. Hier darf das keine der Restriktionen sein, die in
T sind, damit auch in der nächsten Rekursionsstufe T ⊆ H gilt. Es wird nun rekursiv
mit gleicher Kandidatenmenge T eine Lösung für das entstehende Problem berechnet
und geprüft, ob diese Lösung h verletzt.
Falls das der Fall ist, ist h eine engere“ Restriktion als die bisher in T vorhandenen;
”
mit Hilfe von Basis wird nun aus der zurückgegebenen Basis und h eine neue Kandidatenmenge für B(H) berechnet und damit rekursiv das Problem gelöst. Falls h nicht
verletzt wird, so ist die erhaltene Lösung optimal für H und wird zurückgegeben.
Der erste dieser beiden Fälle stellt die hauptsächliche Erweiterung gegenüber SeidelLP
dar: Die vom rekursiven Aufruf zurückerhaltene Basis wird als Grundlage für die Kandidatenmenge der nächsten Iteration verwendet.
Im Folgenden werden alle Restriktionen, die für eine Restriktionenmenge H in B(H)
vorkommen, als extreme Restriktionen bezeichnet. Eine Restriktion h ∈ H, für die
C(Opt(H\{h})) < C(Opt(T )) für eine Kandidatenmenge T ⊆ H gilt, nennen wir dominant in (H, T ). Abbildung 3 verdeutlicht, dass eine extreme Restriktion nicht für
jede Kandidatenmenge dominant sein muss: v ist eine extreme Restriktion, aber für
T = {h, w} gilt Opt({h, u, w}) = Opt(T ), d.h. v ist nicht dominant.
Lemma 4. Sei h dominant in (H, T ). Dann gilt
(i) h ∈ T und
(ii) h ist extrem für alle G mit T ⊆ G ⊆ H.
Beweis.
(i) Annahme: h ist dominant, aber h ∈ H\T .
Da T ⊆ H\{h}, gilt Opt(T ) ≤ Opt(H\{h}). Andererseits gilt auch Opt(H\{h}) <
Opt(T ), weil h dominant in (H, T ) ist.
(ii) Annahme: h ist nicht extrem in G. Es folgt
C(Opt(G)) = C(Opt(G\{h})) ≤ C(Opt(H\{h})) < C(Opt(T )) ≤ C(Opt(G)).
2
Aus Lemma 4 folgt, dass T = B(H) gilt, falls alle d Restriktionen in T dominant in
(H, T ) sind. Sei nun ∆H,T := d − |{h ∈ T |h ist dominant in (H, T )}| die Anzahl nicht
dominanter Restriktionen in T bezüglich (G, T ). Die Wahrscheinlichkeit, dass in einer
Iteration von BasisLP eine Restriktion h ∈ H\T gewählt wird, die von Opt(H\{h})
∆H,T
verletzt wird, ist also höchstens |H\T
| , da jede solche Restriktion dominant in (H, T ) und
damit extrem ist; T enthält aber schon d−∆H,T der insgesamt d extremen Restriktionen.
Lemma 5. Sei T ⊆ G ⊆ H und h ∈ G\T eine extreme Restriktion in G. Sei S ⊆ G
Basis von B(G\{h}) ∪ {h}. Dann gilt:
12
(i) Wenn g ∈ H dominant in (H, T ) ist, dann auch in (G, S).
(ii) h ist dominant in (G, S).
(iii) ∆G,S < ∆H,T
Beweis.
(i) Da g dominant in (H, T ) ist, gilt natürlich g ∈ T ⊆ G. Es folgt
C(Opt(G\{h})) ≤ C(Opt(H\{h})) < C(Opt(T )).
Da h extrem in G ist und h ∈
/ T , folgt weiter
C(Opt(T )) ≤C(Opt(G\{h})) = C(Opt(B(G\{h}))) < C(Opt(B(G\{h}) ∪ {h})))
=C(Opt(S)).
(ii) Wegen obiger Herleitung gilt auch C((Opt(G\{h})) < C(Opt(S)), d.h. h ist dominant in (G, S).
(iii) Aus (i) folgt, dass alle dominanten Restriktionen in (H, T ) auch in (G, S) dominant
sind und daher in S enthalten. Wegen (ii) ist h dominant in (G, S). Da h ∈
/ T,
enthält S also mindestens eine in (G, S) dominante Restriktion mehr als T in
(H, T ) dominante Restriktionen enthält, d.h. ∆G,S < ∆H,T .
2
Jeder rekursive Aufruf via Zeile 8 von BasisLP fügt der Kandidatenmenge also mindestens eine weitere dominante Restriktion hinzu und begrenzt somit die Rekursionstiefe. Es
lässt sich aber zeigen, dass die erwartete Anzahl hinzugefügter dominanter Restriktionen
größer ist.
Lemma 6. Sei T ⊂ H und seien g1 , g2 , . . . , gs sie extremen Restriktionen von H, die
nicht in T sind, sortiert derart, dass
C(Opt(H\{g1 })) ≤ C(Opt(H\{g2 })) ≤ . . . ≤ C(Opt(H\{gs })).
Dann ist gj dominant in (F, Basis(B(H\{gi }) ∪ {gi })) für 1 ≤ i ≤ s und 1 ≤ j ≤ i.
Beweis. Da gi extrem in H ist, gilt
C(Opt(H\{gj })) ≤C(Opt(H\{gi })) = C(Opt(B(H\{gi })))
<C(Opt(B(H\{gi }) ∪ {gi }))
=C(Opt(Basis(B(H\{gi }) ∪ {gi }))),
und somit folgt die Behauptung.
2
13
Aufgrund von Lemma 6 gilt also, dass, wenn in Zeile 4 von BasisLP die Restriktion gi
aus der Restriktionenmenge H\T nach obiger Notation ausgewählt wird, die Restriktionen g1 , g2 , . . . , gi in die in Zeile 8 neu erstellte Kandidatenmenge Basis(B(H\{gi })∪{gi })
übernommen werden. Es müssen dann nur noch ∆H,T − i dominante Restriktionen zur
Kandidatenmenge hinzugefügt werden, um B(H) zu erhalten.
Da in Zeile 4 gleichverteilt eine der Restriktionen aus H gewählt wird, ist auch jede der
Restriktionen g1 , g2 , . . . , gs gleich wahrscheinlich, d.h. die Anzahl noch hinzuzufügender dominanter Restriktionen in der nächsten Rekursionsstufe ist gleichverteilt über
{0, 1, . . . , s − 1}, wenn eine der s extremen Restriktionen gewählt wird.
Satz 4. Der Algorithmus BasisLP hat eine erwartete Worst-Case-Laufzeit von O(d4 2d n)
für n := |H|.
Beweis. Sei T (n, k) eine obere Schranke für die erwartete Anzahl von Verletzungstests
(Zeile 6), die für eine Probleminstanz (H, T ) mit n = |H| Restriktionen und ∆H,T =
k noch zur Kandidatenmenge hinzuzufügenden dominante Restriktionen durchgeführt
werden müssen.
Es gilt T (n, 0) = n − d, denn wegen Lemma 5.(i) sind alle d dominanten Restriktionen
aus T auch in allen folgenden Rekursionsstufen dominant, und daher kann in keiner
dieser Rekursionsstufen eine Restriktion gewählt werden, die in Zeile 6 verletzt wird. Es
gibt also nur noch (n − d) rekursive Aufrufe von BasisLP via Zeile 5.
Es ergibt sich folgende Rekurrenz:


0
T (n, k) ≤ n − d


T (n − 1, k) + 1 +
falls n = d
falls n > d und k = 0
P
T (n,l)
n−d
0≤l<k
sonst
Auflösen der Rekurrenz ergibt T (n, k) ≤ 2k (n−d). Beim Start des Algorithmus gilt k = d,
außerdem fügen wir d Restriktionen hinzu. Für jeden der höchstens T (n, k) Vergleiche
werden Operationen mit Laufzeit von höchstens O(d4 ) durchgeführt. Das führt zu einer
erwarteten Worst-Case-Laufzeit von
2d · ((n + d) − d) · O(d4 ) = O(d4 2d n).
2
4 Fazit
In dieser Ausarbeitung wurden einige randomisierte Algorithmen füe lineare Programmierung vorgestellt. Dieses Problem lässt sich sowohl mit der Random-Sampling-Technik
als auch durch inkrementelle Konstruktion angehen. Die vorgestellten Algorithmen haben, gleich, welche dieser Techniken sie verwenden, eine interessante Eigenschaft gemein:
Ihre erwartete Worst-Case-Laufzeit in Bezug auf die Anzahl von Restriktionen des zu
bearbeitenden linearen Programms ist sehr klein, bei drei der vier vorgestellten Ansätze
14
sogar linear. Das erkaufen sich alle Algorithmen bis auf BasisLP durch hohe exponentielle Laufzeiten in der Dimension des Programms. Für
√ BasisLP konnte jedoch noch eine
4 d ln(n+1)
bessere als die hier gezeigte Schranke von O(nde
) nachgewiesen werden[4].
BasisLP hat also eine subexponentielle Laufzeit sowohl in d als auch in n.
Zusätzlich zu den Eigenschaften bezüglich der Laufzeit bestechen die hier vorgestellten
Algorithmen durch ihre Einfachheit im Vergleich mit ihren deterministischen Pendants,
zum Beispiel dem Simplex -Algorithmus und der Innere-Punkte-Methode.
Literatur
[1] Vašek Chvátal – Linear Programming, Freeman, 1983
[2] Kenneth L. Clarkson – Las Vegas Algorithms for Linear and Integer Programming
When the Dimension Is Small, Journal of the ACM, Volume 42, Issue 2 (März 1995),
S.488ff
[3] Micha Sharir, Emo Welzl – A Combinatorial Bound for Linear Programming and Related Problems, 9th Annual Symposium on Theoretical Aspects of Computer Science
(Februar 1992), S.569ff
[4] Jir̆ı́ Matous̆ek, Micha Sharir, Emo Welzl – A Subexponential Bound for Linear Programming, Proceedings of the eighth annual symposium on Computational geometry,
1992, S.1ff
[5] Rajeev Motwani, Prabhakar Raghavan – Randomized Algorithms, Cambridge University Press, 1995, S.262ff
15
5 Errata
Lemma 1. Sei S ⊆ H und sei
⊆ H\S eine
n R
o zufällig gewählte Menge von Restriktionen
p
aus H, wobei r := |R| = min d |H|, |H\S| . Sei x die optimale Lösung des durch R∪S
definierten LP und m := |H\S|. Dann ist die erwartete Anzahl der durch x verletzten
Restriktionen höchstens
d(m − r + 1)
.
r−d
Beweis. Sei CH = {Opt(T ∪ S|T ⊆ H\S} und CR = {Opt(T ∪ S|T ⊆ R}. Dann gilt
SampLP(R ∪ S) = Opt(R ∪ S) ∈ CR ⊆ CH .
Außerdem ist Opt(R ∪ S) das einzige Element in CR , das alle Restriktionen in R erfüllt.
Sei nun x ∈ CH fest, aber beliebig, vx die Anzahl von Restriktionen in H, die durch x
verletzt werden. Die Indikatorvariable ix sei dann 1, wenn x = Opt(R ∪ S) und 0 sonst.
Dann gilt für die erwartete Größe von V


X
X
X
E [|V |] = E 
vx ix  =
vx E [ix ] =
vx Pr [x = Opt(R ∪ S)]
x∈CH
x∈CH
x∈CH
aufgrund der Linearität des Erwartungswerts. Damit x = Opt(R ∪ S) gilt, müssen die d
Restriktionen, die x definieren, in R sein. Die restlichen r −d Restriktionen in R müssen
aus den verbleibenden m − d Restriktionen gewählt werden. Von diesen scheiden noch
einmal vx Restriktionen aus, weil sie durch x verletzt würden. Insgesamt werden aus m
Restriktionen r ausgewählt. Es gilt also
d
d
Pr [x = Opt(R ∪ S)] =
=
m−vx −r
r−d
m
r
m−vx −r
r−d
m
r
=
m − vx − d − (r − d − 1)
r−d
m−r+1
≤
·
r−d
m−vx −r
r−d
m
r
(m−vx −d)!
(m−vx −d−(r−d))!(r−d)!
=
m
r
(m−vx −d)!
(m−vx −d−(r−d−1))!(r−d−1)!
·
m
r
und damit
m−r+1 X
E [|V |] ≤
vx
r−d
x∈CH
m−vx −r
r−d
m
r
m−r+1 X
=
r−d
x∈CH
vx
1
m−vx −r
r−d
m
r
.
x −r
(v1x )(m−v
r−d )
nach einem ähnlichen Argument wie oben die Wahrscheinlichkteit,
m
(r)
dass x ein Element aus CR ist, für das genau eine Restriktion aus R verletzt ist: R darf
Dabei ist
16
dazu aus den m − vx − d Restriktionen, die durch x nicht verletzt sind, nur noch r − d − 1
enthalten, dafür muss eine von vx Restriktionen, die x verletzen, in R sein. Alle solchen
x sind in CR , da sie das Optimum für R ∪ T für eine Teilmenge T ⊂ R darstellen, in
dem genau eine Restriktion aus B(R ∪ S) gegenüber R fehlt.
Durch Summation erhalten wir, da CH die Menge aller möglichen Schnittpunkte von
R∪S bei fester Menge S ist, die erwartete Anzahl von Elementen in CR , durch die genau
eine Restriktion aus R verletzt ist. Jedes dieser Elemente ist allerdings das Optimum
eines linearen Programms, das durch (R\{h}) ∪ S für h ∈ R definiert wird. Es gibt
aber höchstens d solcher Elemente h ∈ R, für die Opt((R\{h}) ∪ S) 6= Opt(R ∪ S), da
Opt(R ∪ S) durch genau d Restriktionen definiert ist. Also gilt
"(
)#
y verletzt ge- m−r+1
d(m − r + 1)
E [|V |] ≤
· E y ∈ CR .
≤
nau ein h ∈ R r−d
r−d
Lemma 2. In einer Iteration der while-Schleife von SampLP gilt
2
h
p i 1
Pr |V | > 2 |H| ≤ .
2
Beweis. Seip
wieder r = |R| und m = |H\S|. Wir unterscheiden zwei Fälle: Gilt in Zeile
7 |H\S| < d |H|, werden alle verbleibenden Restriktionen ausgewählt. Es folgt |V | = 0,
da H = R ∪ S. Die Iteration ist auf jeden Fall erfolgreich, d.h.
h
p i
1
Pr[ |V | > 2 |H| = 0 ≤ .
2
√
Ansonsten gilt r = d n mit n := |H|, so dass
√
√
√
d(m − r + 1) d(m − d n + 1)
m−d n+1
n − 2d n + 1
√
√
√
≤
E [|V |] ≤
=
≤
.
r−d
d n−d
n−1
n−1
Letztere Ungleichung gilt im Allgemeinen nur für d ≥ 2, aber für eindimensionale LPs
lassen sich einfache Lösungsalgorithmen angeben. Es folgt
√
√
( n − 1)2 √
E [|V |] ≤ √
= n − 1 ≤ n.
n−1
Mit Hilfe der Markov-Ungleichung folgt
√
p i E[|V |]
n
1
Pr |V | > 2 |H| ≤ √ ≤ √ = .
2
2 n
2 n
h
2
17
Randomisierte PRAM-Algorithmen
Renate Ristov
1
Einleitung
Neben den klassischen sequentiellen, randomisierten Algorithmen gibt es
auch parallele Algorithmen, wo die Lösung des Problems mit mehreren Prozessoren berechnet wird. Die Betrachtung paralleler Verarbeitung ist wichtig, weil viele Probleme sich gut parallelisieren lassen und somit effizienter gelöst werden können als mit sequentiellen Algorithmen. Randomisierte parallele Algorithmen sind außerdem oft weniger komplex als deterministische parallele Algorithmen und für manche Probleme ist der beste Algorithmus randomisiert und parallel, wie das Finden eines perfekten Matchings in einem Graphen. Diese Ausarbeitung konzentriert sich dabei auf
die parallele Verarbeitung (im Gegensatz zu verteilten System), bei der eine Anzahl an Prozessoren in einem Rechner eng miteinander verbunden ist
und mit regelmäßigem Austauschen von Informationen mit relativ geringen
Zeitverlusten das Problem gemeinsam löst. Es werden zwei Probleme aus
der Graphentheorie vorgestellt, für die parallele randomisierte Algorithmen
existieren: das Finden einer maximalen unabhängigen Menge und perfektes
Matching. Zunächst wird das Rechnermodell vorgestellt, das für parallele
Berechnungen verwendet wird.
2
PRAM Modell
Das hier verwendete Rechnermodell ist das PRAM Modell (parallel random access machine), wobei RAM die idealisierte von Neumann-Maschine
bezeichnet. Die Parallelmaschine besteht aus einer unbeschränkten Menge
an RAM-Prozessoren. Die Kommunikation erfolgt über einen globalen Speicher, auf den die Prozessoren zugreifen können. Die Berechnung erfolgt in
synchronen parallelen Schritten. Das bedeutet, dass jeder Prozessor Schritt
i ausgeführt haben muss, bevor irgendein Prozessor mit dem Schritt i + 1
beginnen kann. Ein Schritt sieht so aus, dass jeder Prozessor eine gewählte Zelle des globalen Speichers ausliest, eine Instruktion ausführt und den
errechneten Wert in eine gewählte Zelle schreibt.
Bei einem gemeinsamen Zugriff auf eine Speicherzelle kann es zu Konflikten kommen. Für die Regelung gibt es verschiedene Modelle:
• CRCW (concurrent read, concurrent write): gleichzeitiges Lesen und
gleichzeitiges Schreiben
• CREW (concurrent read, exclusive write): gleichzeitges Lesen, nur ein
Prozessor kann pro Zeiteinheit in eine Stelle schreiben
• EREW (exclusive read, exclusive write): Pro Zeiteinheit kann nur ein
Prozessor eine Stelle lesen bzw. in eine Stelle schreiben
Die in dieser Ausarbeitung vorgestellten Algorithmen arbeiten ohne gleichzeitigen Schreibzugriff.
Es ist von Interesse zu erfahren, ob es für bestimmte Probleme effiziente
parallele Algorithmen gibt. Effizienz bedeutet in diesem Fall, dass der Algorithmus polylogarithmische Laufzeit hat und polynomiell viele Prozessoren
benötigt. Daher wurde für die Analyse folgende Klasse NC eingeführt, die
die Probleme enthält, für die es einen effizienten Algorithmus gibt.
Definition 2.1. Die Klasse NC besteht aus den Sprachen L für die es einen
PRAM-Algorithmus A gibt, so dass für jedes x ∈ Σ∗ gilt:
• x ∈ L ⇒ A(x) akzeptiert; x ∈
/ L ⇒ A(x) lehnt ab
• die Anzahl der Prozessoren, die A benötigt, ist |x|O(1) (polynomiell)
• die Anzahl der Schritte, die A benötigt, ist (log|x|)O(1) (polylogarithmisch)
Für randomisierte PRAM-Algorithmen gibt es entsprechend folgende
Klasse RNC :
Definition 2.2. Die Klasse RNC besteht aus den Sprachen L für die es
einen PRAM-Algorithmus A gibt, so dass für jedes x ∈ Σ∗ gilt:
• x ∈ L ⇒ P [A(x) akzeptiert ] ≥ 12 ; x ∈
/ L ⇒ P [A(x) akzeptiert ] = 0
• die Anzahl der Prozessoren, die A benötigt, ist |x|O(1) (polynomiell)
• die Anzahl der Schritte, die A benötigt, ist (log|x|)O(1) (polylogarithmisch)
3
Maximale unabhängige Menge
In einem ungerichteten Graphen G(V, E) ist eine Menge I ⊆ V unabhängig,
wenn keine Kante aus E zwei Knoten aus I verbindet. Die unabhängige
Menge ist maximal, wenn kein weiterer Knoten hinzugefügt werden kann
ohne die Unabhängigkeit zu verlieren. In Abbildung 1 gibt es zum Beispiel
Abbildung 1: Ungerichteter Graph
die maximalen unabhängigen Mengen {2, 6}, {1, 3, 6} oder {1, 3, 4, 7}. Letzteres ist auch die größte unabhängige Menge. Diese zu finden ist ein NP vollständiges Problem.
Um irgendeine maximale unabhängige Menge zu finden, lässt sich wiederum problemlos ein einfacher sequentieller Algorithmus angeben. Die Menge
aller Nachbarn eines Knotens v wird mit Γ(v) bezeichnet. Der Grad von v
ist damit d(v) = |Γ(v)|.
Der sequentielle Algorithmus initialisiert I als leere Menge und geht jeden Knoten v durch und fügt ihn zu I hinzu, wenn I ∩ Γ(v) = ∅ gilt. Dieser
Algorithmus ist inhärent sequentiell und gibt die lexikographisch erste maximale unabhängige Menge aus. In jeder Iteration wird das Ergebnis der vorherigen benötigt. Deswegen ist es scheinbar unmöglich das Problem der lexikographisch ersten maximalen unabhängigen Menge parallel zu lösen. Aber
es gibt mittlerweile effiziente parallele Algorithmen, um irgendeine maximale unabhängige Menge zu finden. Im Folgenden wird ein RNC -Algorithmus
vorgestellt.
3.1
Ein paralleler randomisierter Algorithmus
Im Wesentlichen wird in dem Algorithmus eine unabhängige Menge S gefunden, die zu I hinzugefügt wird, und S ∪ Γ(S) wird aus dem Graphen entfernt. Um eine unabhängige Menge S zu finden, wird zufällig eine große Anzahl der Knoten markiert, wobei Knoten mit einem niedrigen Grad bevorzugt werden. Danach überprüft man, ob unter den markierten Knoten welche mit einer Kante verbunden sind und entfernt die Markierung des Knotens mit dem niedrigeren Grad. Die so entstande Menge S ist unabhängig.
Es werden anfänglich Knoten mit niedrigem Grad bevorzugt, um zu vermeiden, dass sie besonders viele Nachbarn haben, die auch markiert werden,
und dass dadurch im zweiten Schritt wieder viele Markierungen entfernt
werden müssen. Diese Idee wird in Algorithmus 1 aufgegriffen.
Der Algorithmus ist korrekt: In jedem Durchlauf ist die Menge S, die zur
unabhängigen Menge I hinzugefügt wird, unabhängig, da adjazente Knoten
in S im Schritt 2.2 aus S entfernt werden. Da alle Knoten aus S und alle
Nachbarknoten von S aus dem Graphen entfernt werden, bleibt I auch un-
Algorithmus 1 Parallel MIS
Eingabe: Graph G(V, E)
Ausgabe: Eine maximale unabhängige Menge I ⊆ V
1. I ← ∅
2. wiederhole
2.1 für alle v ∈ V führe parallel aus
falls d(v) = 0 dann füge v zu I und lösche v aus V
1
sonst markiere v mit Wahrscheinlichkeit 2d(v)
2.2 für alle (u, v) ∈ E führe parallel aus
falls u und v markiert sind
dann entferne die Markierung des Knotens mit dem kleineren
Grad
2.3 für alle v ∈ V führe parallel aus
falls v markiert ist dann füge v zu S
2.4 I ← I ∪ S
2.5 entferne S ∪ Γ(S) aus V und alle inzidenten Kanten aus E
bis V = ∅
abhängig. Da nur Knoten entfernt werden, die entweder zu I gehören oder
Nachbarknoten von I sind, ist die Ausgabe des Algorithmus eine maximale
unabhängige Menge.
Der Algorithmus läuft auf einer EREW-PRAM, wobei jedem Knoten
und jeder Kante ein Prozessor zugewiesen ist. Eine Iteration kann in Zeit
O(log n) implementiert werden. Ziel ist es hier zu zeigen, dass die erwartete
Anzahl der Iterationen O(log n) ist. Das bedeutet dann, dass der Algorithmus insgesamt eine Laufzeit von O(log 2 n) hat und O(n+m) Prozessoren
benötigt.
3.2
Analyse
Um zu zeigen, dass der Erwartungswert der Iterationen O(log n) ist, wird
gezeigt, dass die erwartete Anzahl der Kanten, die in jeder Iteration entfernt
werden, von unten durch eine konstante Zahl begrenzt ist. Hierfür betrachten
wir gute Knoten und Kanten, die wie folgt definiert sind.
Definition 3.1. Ein Knoten v ∈ V ist gut, wenn mindestens d(v)
3 seiner
Nachbarn einen Grad ≤ d(v) haben. Ansonsten ist der Knoten schlecht. Eine
Kante ist gut, wenn mindestens einer ihrer Endpunkte ein guter Knoten ist.
Verbindet eine Kante also zwei schlechte Knoten, ist die Kante schlecht.
Ein guter Knoten hat also viele Nachbarknoten, die ihrerseits wenige
Nachbarn haben. Es wird gezeigt, dass es wahrscheinlich ist, dass einer dieser Nachbarknoten in der Menge S enthalten ist, und somit, dass v entfernt wird. Außerdem soll gezeigt werden, dass es viele gute Kanten im Graphen gibt, und, da diese inzident zu guten Knoten sind und mit ziemlicher
Wahrscheinlichkeit entfernt werden, wird eine große Zahl an Kanten in jeder
Iteration entfernt.
Lemma 3.1. Sei v ∈ V ein guter Knoten mit d(v) > 0. Dann ist die
Wahrscheinlichkeit, dass ein Knoten w ∈ Γ(v) markiert wird, mindestens
1
1
1 − e− 6 . Also P (Γ(v) ∩ S 6= ∅) ≥ 1 − e− 6 .
Beweis. Sei H(v) die Menge der Nachbarknoten von v, die einen kleineren
oder gleichgroßen Grad haben. Da v ein guter Knoten ist, gilt |H(v)| ≥ d(v)
3 .
P (Γ(v) ∩ S 6= ∅) = 1 − P (Γ(v) ∩ S = ∅)
Y
= 1−
P (w ∈
/ S)
(1)
(2)
w∈Γ(v)
Y
= 1−
(1 −
1
)
2d(w)
(3)
(1 −
1
)
2d(w)
(4)
(1 −
1
)
2d(v)
(5)
w∈Γ(v)
Y
≥ 1−
w∈H(v)
Y
≥ 1−
w∈H(v)
1
− 2d(v)
∗
≥ 1−e
d(v)
3
(6)
− 16
= 1−e
(7)
Da die Knoten unabhängig markiert werden, ist die Wahrscheinlichkeit, dass
kein Nachbarknoten von v markiert wird, das Produkt der einzelnen Wahrscheinlichkeiten (2). Die Ungleichung in (4) gilt, weil die Knoten in H(v)
Grad ≤ d(v) haben und damit mit höherer Wahrscheinlichkeit markiert
1
1
werden. Die Ungleichung in (5) gilt, weil (1 − 2d(w)
) ≤ (1 − 2d(v)
). Die Ungleichung in (6) gilt, da Folgendes gilt, wofür die Taylorentwicklung für die
e-Funktion verwendet wird.
1−
1
2(dv)
1
− 2d(v)
≤ e
=
(8)
∞ (− 1 )n
X
2d(v)
n=0
(9)
n!
∞
= 1−
1
n
X (− 2d(v) )
1
+
2(dv)
n!
n=2
(10)
Die Summe in (10) ist positiv, da der Betrag eines Summanden mit geradem
n größer ist als der Betrag des darauffolgenden Summanden mit ungeradem
n.
Lemma 3.2. Wenn ein Knoten w während einer Iteration markiert wird,
dann wird er mit einer Wahrscheinlichkeit von mindestens 12 in S aufgenommen, also P (w ∈ S|w markiert) ≥ 12 .
Beweis. Die Markierung eines Knotens w wird nur aufgehoben, wenn es
einen anderen Knoten in der Nachbarschaft gibt, dessen Grad ≥ d(w)
und der auch markiert wurde. Sei das Ereignis E wie folgt definiert: x ∈
Γ(w), so dass d(x) ≥ d(w) und x ist markiert.
P (w ∈ S|w markiert) = 1 − P (w ∈
/ S|w markiert)
(1)
= 1 − P (E)
(2)
≥ 1 − |x ∈ Γ(w)|d(x) ≥ d(w)| ∗
≥ 1−
X
x∈Γ(w)
= 1 − d(w) ∗
=
1
2
1
2d(w)
(3)
1
2d(w)
(4)
1
2d(w)
(5)
(6)
Lemma 3.3. Die Wahrscheinlichkeit, dass ein guter Knoten zu S ∪ Γ(S)
1
gehört ist mindestens
1−e− 6
2
.
Beweis. Die Wahrscheinlichkeit, dass ein guter Knoten v zu S ∪Γ(S) gehört,
ist gleich dem Produkt der Wahrscheinlichkeit, dass ein Nachbarknoten von
v markiert wird, und der Wahrscheinlichkeit, dass ein markierter Knoten in
S aufgenommen wird. Das Ergebnis ist also das Produkt der Wahrscheinlichkeiten aus Lemma 3.1 und 3.2.
Es wurde jetzt also gezeigt, dass es wahrscheinlich ist, dass ein guter
Knoten zu S ∪ Γ(S) und damit während einer Iteration aus dem Graphen
entfernt wird. Jetzt gilt es nur noch zu zeigen, dass es viele gute Kanten
gibt, welche ihrerseits inzident zu guten Knoten sind.
Lemma 3.4. Die Anzahl der guten Kanten in einem Graphen G(V, E) ist
mindestens |E|
2 .
Beweis. Die Kanten werden jeweils vom Knoten mit niedrigerem Grad zum
Knoten mit höherem Grad gerichtet. Der Eingangsgrad von v wird mit di (v)
bezeichnet und der Ausgangsgrad mit do (v). Ist v ein schlechter Knoten, so
gilt, dass weniger als d(v)
3 Nachbarknoten einen Grad ≤ d(v) haben, also ha2d(v)
ben mehr als 3 Knoten einen höheren Grad. Damit gilt für jeden schlechten Knoten
d(v)
do (v) − di (v)
do (v) − di (v) ≥
=
.
3
3
Mit E(S, T ) werden alle Kanten von Knoten in S zu Knoten in T bezeichnet.
Sei VB die Menge aller schlechten Knoten und VG die Menge aller guten
Knoten. Der totale Grad aller schlechten Knoten ist:
X
(do (v) + di (v)) = 2|E(VB , VB )| + |E(VB , VG )| + |E(VG , VB )| (1)
v∈VB
Wegen obiger Ungleichung gilt Folgendes:
X
X
(do (v) + di (v)) ≤ 3
(do (v) − di (v))
v∈VB
(2)
v∈VB
= 3
X
(di (v) − do (v))
(3)
v∈VG
Die Gleichung in (3) gilt, weil in einem gerichteten Graph di (V ) = do (V )
gilt und VG die Komplementärmenge zu VB ist. Das bedeutet, alle Kanten,
die von VG zu VB gehen, gehören in VG zum Ausgangsgrad und in VB zum
Eingangsgrad und umgekehrt. Für den totalen Eingangsgrad aller guten
Knoten gilt
|E(VB , VG )| + |E(VG , VG )|.
Der totale Ausgangsgrad berechnet sich mit
|E(VG , VB )| + |E(VG , VG )|.
Eingesetzt in (3), ergibt:
X
3
(di (v) − do (v)) = 3(|E(VB , VG )| − |E(VG , VB |)
(4)
v∈VG
≤ 3(|E(VB , VG )| + |E(VG , VB |)
(5)
Aus (1) und (5) ergibt sich folgende Ungleichung:
|E(VB , VB )| ≤ |E(VB , VG )| + |E(VG , VB )|
(6)
Da sich auf der linken Seite der Ungleichung nur die schlechten und auf der
rechten Seite nur die guten Kanten befinden, gilt, dass es mindestens |E|
2
gute Kanten in einem Graphen gibt.
Es wurde gezeigt, dass es viele gute Kanten in einem Graphen gibt, die
inzident zu guten Knoten sind. Diese guten Knoten haben eine konstante
Wahrscheinlichkeit entfernt zu werden. Daraus folgt, dass die erwartete Zahl
der zu eliminierenden Kanten ein konstanter Teil der vorhandenen Kanten
ist. Man muss darauf hinweisen, dass die Analyse auf Wahrscheinlichkeiten
basiert, das bedeutet, man kann nicht sagen, dass jede Runde ein konstanter Teil entfernt wird, vielmehr ist der Erwartungswert größer gleich einer
konstanten Zahl. Damit ist die erwartete Zahl an Iterationen O(log n). Der
gesamte Algorithmus benötigt also auf einer EREW-PRAM eine erwartete
Zeit von O(log 2 n) mit O(n+m) Prozessoren.
Es gibt auch effiziente parallele Algorithmen, die ohne Zufallsvariablen
arbeiten, wie der von Karp vorgestellte Algorithmus [KW84]. Dieser Algorithmus ist aber um einiges komplexer und benötigt auch mehr Zeit. Luby
stellt eine Möglichkeit vor, den oben angegebenen Algorithmus zu derandomisieren [Lu85]. Mit der Derandomisierung, die die Eigenschaft paarweise Unabhängigkeit nutzt, stellt er eine Methode dar, effiziente und einfache
Algorithmen für Probleme zu finden. Erst entwickelt man einen einfachen
parallelen randomisierten Algorithmus und dann derandomisiert man ihn.
Lubys derandomisierter Algorithmus benötigt weniger Laufzeit als der von
Karp vorgestellte.
4
Perfektes Matching
In einem Graphen G(V, E) ist ein perfektes Matching eine Kantenmenge
M ⊆ E, so dass jeder Knoten aus V zu exakt einer Kante in M gehört,
es also auch keine zwei Kanten in M gibt, die einen gemeinsamen Knoten
haben. Zum einen gibt es das Entscheidungsproblem, ob es ein perfektes
Matching gibt in einem Graphen, und zum anderen das Problem des Findens
eines perfekten Matchings.
4.1
Das Entscheidungsproblem des perfekten Matchings
Bevor wir zu allgemeinen Graphen kommen, wollen wir das Problem des
perfekten Matchings für bipartite Graphen betrachten. Bei einem bipartiten
Graphen G(U, V, E), mit |U | = |V |, verbindet keine Kante Knoten innerhalb
einer Menge. Ein perfektes Matching kann also als Permutation von U nach
V betrachtet werden. Für den Graph in Abbildung 4.1 gibt es folgende
perfekte Matchings: M1 = {(1, 1), (2, 2), (3, 3)}, M2 = {(1, 2), (2, 1), (3, 3)},
M3 = {(1, 3), (2, 1), (3, 2)}.
Zu einem Graphen G(U, V, E), mit n = |U | = |V |, sei A folgende n × nMatrix:
(
1 (ui , vj ) ∈ E
Aij =
0 (ui , vj ) ∈
/E
Abbildung 2: Bipartiter Graph
Die Matrix zum Graphen in Abbildung 4.1 sieht dann folgendermaßen aus:


1 1 1
A = 1 1 0 
0 1 1
Die Determinante einer Matrix wird folgendermaßen berechnet:
X
det(A) =
sgn(π)a1π(1) a2π(2) . . . anπ(n) ,
π∈Sn
wobei Sn die Gruppe aller Permutationen auf n Elementen ist. sgn(π) bezeichnet das Vorzeichen der Permutation π, welches positiv ist, wenn die
Permutation gerade ist, und negativ, wenn die Permutation ungerade ist.
Die Determinante zur obiger Matrix ist
det(A) = a11 a22 a33 −a11 a23 a32 −a12 a21 a33 +a12 a23 a31 +a13 a21 a32 −a13 a22 a31
= 1 − 0 − 1 + 0 + 1 − 0 = 1.
Theorem 4.1. Gegeben sei ein bipartiter Graph G = (U, V, E) mit |U | = |V |
und die daraus resultierende Matrix A. Wenn det(A) 6= 0, dann hat G ein
perfektes Matching.
Beweis. Eine Permutation π bezeichnet ein potenzielles perfektes Matching
in einem bipartiten Graphen, denn jedes (i, π(i)) ist potenzielle Kante im
Graphen. Ist der Wert ai,π(i) = 0, so existiert die Kante nicht, und das Produkt der Kantengewichte der Permutation, im Folgenden mit Wert der Permutation bezeichnet, wird 0. Existieren aber alle Kanten der Permutation,
dann wird ein perfektes Matching beschrieben und der Wert der Permutation wird nicht null. Ist also die Determinante nicht null, dann gibt es mindestens ein perfektes Matching. Im obigen Beispiel kann man genau sehen,
dass die Werte der Permutationen, die nicht null sind, genau die drei oben
angegeben Matchings sind.
Man beachte, dass die Determinante null sein kann, obwohl es perfekte
Matchings gibt. Das passiert genau dann, wenn es gleich viele ungerade und
gerade Permutationen gibt und sich diese gegenseitig aufheben. Um dieses
Problem zu lösen, wird die Matrix so abgeändert, dass sie Unbestimmte
enthält. Dann gilt folgendes Theorem.
Theorem 4.2. Gegeben sei die Matrix B zu einem Graphen G(U, V, E):
(
xij (ui , vj ) ∈ E
Bij =
0
(ui , vj ) ∈
/E
Dann hat G ein perfektes Matching, genau dann wenn det(B) 6≡ 0.
Beweis. Da hier jede Unbestimmte xij nur einmal in B auftritt, kann es
keine Aufhebungen durch gerade und ungerade Permutationen geben. Damit
ist die Determinante nur dann nicht identisch zu Null, genau dann wenn
es mindestens eine Permutation π gibt, dessen Produkt nicht null ist. Das
kann aber nur passieren, wenn es alle Kanten (i, π(i)) gibt, was äquivalent
zu einem perfekten Matching ist.
Für das Testen, ob die Determinante der symbolischen Matrix nicht identisch zu Null ist, wird folgendes Theorem verwendet.
Theorem 4.3 (Schwartz-Zippel Theorem). Sei Q(x1 , . . . , xn ) ein Polynom
mit n Unbestimmten und dem totalen Grad d. Sei S eine endliche, nichtleere Menge von ganzen Zahlen. Sei r1 , . . . , rn unabhängig und zufällig aus
S gewählt und den n Unbestimmten zugewiesen. Dann gilt, unter der Voraussetzung, dass Q nicht identisch zu Null ist:
P (Q(r1 , . . . , rn ) = 0) ≤
d
|S|
Das Theorem kann mit Induktion über die Anzahl der Unbestimmten
n bewiesen werden. Dazu verweise ich an dieser Stelle auf [MR95]. Dieses
Theorem kann auf das Bestimmen, ob die Determinante einer symbolischen
Matrix identisch zu Null ist, angewendet werden, da die Determinante ein
Polynom vom Grad n ist. Wählt man |S| = 2n, so ist, unter der Voraussetzung, dass Q nicht identisch zu Null, die Wahrscheinlichkeit, dass die Determinante der substituierten Matrix nicht null ist mindestens 21 . So kann also ein einfacher, randomisierter Algorithmus konstruiert werden, um zu bestimmen, ob ein Graph ein perfektes Matching besitzt. Diese Methode kann
auch auf nicht bipartite Graphen angewendet werden.
Für die Erweiterung auf allgemeine Graphen G(V, E), mit n Knoten,
wird eine Tutte-Matrix angelegt. Dies ist eine n × n-Matrix, die für jede
Kante (vi , vj ) ∈ E mit i < j in Aij die Unbestimmte xij stehen hat und in
Aji die Unbestimmte −xij . Es gilt folgendes Theorem:
Theorem 4.4 (Tuttes Theorem). Sei A die Tutte-Matrix, die aus G(V, E)
gewonnen wird, mit:


(vi , vj ) ∈ E und i < j
xij
Aij = −xij (vi , vj ) ∈ E und i > j


0
(vi , vj ) ∈
/E
Dann gilt, det(A) 6≡ 0, genau dann wenn G ein perfektes Matching besitzt.
Beweis. ⇐“: Angenommen G hat ein perfektes Matching M . Dann setze
”
für jede Kante (vi , vj ) in M die Unbestimmte xij = 1 und den Rest 0. Damit
ist die Determinante ungleich null.
⇒“: Angenommen die Determinante ist nicht identisch zu Null. Jede
”
Permutation in der Matrix entspricht einer Sammlung von Kreisen, die alle
Knoten abdecken.
Permutationen, die ungerade Kreise enthalten, d.h. Kreise über eine ungerade Anzahl an Knoten, stellen kein perfektes Matching dar, da jeder Knoten inzident zu zwei Kanten ist. Diese Permutationen heben sich gegenseitig auf und tragen zum Wert der Determinante nichts bei. Im Graphen in
Abbildung 3 ist so eine Permutation zum Beispiel ( 12 23 31 45 56 64 ). Die ungeraden Kreise, die mit dieser Permutation beschrieben werden, gehen über die
Knoten 1, 2, 3 und über die Knoten 4, 5, 6. Man kann sehen, dass das kein
Matching ist. Der Wert der Permutation ist x12 x23 (−x13 )x45 x56 (−x46 ). Betrachtet man nun die Kreise, die über die gleichen Knoten, aber in die andere Richtung gehen, also von 1 über 3 nach 2 und von 4 über 6 nach 5,
so sieht man, dass diese Permutation das gleiche Vorzeichen hat, aber alle
Einträge des Produkts negiert sind. In diesem Beispiel sieht der Wert dieser Permutation also wie folgt aus: x13 (−x12 )(−x23 )x46 (−x45 )(−x56 ). Das
bedeutet, dass sich diese beiden Permutationen aufheben.
Das bedeutet, in der Summe bleiben nur Permutationen mit geraden
Kreisen bestehen. Die Permutationen, die nur Kreise über genau zwei Knoten enthalten, beschreiben perfekte Matchings, zum Beispiel ( 12 21 34 43 56 65 ) im
obigen Graphen.
Es gibt aber auch Permutationen, die nur aus geraden Kreisen bestehen,
aber kein perfektes Matching beschreiben. Diese sind aber eine Vereinigung
aus zwei perfekten Matchings. Man nimmt einfach die alternierenden Kanten
jedes geraden Kreises. Im oberen Graphen ist so eine Permutation zum Beispiel ( 12 24 31 43 56 65 ). Die beiden perfekten Matchings, die in dieser Permutation
stecken, sind M1 = {(1, 2), (3, 4), (5, 6)} und M2 = {(1, 3), (2, 4), (5, 6)}.
Das bedeutet, da die Determinante nicht identisch zu Null, existiert eine Permutation nur mit geraden Kreisen über zwei Knoten oder eine mit
verschiedenen geraden Kreisen. Erstes beschreibt ein perfektes Matching.
Letzteres ist eine Kombination aus zwei perfekten Matchings.
Abbildung 3: Allgemeiner Graph
Der RNC -Algorithmus zum Bestimmen, ob es ein perfektes Matching
in einem allgemeinen Graphen gibt, konstruiert die Matrix A. Jeder Unbestimmten wird unabhängig und zufällig aus einer großen Menge an ganzen
Zahlen ein Zahl zugewiesen, nach der oben beschriebenen Methode. Dann
wird die Determinante der substituierten Matrix berechnet. Wenn G ein perfektes Matching hat, dann wird die Determinante mit großer Wahrscheinlichkeit nicht null. Wenn G kein perfektes Matching besitzt, dann wird die
Determinante auf jeden Fall null.
4.2
Finden eines perfekten Matchings
Bisher wurde nur das Problem des Entscheidens, ob ein perfektes Matching
existiert, behandelt. Jetzt wird eine Methode beschrieben zum Finden eine perfekten Matchings in einem Graphen. Wenn ein Graph viele perfekte
Matchings hat, ist es schwierig mehrere Prozessoren zu koordinieren, so dass
sie an der Konstruktion des selben perfekten Matchings arbeiten. Um das
Problem zu lösen, isoliert man genau ein perfektes Matching, indem man
die Kanten gewichtet und das perfekte Matching mit dem geringsten Gewicht betrachtet. Das Isolationslemma zeigt, dass es eine gute Wahrscheinlichkeit gibt, dass, wenn man die Kantengewichte zufällig wählt, es genau
ein eindeutig bestimmtes, perfektes Matching geringsten Gewichts gibt.
Lemma 4.1 (Isolationslemma). Sei F eine Familie von Teilmengen von
einer m-elementigen Menge X. Sei w : X → {1, . . . , 2m} die Gewichtsfunktion, wo jedem Element in X ein zufälliges Gewicht gleichverteilt und
unabhängig über den Definitionsbereich zugewiesen wird. Dann gilt
P (Es gibt eine eindeutige Menge minimalen Gewichts in F) ≥
1
2
Beweis. Es werden alle Gewichte gewählt, außer dem Gewicht von Element
xi . Sei Wi das Gewicht einer Menge minimalen Gewichts, welches xi enthält
(xi wird erstmal ignoriert), und sei Wi das Gewicht einer Menge minimalen
Gewichts, welches xi nicht enthält. Sei der Schwellwert αi = Wi − Wi , dann
gilt Folgendes:
1. Wenn αi < xi , dann ist xi in allen Mengen minimalen Gewichts enthalten.
2. Wenn αi > xi , dann ist xi in keiner Menge minimalen Gewichts enthalten.
3. Wenn αi = xi , dann gibt es eine Menge minimalen Gewichts mit xi
und eine andere Menge minimalen Gewichts ohne xi .
Im letzten Fall gibt es also keine eindeutige Menge minimalen Gewichts, da
xi nicht eindeutig ist. Da αi unabhängig von dem Gewicht von xi definiert
wurde und da die Gewichte gleichverteilt und abhängig gewählt wurden, gilt
für die Wahrscheinlichkeit, dass xi nicht eindeutig ist
P (αi = xi ) ≤
1
.
2m
Da es m Elemente in X gibt, gilt:
P (Es existiert ein nicht eindeutiges Element) ≤ m ∗
1
1
= .
2m
2
Angewendet auf das Problem des perfekten Matchings, bedeutet es, dass
X die Menge der m Kanten und F die Menge der perfekten Matchings ist.
Das Isolationslemma sagt hier aus, dass, wenn man den Kanten zufällig Gewichte aus 1 bis 2m zuweist, gibt es mit einer Wahrscheinlichkeit von mindestens 12 ein eindeutiges perfektes Matching minimalen Gewichts. Im Algorithmus wird dieses also herausisoliert und alle Prozessoren können dann
an der Konstruktion des selben perfekten Matchings arbeiten.
Es wird also jeder Kante (vi , vj ) in G ein zufälliges Gewicht zugewiesen,
bezeichnet mit wij . Angenommen es gibt ein eindeutiges perfektes Matching
minimalen Gewichts M , wobei W das Gewicht ist. Die Tutte-Matrix A wird
zu einer Matrix B so geändert, dass für jede Unbestimmte xij der Wert 2wij
eingesetzt wird. Die Werte über der Diagonalen sind als positive Zweierpotenzen und die unter der Diagonalen sind negative Zweierpotenzen.
Lemma 4.2. Wenn es ein eindeutiges perfektes Matching minimalen Gewichts gibt, dann ist det(B) 6= 0 und die höchste Zweierpotenz, die die Determinante teilt, ist 22W .
Beweis. Wie schon im Beweis zu Theorem 4.4 gezeigt, heben sich Permutationen mit ungeraden Kreisen auf und tragen nicht zur Determinante bei.
Die Permutation σ, die das perfekte Matching M beschreibt, besteht aus
genau den Kanten in M , also aus Kreisen über zwei Knoten. Damit ist der
n
Wert von σ exakt (−1) 2 22W . Im Graphen in Abbildung 4 ist der Wert von
σ = ( 12 21 35 46 53 64 ) also 25 (−25 )28 23 (−28 )(−23 ) = 25+5+8+3+8+3 = 22∗16 .
Die Permutation anderer perfekten Matchings haben als Wert eine höhere Zweierpotenz als bei σ, da ja das Gewicht von M eindeutig minimal ist.
Permutationen, die keine perfekten Matchings beschreiben und nur aus
geraden Kreisen bestehen, beinhalten zwei perfekte Matchings, wie schon
im Beweis zu Theorem 4.4 erklärt. Der Wert dieser Permutationen ist
2w(M 1)+w(M 2) , also auch größer als 22W .
Das bedeutet, dass alle Werte von Permutation, die nicht null sind und
die sich nicht gegenseitig aufheben, nicht kleiner als 22W sind. Genauer gesagt, ist genau ein Wert 22W und alle anderen sind größer als 22W . Daher
ist
n
det(B) = ((−1) 2 + c)22W ,
wobei c auch eine Zweierpotenz ist. Also ist die Determinante ungleich null
und die größte Zweierpotenz, die die Determinante teilt, ist genau 22W .
Abbildung 4: Graph mit M = {(1, 2), (3, 5), (4, 6)} und W = 16
Findet man also die höchste Zweierpotenz, die die Determinante teilt,
dann kann man auf das minimale Gewicht W schließen. Dieses kann mit
einem NC -Algorithmus berechnet werden, genauso wie die Matrix B und
ihre Determinante.
Um zu bestimmen, ob eine bestimmte Kante zu M gehört, wird folgendes
Lemma verwendet. B ij ist der Minor von B, den man erhält, wenn man die
i-te Zeile und die j-te Spalte entfernt.
Lemma 4.3. Sei M das eindeutige perfekte Matching minimalen Gewichts
und W das Gewicht. Eine Kante (vi , vj ) gehört zu M , genau dann wenn
det(B ij )2wij
22W
ungerade ist.
Beweis. Man betrachtet nur die Permutationen, die i auf j abbilden. Diese
tragen
X
sgn(σ)a1σ(1) . . . anσ(n) = (−1)i+j 2wij det(B ij )
σ:σ(i)=j
zu det(B) bei.
Permutationen, die ungerade Kreise enthalten, tragen nicht zur Determinante bei, weil sie sich gegenseitig aufheben. Wenn eine Permutation einen
ungeraden Kreis mit einer Kante von i nach j hat, fehlt die Permutation mit
der Kante von j nach i. Da die Knotenanzahl aber gerade ist, müssen Permutation mindestens zwei ungerade Kreise haben. Das bedeutet, die Permutation hebt sich auf, wegen dem anderen ungeraden Kreis.
Wenn die Kante (vi , vj ) zu M gehört, dann gibt es genau eine Permutation mit dem Wert 22W (was ein ungerades Vielfaches von 22W ist) und
alle anderen Permutationen sind größer (wie in Lemma 4.2). Daher ist der
Zähler, wie oben gezeigt, folgender Wert
n
((−1) 2 + c)22W ,
wobei c eine Zweierpotenz ist und die Klammer ungerade ist. Teilt man
diesen Term durch 22W , erhält man eine ungerade Zahl.
Wenn die Kante (vi , vj ) nicht zu M gehört, sind alle Permutationen mit
geraden Kreisen ein gerades Vielfaches von 22W und damit ist auch der Wert
geteilt durch 22W gerade.
Damit kann der randomisierte Algorithmus zum Bestimmen eines perfekten Matchings beschrieben werden.
Algorithmus 2 Paralleles perfektes Matching
Eingabe: Graph G(V, E) mit mindestens einem perfekten Matching
Ausgabe: Ein perfektes Matching M ⊆ E mit Wahrscheinlichkeit ≥
1
2
1. Weise parallel jeder Kante (i, j) zufällig ein Gewicht wij aus
[1, 2, . . . , 2|E|] zu.
2. Berechne die substituierte Tutte-Matrix B mit 2wij für xij .
3. Berechne det(B).
4. Berechne W mit Hilfe, dass 22W die größte Zweierpotenz ist, die det(B)
teilt.
5. Berechne die Adjunkte adj(B), welche als Eintrag in (j, i) den Wert
von det(B ij hat.
6. Für alle Kanten (i, j) berechne parallel, ob det(B ij )2wij 22W ungerade
ist. Falls ja, füge (i, j) zu M .
Das Berechnen der Determinante und der Adjunkte kann mit RNC Algorithmen in Zeit O(log 2 n) mit polynomiell vielen Prozessoren geschehen. Damit ist der angegebene Algorithmus in RN C und kann ein bei einem
gegebenen Graphen G mit mindestens einem perfekten Matching ein perfektes Matching mit Wahrscheinlichkeit ≥ 12 bestimmen. Die benötigte Zeit des
Algorithmus ist O(log 2 n) bei O(n3,5 m) Prozessoren. Die Wahrscheinlichkeit
kann durch Wiederholungen verbessert werden.
5
Zusammenfassung
In dieser Arbeit wurden randomisierte PRAM-Algorithmen beschrieben.
Eine PRAM ist ein Parallelrechner-Modell, wo mehrere RAM-Prozessoren
über einen globalen Speicher kommunizieren und gemeinsam an der Lösung
eines Problems arbeiten. Solche randomisierte PRAM-Algorithmen sind
meist sehr effizient und einfach. Die Fehlerwahrscheinlichkeit kann durch
mehrere Durchläufe reduziert werden. Für manche Probleme sind nur randomisierte PRAM-Algorithmen bekannt, wie für das Problem des perfekten
Matchings (in dieser Ausarbeitung vorgestellt). Hier besteht noch die Frage,
ob es einen NC -Algorithmus gibt, also einen effizienten PRAM-Algorithmus,
der nicht randomisiert ist.
Literatur
[Ja92]
Jàjà, J. An Introduction to Parallel Algorithms. Addison-Wesley.
Reading (Massachusetts) u.a., 1992.
[KW84] Karp, R.M. und Wigderson, A. A fast parallel algorithm for the
maximal independent set problem. Proc. 16th ACM Symposium on
Theory of Computing, 1984, 266-272.
[Lu85] Luby, M. A simple parallel algorithm for the maximal independent
set problem. Proc. 17th ACM Symposium on Theory of Computing,
1985, 1-10.
[MR95] Motwani, R. und Raghavan, P.. Randomized Algorithms. Camebridge University Press. New York (NY), 1995.
Herunterladen