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.