Inhaltsverzeichnis

Randomisierte Algorithmen SS 2021

Anmerkungen

Wie immer, keine Garantie auf Korrektheit im Protokoll. ; )

Die Prüfung

Der Randomisierte Quicksort

Was ist der randomisierte Quicksort?

Quicksort, aber das Pivotelement wird uniform zufällig ausgewählt.

Wie haben wir den analysiert?

(Habe angefangen mit dem worst case, nach Prof. Wanka ist der aber geschenkt.) Analyse des randomisierten Quicksorts im Detail erklären:

Was für eine Art Algorithmus ist der randomisierte Quicksort?

Las Vegas Algorithmus, da das Ergebnis immer korrekt ist aber die Laufzeit vom Zufall abhängt.

Probalistische Methode

Was ist die probalistische Methode?

Man beweist, dass ein Objekt E existiert, indem man zeigt, dass die Wahrscheinlichkeit, dass E zustande kommt > 0 ist.

Was ist ein MaxCut?

Knoten eines Graphen werden in zwei disjunkte Mengen aufgeteilt ⇒ Anzahl Kanten die von Menge A nach Menge B gehen = Z. Was ist der maximale Wert von Z, wenn A und B passend gewählt werden?

Dieses Problem ist NP-vollständig. MinCut hingegen (Was ist der minimale Wert von Z?) ist in Polynomzeit lösbar.

Was haben wir in Bezug auf MaxCut gezeigt?

Es existiert immer ein Schnitt der Größe mindestens m/2, wobei m die Zahl der Kanten ist.

Um das zu zeigen, baut man einen Algorithmus, welcher mit Chance jeweils 1/2 jeden Knoten in entweder A oder B packt.

Es gilt für dann eine Kante e=(v1, v2):

Pr[“e geht über den Schnitt”]

= Pr[“(v1 in A and v2 in B) or (v1 in B and v2 in A)”]

= 1/2 * 1/2 + 1/2 * 1/2 = 1/2

Und damit für den Erwartungswert der über den Schnitt gehenden Kanten E=m/2 ⇒ Mit p>0 existiert ein Schnitt >= m/2

Wir haben jetzt einen Erwartungwert. Wie können wir jetzt aber einen Algorithmus bauen, der uns auch einen m/2 Schnitt ausgibt?

Führe den oben genannten Algorithmus so lange aus, bis wir einen Schnitt >= m/2 bekommen.

Wie haben wir diesen Algorithmus analysiert?

Spalte den oberen Erwartungswert in einen Teil >= m/2 und einen Teil < m/2 auf. Nutze diese Aufteilung um die Wahrscheinlichkeit p abzuschätzen, dass eine Iteration einen Cut >= m/2 ausgibt. 1/p ist dann die erwartete Anzahl an Schritten (Geometrische Verteilung).

Randomisierte k-SAT Solvers

Was haben wir uns hier für einen Algorithmus (für 2-SAT) angesehen?

Fange mit irgendeiner Belegung an (Welche spielt keine Rolle, erst im Schöning wird auswürfeln gefordert).

Wiederhole n mal: Wähle eine Klausel C aus die nicht erfüllt ist, wähle aus ihr uniform eine Variable aus und tausche ihren Wert.

Sollte die KNF erfüllt werden bricht der Algorithmus direkt ab und gibt TRUE aus.

Ansonsten gibt er FALSE aus.

Wie haben wir diesen analysiert?

Fordere, dass die KNF erfüllbar ist, sei S eine erfüllende Belegung.

Definiere X_j := „Es stimmen j Variablen mit S überein“. Dann gilt (X_j → X_i bezeichnet den Übergang von X_j nach X_i):

Pr[X_n → X_n] = 1 (Da hier der Algorithmus spätestens abbricht) Pr[X_n → X_{n-1}] = 0 (“”)

Pr[X_0 → X_1] = 1 (Da definitiv eine Variable richtig gemacht wird)

Pr[X_i → X_{i+1}] >= 1/2 (Da mindestens eine Variable in C falsch ist)

Pr[X_i → X_{i-1}] ⇐ 1/2 (Da maximal eine Variable in C richtig ist)

Resultierende Markov-Kette beschreiben und zeichnen. Daraus ergibt sich für h_j := „Erwartete Anzahl Schritte um von X_j nach X_0 zu kommen“:

h_0 = 1 + h_{1} h_j = 1 + 1/2 h_{j-1} + 1/2 h_{j+1} h_n = 0

n+1 Gleichungen n Variablen ⇒ LGS. Lösung: n^2-j^2 ⇒ n^2 Schritte erwartet bis der Algorithmus eine Lösung findet.

Was ändert sich jetzt im 3-SAT?

Pr[X_i → X_{i+1}] >= 1/3 (Da mindestens eine Variable in C falsch ist)

Pr[X_i → X_{i-1}] ⇐ 2/3 (Da maximal zwei Variablen in C richtig sind)

Markov-Kette ändert sich, damit auch das LGS:

h_0 = 1 + h_{1} h_j = 1 + 2/3 h_{j-1} + 1/3 h_{j+1} h_n = 0

Lösung: poly(n, j)*2^n ⇒ poly(n)*2^n Schritte erwartet bis der Algorithmus eine Lösung findet, sogar schlechter als Bruteforce.