Lineare Kongruenzgeneratoren und Quicksort

Ähnliche Dokumente
Abschnitt: Algorithmendesign und Laufzeitanalyse

Pollards Rho-Methode zur Faktorisierung

Randomisierte Algorithmen 2. Erste Beispiele

Pseudozufallsgeneratoren

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Asymptotische Laufzeitanalyse: Beispiel

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Algorithmentheorie Randomisierung. Robert Elsässer

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Klausurvorbereitung für die Semesterferien - 20 Aufgaben -

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

7. Sortieren Lernziele. 7. Sortieren

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

37 Gauß-Algorithmus und lineare Gleichungssysteme

Probabilistische Primzahltests

Simulation von Zufallsvariablen und Punktprozessen

Algorithmen und Datenstrukturen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Quicksort ist ein Divide-and-Conquer-Verfahren.

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Erzeugung von Pseudozufallszahlen

JAVA - Suchen - Sortieren

Zufallszahlen. Diskrete Simulation. Zufallszahlengeneratoren - Zufallszahlen

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

2.7 Der Shannon-Fano-Elias Code

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

Zufallszahlen in AntBrain

Datenstrukturen & Algorithmen

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Komplexität von Algorithmen

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

1 Zahlentheorie. 1.1 Kongruenzen

Einwegfunktionen. Problemseminar. Komplexitätstheorie und Kryptographie. Martin Huschenbett. 30. Oktober 2008

3. Übungsblatt zu Algorithmen I im SoSe 2017

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n)

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Proseminar Datensicherheit & Versicherungsmathematik RSA-Verfahren

Kryptographie und Komplexität

Programmiertechnik II

Bestimmung einer ersten

Vorlesung Algorithmische Geometrie Konvexe Hülle im R 3

Algorithmen und Datenstrukturen

2 Die Körper-Axiome. I. Axiome der Addition (A.1) Assoziativgesetz. Für alle x, y, z R gilt (x + y)+z = x +(y + z).

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Übungsklausur Algorithmen I

Lösungen der Aufgaben

1 Potenzen und Polynome

Informatik B Sommersemester Musterlösung zur Klausur vom

Der folgende Vortrag basiert auf dem Text A Polynomial Time Algorithm for the N-Queens Problem von Rok Sosic und Jun Gu aus dem Jahre 1990.

5 Zwei spieltheoretische Aspekte

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Grundlagen der Programmierung

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

Lösungen zur 1. Klausur. Einführung in Berechenbarkeit, formale Sprachen und Komplexitätstheorie

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Vorkurs: Mathematik für Informatiker

Nr. 4: Pseudo-Zufallszahlengeneratoren

Kapitel 1. Exakte Suche nach einem Wort. R. Stiebe: Textalgorithmen, WS 2003/04 11

Graphentheorie. Eulersche Graphen. Eulersche Graphen. Eulersche Graphen. Rainer Schrader. 14. November Gliederung.

Erzeugung von Pseudozufallszahlen mit Computern

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

4. ggt und kgv. Chr.Nelius: Zahlentheorie (SS 2007) 9

Technische Universität München Zentrum Mathematik. Übungsblatt 7

Datenstrukturen und Algorithmen

Die Formel für die Standardabweichung lautet (ohne die Wurzel haben wir die Varianz):

Kapitel 3: Die Sätze von Euler, Fermat und Wilson. 8 Der Satz von Euler

Programmiertechnik II

$Id: ring.tex,v /05/03 15:13:26 hk Exp $

Faktorisierung ganzer Zahlen mittels Pollards ρ-methode (1975)

Randomisierte Algorithmen

Dualitätssätze der linearen Optimierung

Übersicht über Informatik und Softwaresystemtechnik WS 99/00, Prof. Dr. Andreas Schwill

Datenstrukturen und Algorithmen

Lösungsvorschlag für die Probeklausuren und Klausuren zu Algebra für Informations- und Kommunikationstechniker bei Prof. Dr.

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

WS 2009/10. Diskrete Strukturen

1.4 Die maximale Periode

Informatik II, SS 2014

Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort.

Algorithmen und Datenstrukturen 1

Informatik I 1. Kapitel. Einführung in Algorithmen und Datenstrukturen. Einführung in Algorithmen. Einführung in Algorithmen.

Informatik II, SS 2014

Programmieren I. Kapitel 7. Sortieren und Suchen

8.2 Invertierbare Matrizen

Gierige Algorithmen Interval Scheduling

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Das Briefträgerproblem

7. Kongruenzrechnung Definition: Proposition: Korollar: Beispiel: b ( a kongruent b modulo n ) auf Z, definiert durch:

Informatik II, SS 2014

Dynamisches Huffman-Verfahren

6 Speicherorganisation

Cauchy-Folgen und Kompaktheit. 1 Cauchy-Folgen und Beschränktheit

Algorithmen und Datenstrukturen 1-3. Seminar -

8 Summen von Quadraten

Transkript:

Seminar Perlen der theoretischen Informatik Dozenten: Prof. Johannes Köbler und Olaf Beyersdorff Lineare Kongruenzgeneratoren und Quicksort Ausarbeitung zum Vortrag Mia Viktoria Meyer 12. November 2002

Inhaltsverzeichnis 1. Einleitung...3 2. Lineare Kongruenzgeneratoren...3 3. Annahmen für die Implementierung von Quicksort...3 4. Annahmen für den linearen Kongruenzgenerator...5 5. Verwendung von Pseudozufallszahlen in Quicksort...6 6. Theorem von Karloff und Raghavan...6 6.1. Folgerungen...6 6.2. Beweisidee...6 6.3. Beweis...7 7. Quellen...10 2

1. Einleitung Probabilistische Algorithmen, die Zufallszahlen in ihrer Berechnung gebrauchen, sind oftmals die effizientesten Algorithmen, um Probleme zu lösen. Daher liegt es nahe, in die Implementierung eines probabilistischen Algorithmus einen linearen Kongruenzgenerator zu integrieren, der Folgen von Pseudozufallszahlen erzeugt. Bei der Verwendung eines linearen Kongruenzgenerators für die Implementierung von Quicksort wird sich jedoch zeigen, dass es gewisse Regeln einzuhalten gilt, um eine erwartete Laufzeit O(n log n) zu erzielen - anstelle einer quadratischen erwarteten Laufzeit. 2. Lineare Kongruenzgeneratoren Ein Pseudozufallszahlengenerator ist ein deterministischer Algorithmus, der aus der Eingabe einer kleinen Anzahl k von echt zufälligen Bits (seed) eine Ausgabe generiert, die einer großen Anzahl m von Bits entspricht (pseudozufällige Bits). Die Folge der m pseudozufälligen Bits ist eine Zufallszahl in dem Sinne, dass verschiedene Werte mit einer bestimmten Wahrscheinlichkeit angenommen werden -, aber sie ist keineswegs gleichverteilt über {0, 1} m, da höchstens 2 k unterschiedliche Werte mit einer Wahrscheinlichkeit größer 0 auftreten können. Karloff und Raghavan haben den Effekt eines Pseudozufallszahlengenerators auf Quicksort untersucht, der wie folgt definiert ist: Definition: Ein linearer Kongruenzgenerator hat drei Parameter m, a und c. Mit einem zufällig gewählten Startwert (seed) X 0 Ζ m wird eine Folge von Pseudozufallszahlen X 0, X 1,..., X i,... erzeugt, wobei X i = (a X i-1 + c) mod m für i 1. Für die Implementierung von Quicksort scheint es am naheliegendsten, einen linearen Kongruenzgenerator zu verwenden mit m = Θ(n), wobei n gleich der Anzahl der zu sortierenden Elemente ist, und mit a und c so gewählt, dass die Periode des linearen Kongruenzgenerators so dicht wie möglich an m liegt. Periode meint in diesem Fall die Anzahl der vom Generator erzeugten Pseudozufallszahlen, bevor sich die Zahlenfolge wiederholt. Überraschenderweise haben Karloff und Raghavan bewiesen, dass Quicksort mit einem solchen linearen Kongruenzgenerator eine quadratische erwartete Laufzeit hat. 3. Annahmen für die Implementierung von Quicksort Um die spätere Analyse zu erleichtern, werden folgende Annahmen zur Implementierung von Quicksort getroffen: 3

(Q1) (Q2) (Q3) Sind zwei rekursive Teilprobleme zu lösen, so wird immer das kleinere Teilproblem zuerst gelöst. Die Sortierprozedur ist stabil, d.h. die Reihenfolge der Elemente in einer Hälfte ist nach der Umordnung, die durch das Pivotelement induziert wird, dieselbe wie vorher (siehe Abbildung 1). Für jedes Teilproblem der Größe mindestens eins wird die Sortierprozedur rekursiv aufgerufen, d.h. für ein Teilproblem der Größe L werden genau L Pseudozufallszahlen benötigt. Abbildung 1: Beispiel einer Umordnung durch eine stabile (links) und eine instabile (rechts) Sortierprozedur. Q1 ist eine beliebte Heuristik, um den Stack zu minimieren, während Q2 und Q3 die Analyse vereinfachen. Obwohl die üblichen in-place Partitionierungsprozeduren nicht stabil sind wie in Q2 gefordert, ist es doch eine wünschenswerte Eigenschaft, auch wenn dabei mehr Vertauschungen notwendig sind. Die Annahme Q3 ist nicht ganz realistisch, da ein Array der Größe eins nicht sortiert werden muss. Eine Implementierung von Quicksort in Pseudo-Code bei Einhaltung der Annahmen Q1 Q3 ist wie folgt: procedure Quicksort (var A : array [0.. n-1]) begin if [0.. n-1] nicht leer then i nächste Pseudozufallszahl aus dem Bereich [0.. n-1] Wähle das Element p := A[i] als Pivotelement. Ordne das Array A unter Beibehaltung der bisherigen Ordnung so um, dass alle Elemente, die kleiner (größer) als das Pivotelement p sind, links (rechts) von p angeordnet sind. Sei j der Index von p in A nach der Umordnung. if [0.. j-1] kleiner als [j+1.. n-1] then Quicksort (A [0.. j-1]) 4

end end else end Quicksort (A [j+1.. n-1]) Quicksort (A [j+1.. n-1]) Quicksort (A [0.. j-1]) 4. Annahmen für den linearen Kongruenzgenerator Der lineare Kongruenzgenerator erfülle folgende Eigenschaften (wobei a, c und m die Parameter seien wie zuvor in der Definition festgelegt und n sei die Anzahl der zu sortierenden Elemente): (L1) m > n. (L2) ggt (a, m) = 1. (L3) c = 0. (L4) min {t > 0 a t 1 (mod m)} > n/4. Durch diese Annahmen wird erreicht, dass die Periode des Generators gleich (n) ist. Dies ist nötig, da nach Annahme Q3 genau n Pseudozufallszahlen erforderlich sind. Deswegen sei auch m > n, da die Periode höchstens die Länge m haben kann. Laut Knuth ist dies nur der Fall, wenn ggt (a, m) = ggt (c, m) = 1 gilt. Zur Vereinfachung der Analyse sei c = 0, so dass für eine maximale Periode nach wie vor ggt (a, m) = 1 berücksichtigt werden muss. Karloff und Raghavan zufolge verläuft die Analyse für ggt (c, m) = 1 ähnlich. Annahme L4 sagt aus, dass die Periode des Generators eine angemessen große Länge besitzt. Das Minimum t kann als die Periode interpretiert werden, falls der Startwert X 0 gleich 1 ist. Für jeden anderen Startwert X 0 mit ggt (X 0, m) = 1ergibt sich dieselbe Periode, denn die Folge der Pseudozufallszahlen ist dann X 0, ax 0 mod m, a 2 X 0 mod m, a 3 X 0 mod m,..., a t-1 X 0 mod m, a t X 0 mod m = X 0, und existierten zwei verschiedene Folgeglieder mit a i X 0 a j X 0 (mod m) für 0 i < j < t, so würde das implizieren, dass a i (a j-i 1) X 0 0 (mod m), woraus wiederum folgen würde, dass a j-i 1 (mod m) (da ggt (X 0, m) = ggt (a, m) = 1), was jedoch der Minimalität von t widerspräche. Die Annahmen L1 L4 sind durchaus zugleich erfüllbar. Sei m eine Primzahl, die größer als n ist (L1). In diesem Fall erreichen ö (m-1) Werte von a eine Periode von m-1 für alle m-1 Startwerte X 0 0, wobei ö die Eulersche Funktion ist. Die Anzahl von geeigneten Werten für 5

a ist somit groß genug, so dass bei einer zufälligen Wahl von a die Chancen für die Erfüllung der Annahmen gut stehen. 5. Verwendung von Pseudozufallszahlen in Quicksort Eine Methode, damit Pseudozufallszahlen aus Z m Verwendung finden können in Quicksort bei der Wahl eines beliebigen Pivotelements für ein Teilproblem, dass nur L Werte enthält, lautet wie folgt: (H1) Sei hash (y, L) = L * y/m, wobei y eine Pseudozufallszahl aus Z m ist. Dann ist hash (y, L) eine Pseudozufallszahl aus Z L (für L m). Dies ist die von Knuth vorgeschlagene Methode, um Pseudozufallszahlen aus Z m in Pseudozufallszahlen aus Z L umzuformen. 6. Theorem von Karloff und Raghavan Für eine Implementierung von Quicksort, die einen linearen Kongruenzgenerator verwendet, der Q1 Q3, L1 L4 und H1 genügt, gibt es eine Eingabepermutation, die eine erwartete Laufzeit von Ù (n 4 /m 2 + n log n) hat (gemittelt über alle Startwerte X 0 ). 6.1. Folgerungen Für m = O (n) ist die erwartete Laufzeit Ù (n 2 ), was der schlechtesten Laufzeit von Quicksort entspricht. (Im besten Fall hat Quicksort die Laufzeit Ù (n log n).) 6.2. Beweisidee Es ist leicht, eine Eingabe zu finden, so dass es einen Startwert X 0 gibt derart, dass Quicksort eine erwartete Laufzeit von Ù (n 2 ) hat. Die Eingabewerte seien so angeordnet, dass die durch den Startwert X 0 festgelegte Folge von Pivotelementen sortiert ist (siehe Abbildung 2). Dies würde jedoch nur zu einer erwarteten Laufzeit Ù (n 2 /m + n log n) führen, weil über alle Startwerte X 0 gemittelt wird. Der folgende Beweis wird jedoch zeigen, dass es eine Eingabe gibt, für die n 2 /16m Startwerte jeweils ein gleiches Teilproblem der Größe n/4 erzeugen und zwar genau dann, wenn der lineare Kongruenzgenerator den 6

Abbildung 2: Sortierte Folge von Pivotelementen führt zu einer erwarteten Laufzeit Ù (n 2 ) von Quicksort (worst case). Wert 1 ausgeben wird. Aufgrund der beschriebenen Struktur hat dieses Teilproblem dann die Laufzeit Ù (n 2 ) mit der unteren Schranke (n 2 /16m * Ù (n 2 ) + (m - n 2 /16m) * Ù (n log n)) / m = Ù (n 4 /m 2 + n log n), unter Einbeziehung von L1 und der Tatsache, dass Ù (n log n) die bestmögliche Laufzeit für Quicksort für eine beliebige Folge von Pivotelementen ist. 6.3. Beweis Es wird zwischen zwei Fällen bezüglich m unterschieden: 1. Fall: m > n 2 / 32. Dann gilt: n 4 / m 2 = O (1) und die beste Laufzeit, die Quicksort für eine beliebige Menge von Pivotelementen erzielen kann, ist Ù (n log n) = Ù (n 4 / m 2 + n log n). 2. Fall: m n 2 / 32. Sei A [0.. n-1] das Eingabefeld für Quicksort. A sei als Permutation von {0, 1,..., n-1} konstruiert, für die n 2 / 16m verschiedene Startwerte X 0 in einer Laufzeit Ù (n 2 ) resultieren. Sei x so gewählt, dass gelte: a [n/4] x 1 (mod m). x existiert, da gemäß L2 ggt (a, m) = 1 gilt, was zusichert, dass a und somit auch jede Potenz von a invertierbar modulo m ist. Darüber hinaus ist zu erwähnen, dass x auch invertierbar modulo m ist (mit der Inverse gleich a [n/4] ), so dass ggt (x, m) = 1 gilt. Sei y i = a i x mod m für alle 0 i n/4. Die y i sind paarweise verschieden, denn ggt ( x, m) = 1 und folglich gilt die Analyse aus Abschnitt 4. Sei k = n 2 / (8m) - 1. Sei K = {hash (y 0, n), hash (y 1, n),..., hash (y n/4, n)} \ {0}. K kann kleiner als n/4 sein, da verschiedene Werte von y i durch die Funktion hash auf denselben Wert abgebildet werden können. Durch die Funktion hash ist aber garantiert, dass höchstens 7

m/n verschiedene Werte aus Z m auf denselben Wert in Z n abgebildet werden. Daher gilt also K ( n/4-1) / ( m/n ) 1 > (n / 4) / (m + n)/n 1 = n 2 / (4(m + n)) 1 n 2 / 8m 1 k. Also gibt es k Werte y i1, y i2,..., y ik {y 0, y 1,..., y n/4-1 }, für die die Werte hash (y i, n) paarweise verschieden und ungleich null sind. Die Eingabefolge A werde wie folgt konstruiert: 1. Sei A [hash (y ij, n)] = n ( n/4 - i j ) für 1 j k. 2. Sei ó eine Permutation von {0, 1,..., n/4-1}, für die Quicksort die Laufzeit Ù (n 2 ) hat, wenn die Folge der Pseudozufallszahlen a, a 2 mod m, a 3 mod m,... a n/4 mod m ist. Sei A [0] = n/4. Die Werte ó(0), ó(1),, ó( n/4-1) werden in der Reihenfolge den n/4 kleinsten verfügbaren Zellen von A zugeordnet. Alle Werte in dem Array sind verschieden, da die Werte in 1. sind größer oder gleich 3n/4 und die Werte in 2. sind kleiner oder gleich n/4. Zudem sind alle Werte im Array A in verschiedenen Zellen gespeichert. Bisher sind höchstens k + n/4 + 1 n/8 + n/4 Zellen des Array belegt. Die übrigen Werte werden beliebig zu einer Permutation von {0, 1,..., n 1} ergänzt. (Dieser Nichtdeterminismus impliziert, dass Quicksort nicht nur für eine Eingabe, sondern für 5n/8! verschiedene Eingaben diese schlechte erwartete Laufzeit hat.) Was passiert also, wenn X 0 = y ij für ein beliebiges j mit 1 j k. Quicksort sortiert dann A zunächst nach A [hash (y ij, n)] = n ( n/4 - i j ) um, wobei eine Pseudozufallszahl verbraucht wird. Dieser Wert ist größer oder gleich 3n/4, d.h. das kleinere Teilproblem ist die Sortierung der Werte größer als n ( n/4 - i j ). Q1 fordert, das kleinere Teilproblem zuerst zu lösen und Q3 legt fest, dass dabei genau so viele Pseudozufallszahlen verbraucht werden wie Elemente vorhanden sind also (n 1) (n ( n/4 - i j )) = -1 + n/4 - i j. Als nächstes wird der lineare Kongruenzgenerator die Pseudozufallszahl X n/4 - ij = y ij a n/4 - ij mod m = a ij xa n/4 - ij mod m = a n/4 x mod m = 1. erzeugen. Sei L = n ( n/4 - i j ) die Größe des verbleibenden Teilproblems. Quicksort ordnet dann nach dem Pivotelement A [hash (X n/4 - ij, L)] = A [hash (1, L)] 8

= A [ L/m ] (H1) = A [0] (L1) um. Laut Q2 hat sich der Inhalt von A [0] = n/4 seit Beginn der Quicksortprozedur nicht verändert. Nach der Umordnung, die durch dieses Pivotelement induziert wird, gilt A [ n/4 ] = n/4 und A [i] = ó(i) für 0 i < n/4 (Q2). Das kleinere Teilproblem wird als nächstes sortiert (Q1) mit einer Laufzeit von Ù (n 2 ) wegen der Konstruktion von ó, da die folgenden Pseudozufallszahlen a, a 2 mod m, a 3 mod m,..., a n/4 mod m sein werden. Für jeden der k = n 2 /(8m) - 1 Startwerte y i erfordert Quicksort eine Laufzeit von Ù (n 2 ). Daher folgt mit der Annahme des 2. Falles m n 2 /32 -, dass k n 2 /(16m). Bildet man den Durchschnitt aller m Startwerte, erhält man eine untere Schranke für die erwartete Laufzeit Ù (n 4 /m 2 + n log n). 9

7. Quellen Martin Tompa: Lecture Notes on Probabilistic Algorithms and Pseudorandom Generators, Technical Report #91-07-05, 1991 10