Parallele Algorithmen

Ähnliche Dokumente
Christoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers. Wissenschaftl. Arbeitstechniken und Präsentation

JAVA - Suchen - Sortieren

7. Parallele Algorithmen für FPGA-Implementierungen

Algorithmen und Datenstrukturen 1

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Programmierung Paralleler Prozesse

Komplexität von Algorithmen:

Grundlagen der Programmierung 2. Sortierverfahren

6. Parallele Algorithmen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

Sortierverfahren für Felder (Listen)

Abschnitt: Algorithmendesign und Laufzeitanalyse

Mathematik AG. Geschickt gesucht ist halb gefunden: Suchen und Sortieren mit Mathe

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer

Suchen und Sortieren

Algorithmen in Zellularautomaten

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

7. Sortieren Lernziele. 7. Sortieren

Bucketsort. Korrektheit. Beispiel. Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt.

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

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Übung: Algorithmen und Datenstrukturen SS 2007

Programmieren I. Kapitel 7. Sortieren und Suchen

Übung Algorithmen I

Algorithmentheorie Randomisierung. Robert Elsässer

Paralleler Programmentwurf nach Foster

Grundlagen der Programmierung

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

Datenstrukturen und Algorithmen

2. Entsprechende Listen P i von Vorgängern von i 3. for i := 1 to n do. (ii) S i = Knoten 2 + 1}

Klausur Paralleles Rechnen (Richtwert 60 min) 10. Dez. 2015

Kapitel 6 Elementare Sortieralgorithmen

Algorithmen in Zellularautomaten

Wahlalgorithmen auf beliebigen Netzstrukturen. Verteilte Algorithmen (VA), WS 2003/04 43

Effiziente Algorithmen

2. Effizienz von Algorithmen

37 Gauß-Algorithmus und lineare Gleichungssysteme

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp

Algorithmen und Datenstrukturen SS09. Foliensatz 15. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Lineare Kongruenzgeneratoren und Quicksort

Übung Algorithmen und Datenstrukturen

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen Heapsort

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

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Grundlegende Sortieralgorithmen

Sortiernetzwerke. Patrick Bäuerle. Sommersemester Hochschule Aalen Betreuender Professor: Prof. Dr. Thierauf

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

4. Sortieren 4.1 Vorbemerkungen

Prof. Dr. Margarita Esponda

Algorithmen und Datenstrukturen 1-3. Seminar -

A+D: Bitonisches Sortieren

Algorithmen und Datenstrukturen

Parallele Algorithmen in der Bildverarbeitung

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)

Suchen und Sortieren

IR Seminar SoSe 2012 Martin Leinberger

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

Tutoraufgabe 1 (Sortieralgorithmus):

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Folge 13 - Quicksort

Ü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:

Suchen und Sortieren (Die klassischen Algorithmen)

Einführung (1/3) Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (1) Vorlesungen zur Komplexitätstheorie.

Kapitel 8 Fortgeschrittene Sortieralgorithmen

1 Matrizenrechnung zweiter Teil

Polygontriangulierung

Kochrezept für NP-Vollständigkeitsbeweise

Algorithmen II Vorlesung am

Wir unterscheiden folgende drei Schritte im Design paralleler Algorithmen:

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Randomisierte Algorithmen 2. Erste Beispiele

Lösungsvorschläge Blatt 4

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Grundlagen der Informatik

bekannt: Eliminationsverfahren von Gauß Verfahren führt zu einer Zerlegung der Koeffizientenmatrix: A = LR A = LR

LR Zerlegung. Michael Sagraloff

16.3 Rekurrente und transiente Zustände

Grundlagen: Algorithmen und Datenstrukturen

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

Isomorphismus. Definition Gruppen-Isomorphismus. Seien (G, +) und (G, ) Gruppen. Die Abbildung f : G G heißt Gruppen-Isomorphismus, falls gilt

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer

Transkript:

Parallele Algorithmen bereits behandelt: paralleles Sortieren mit Ranksort parallele Matrixmultiplikation nach Gentleman numerisches Iterationsverfahren nach Jacobi Matrixmultiplikation im Hypercube (DNS-Verfahren) Paralleles Sortieren Bitonisches Mischsortieren Hyper-Quicksort PSRS-Verfahren (Parallel Sorting by Regular Sampling) Dynamische Aufgabenverwaltung Terminationserkennung in verteilten Systemen

k=1 Aufbau von Hypercubes k=2 k=3 1 01 11 101 111 001 011 0 00 10 100 110 k=4 0101 0111 1101 1111 000 010 0001 0000 0100 0011 0010 0110 1001 1000 1100 1011 1010 1110 allgemein: Hypercube der Dimension k mit 2 k Knoten und Verbindungsgrad k Ein Hypercube der Dim. k erlaubt Broadcast- und Reduktionsop. in k Schritten. 154

Matrixmultiplikation im Hypercube [Dekel, Nassimi, Sahni -SIAM Journal on Computing 1981] Grundidee: Führe alle n³ Multiplikationen in einem parallelen Schritt durch. Algorithmus: Gegeben Matrizen (a ij ), (b ij ) mit 0 < i, j < n-1. Sei n = 2 q. Identifikation der Prozesse im Hypercube der Dimension 3q durch id = (b 3q-1... b 0 ) 2 Prozess P(id) habe lokale Variablen a, b, c. Der Algorithmus hat 3 Phasen: Laden und Verteilen der Matrixelemente im Hypercube parallele Multiplikation in allen PE s Akkumulation und Summation der Produkte 155

Phase I: Broadcast der Eingabematrizen Laden der n²= 2 2q Matrixelemente in Teilhypercube der Dim. 2q: a ij, b ij -> P(2 q ij) Form der Pid: 0... 0 i j q Bits q Bits q Bits Broadcast der Elemente in 2 q -1 = n-1 weitere Teilhypercubes der Dimension 2 2q : a ij, b ij -> P(2 2q k2 q ij) für alle 1 < k < n-1 Umspeicherung der Matrixelemente, so dass in jedem Prozess genau ein Produkt berechnet werden kann: a il -> P(2 2q l2 q ij) für 0 < j< n-1, b lj -> P(2 2q l2 q ij) für 0 < i < n-1 Broadcast von a il [aus P(2 2q l2 q il)] in Dimensionen 0.. q-1 Broadcast von b lj [aus P(2 2q l2 q lj)] in Dimensionen q.. 2q-1 in Phase III: umgekehrter Broadcast in oberen q Dimensionsverbindungen 156

Beispiel: ( a 00 a 01 ) ( b 00 b 01 ) =( a 00 b 00 a 01 b a 10 00 b 01 a 01 b ) * 11 a 10 a 11 b 10 b a 11 10 b 00 a 11 b 10 a 10 b 01 a 11 b 11 a 010 10 011 a 11 b 10 b 11 110 111 a 10 b 10 a 11 b 11 a 10 b 10 a 11 b 11 a 00 b 00 a 01 b 01 100 a 101 00 a 01 b 00 b 000 001 01 a 10 b 00 a 00 b 00 a 10 b 10 a 10 *b 00 a 01 b 01 a 10 *b 01 a11 b 10 a 11 b 11 a 11 *b 10 a 11 *b 11 a 01 b 10 a 01 b 11 a 01 *b 10 a 01 *b 11 a 00 b 00 a00 b 01 a 00 *b 00 a 00 *b 01 157

Paralleles Sortieren RankSort: O(n²) Vergleiche auf n Prozessoren => O(n) parallele Schritte (ohne Kommunikation) paralleles BubbleSort: Odd-Even-Transposition-Sort n/2 Iterationen a0 a1 a2 a3 a4 a5......... an-2 an-1 even-odd-exchange odd-even-exchange => O(n) parallele Schritte (inkl. Kommunikation) Mischsortieren (seq. Aufwand O(n log n), par. Aufwand: O(n)) a0 a1 a2 a3 a4 a5......... an-2 an-1 M M M M M M M M...... 158

Bitonisches Mischsortieren (Batcher 1968) paralleles Sortierverfahren mit Komplexität O(log 2 n) Unsortierte Folge ganzer Zahlen Bitonische Folge Sortierte Folge Transformation in bitonische Folge Sortieren bitonischer Folge 159

Bitonische Folgen Eine Folge ganzer Zahlen a 0,..., a n-1 heißt bitonisch, falls (1) ein Index i existiert, so daß a 0 <=... <= a i-1 <= a i >= a i1 >=... >= a n-1 oder (2) Bedingung (1) durch eine zyklische Verschiebung der Folgenindizes erfüllt werden kann. 160

Beispielfolgen 3, 5, 7, 8, 6, 4, 2, 1 7, 8, 5, 3, 1, 2, 4, 6 161

Zerlegen bitonischer Folgen Lemma: Seien n=2 k mit k>0 und (a 0,..., a n-1 ) eine bitonische Folge mit a 0 <= a 1 <= a 2 <=... <= a n/2 und a n/2 >= a n/21 >=... >= a n-1 Dann sind die Folgen min(a 0, a n/2 ), min(a 1, a n/21 )... min(a n/2-1, a n-1 ) und max(a 0, a n/2 ), max(a 1, a n/21 )... max(a n/2-1, a n-1 ) bitonisch und jedes Element der Minimumfolge ist kleiner oder gleich zu jedem Element der Maximumfolge. Bem: Diese Aussage gilt für beliebige bitonische Listen, wird aber in der Vorlesung zur Vereinfachung nur für obigen Spezialfall formal bewiesen. 162

Zerlegen bitonischer Folgen (allg. Fall) Zerlege eine bitonische Folge der Länge n in zwei bitonische Folgen der Länge n/2 163

Bitonischer Sortierer a 0 a 1 a n/2-2 a n/2-1 a n/2 a n/21 a n-2 a n-1 Sortierer für n/2 Elemente Sortierer für n/2 Elemente 164

Bitonischer Sortierer für f r 8 Elemente (rekursiver Aufbau) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 165

Bitonischer Sortierer für f r 8 Elemente a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 166

Satz von Batcher (1968) Eine unsortierte Liste mit n=2 k Elementen kann mit einem Netzwerk aus insgesamt 2 k-2 *k*(k1) Komparatoren in der Zeit O((log n)²) = O(k²) sortiert werden. Beweisidee: unsortierte Liste der Länge n = n sortierte Listen der Länge 1 = n/2 bitonische Listen der Länge 2 allgemein: aufsteigend sortierte Liste der Länge 2 m absteigend sortierte Liste der Länge 2 m = bitonische Liste der Länge 2 m1 => sortierbar mit (m1)-stufigem Netzwerk mit 2 m Komparatoren je Stufe 167

a 0 a 1 Batchers Sortiernetzwerk (für r 8 Elemente) a 2 a 3 - a 4 a 5 - - a 6 a 7 - - - STUFE 1 STUFE 2 STUFE 3 168

Kommunikationsmuster Minimum: b1=b0 b2=b1 b2=b0 b3=0=b2 000 001 b3=0=b1 b3=0=b0 010 011 100 101 110 111 invertiertes Bit b0 b1 b0 b2 b1 b0 169

Auszug aus parallelem Programm... op int chan [0:n-1, 0:k-1] process p [myid=0 to n-1] { int my_element, partner_element my_element = a[myid] for [i=1 to k] { (* k Stufen des Sortieralgorithmus *) for [j=i-1 downto 0] { (* Sortieren bitonischer Listen der Länge 2 i *)... (* Bestimme Kommunikationspartner durch Invertieren des j-ten Bits von myid*) send chan[myid,j](my_element) receive chan[partner_id,j](partner_element) if (bit(i,myid) == bit(j,myid)) { my_element = min(my_element,partner_element) } else { my_element = max(my_element,partner_element) } } } } 170

Sortiernetzwerk von Stone a 0 a 1 = a 2 a 3 - = - a 4 a 5 = - a 6 a 7 - = - - STUFE 1 STUFE 2 STUFE 3 171

Sortiermaschine nach Stone 172

Hyper-Quicksort Initialisierung: Eine Liste von n Werten wird gleichmäßig auf die 2 k Knoten einer Hypercube-Struktur verteilt. => Jeder Knoten erhält n/2 k Listenelemente. Ziele: 1. Die Teilliste auf jedem Prozessorknoten ist sortiert. 2. Alle Elemente auf P i sind kleiner oder gleich zu allen Elementen auf P i1 (0 <= i <= p-2 = 2 k -2). Eine gleichmäßige Verteilung der Listenelemente wird nicht gefordert. 1. Schritt: Jeder Knoten sortiert die ihm zugeordnete Teilliste mit einem optimalen sequentiellen Sortierverfahren. => Ziel 1 ist erfüllt. 173

Rekursive divide-et et-impera-schritte Teilhypercubes der Dimension d werden in 2 Teilhypercubes der Dimension d-1 geteilt. Jeder Knoten in einem Teilhypercube sendet Werte zu seinem direkten Nachbarn im anderen Teilhypercube. Ziel ist es, in einem Teilhypercube die kleineren Werte und im anderen die größeren Werte bzgl eines Pivotelementes zu sammeln. Das Pivotelement wird etwa als mittleres Element eines ausgezeichneten Knotens gewählt, der dieses Element an ale übrigen Knoten eines Teilhypercubes per Broadcast verschickt. Jeder Knoten führt split-und-merge-schritte durch: split teilt gemäß Pivotelement aus und verschickt eine Hälfte an Partner merge mischt verbleibende Hälfte mit den vom Partner erhaltenen Werten Nach k split-und-merge-schritten ist auch Ziel 2 erreicht. 174

Beispiel: n=32, k=2 P 00 P 01 P 10 P 11 P 00 : 97 48 16 8 66 96 17 49 P 01 : 58 76 54 39 82 47 65 51 P 10 : 11 50 53 95 36 67 86 44 P 11 : 35 16 81 1 44 23 15 5 1. Schritt: lokales sequentielles Sortieren P 00 : 8 16 17 48 49 66 96 97 P 01 : 39 47 51 54 58 65 76 82 P 10 : 11 36 44 50 53 67 86 95 P 11 : 1 5 15 16 23 35 44 81 2. Schritt: P 00 sendet mittleren Wert 48 an alle übrigen Prozesse. Aufteilung in Teilhypercubes: P 00 P 01 P 10 P 11 175

1. Split-und und-merge-schritt P 00 P 01 Datenaustausch zwischen Teilhypercubes (Split): P 10 P 11 P 00 : 8 16 17 48 49 66 96 97 P 01 : 39 47 51 54 58 65 76 82 P 10 : 11 36 44 50 53 67 86 95 P 11 : 1 5 15 16 23 35 44 81 Mischen von Teillisten (Merge): P 00 : 8 11 16 17 36 44 48 P 01 : 1 5 15 16 23 35 39 44 47 P 10 : 49 50 53 66 67 86 95 96 97 P 11 : 51 54 58 65 76 81 82 176

2. Split-und und-merge-schritt P 00 P 01 Datenaustausch zwischen Teilhypercubes (split) P 00 : 8 11 16 17 36 44 48 P 10 P 11 P 01 : 1 5 15 16 23 35 39 44 47 P 10 : 49 50 53 66 67 86 95 96 97 P 11 : 51 54 58 65 76 81 82 Mischen der Teillisten (merge): P 00 : 1 5 8 11 15 16 16 17 P 01 : 23 35 36 39 44 44 47 48 P 10 : 49 50 51 53 54 58 65 66 67 P 11 : 76 81 82 86 95 96 97 => Ziel 2 wurde ebenfalls erreicht. 177

Analyse Rechenaufwand: 1. Schritt: optimales sequentielles Sortierverfahren: O(n/2 k log (n/2 k )) = O(n/2 k (log n k)) 2. (k1).schritt: Aufteilung in Teilhypercubes der Dimensionen k => k-1 => k-2 =>... => 1 => 0 im besten Fall der gleichmäßigen Aufteilung: O(n/2 k k) parallele Vergleichsschritte => insgesamt O(n/2 k log n) parallele Vergleichsschritte Kommunikationsaufwand Broadcast von Pivotelementen: i Komm. in i-ter Iteration Elementaustausch, im besten Fall: n/2 k1 pro Iteration: O(in/2 k1 ) bei k Iterationen => insgesamt O(n log p/p) pro Knoten 178

Nachteile von Hyper-Quicksort hoher Kommunikationsaufwand Elemente wandern über mehrere Zwischenknoten zur Zielposition kritische Pivotwahl schlechte Lastbalancierung bei ungünstigem Pivotelement 179

Der PSRS-Algorithmus (Li et al. 92) (Parallel Sorting by Regular Sampling) Merkmale: bessere Pivotauswahl Elemente werden höchstens einmal kommuniziert. 4 Phasen: 1. sequentielles Quicksort auf Teilsegmenten der zu sortierenden Liste => Auswahl von p Elementen (Probe) 2. Ein Prozessor sammelt alle p² Probenelemente (je p Elemente von p Prozessoren) und sortiert diese. => Auswahl von p-1 Pivotelementen und Broadcast von diesen an alle Prozesse 3. Jeder Prozess teilt seine Teilliste in p Teillisten gemäß der Pivotelemente und verschickt die j-te Partition an Prozess j für 1<= j <= p. 4. Jeder Prozess mischt die ihm geschickten p Partitionen zu einer sortierten Teilliste. 180

Phase I: sequentielles Sortieren Jeder Prozess erhält bis zu n/p Elemente der Gesamtliste und sortiert mit sequentiellem Quicksort. => p sortierte Teillisten mit bis zu n/p Elementen Auswahl von p Elementen an den Positionen 1, n/p² 1, 2 n/p² 1, 3 n/p² 1,..., (p-1) n/p² 1 => reguläre Probe aus sortierter Teilliste Beispiel: p=3, n=27 => n/p = 9, n/p² = 3 => Probepositionen: 1 4 7 P1: 15 46 48 93 39 6 72 91 14 P2: 36 69 40 89 61 97 12 21 54 P3: 53 97 84 58 32 27 33 72 20 PHASE 1 P1: 6 14 15 39 46 48 72 91 93 P2: 12 21 36 40 54 61 69 89 97 P3: 20 27 32 33 53 58 72 84 97 181

Phase II: Auswahl von p-1 p Pivotelementen Ein Prozess sammelt alle Proben aus jeweils p Elementen und sortiert diese. => sortierte Teilliste mit p² Elementen Auswahl von p-1 Pivotelementen aus dieser Listenprobe an den Stellen p p/2, 2p p/2,..., (p-1)p p/2 Broadcast dieser Pivotelemente an alle Prozesse Beispiel (Forts.) p p/2 = 31 = 4 => Positionen Pivotelemente: 4 7 Probenelemente: 6 39 72 12 40 69 20 33 72 PHASE II sortierte Probe: 6 12 20 33 39 40 69 72 72 2 Pivotelemente 182

Phase III: Partitionen kommunizieren Jeder Prozess teilt seine Teilliste mit bis zu n/p Elementen in p Partitionen gemäß der Pivotelemente auf. Prozess i behält Partition i und verschickt die p-1 Partitionen j mit j <> i an Prozess j. Beispiel (Forts.): Pivotelemente: 33 und 69 P1: 6 14 15 39 46 48 72 91 93 P2: 12 21 36 40 54 61 69 89 97 P3: 20 27 32 33 53 58 72 84 97 PHASE III P1: 6 14 15 P2: 39 46 48 P3: 72 91 93 12 21 36 40 54 61 69 89 97 20 27 32 33 53 58 72 84 97 183

Phase IV: Partitionen mischen Jeder Prozess mischt die ihm zugewiesenen p Partitionen zu einer sortierten Gesamtliste. Die Konkatenation aller p sortierten Teillisten ergibt die sortierte Gesamtliste Beispiel (Forts.): P1: 6 14 15 P2: 39 46 48 P3: 72 91 93 12 21 36 40 54 61 69 89 97 20 27 32 33 53 58 72 84 97 PHASE IV P1: 6 12 14 15 20 21 27 32 33 P2: 36 39 40 46 48 53 54 58 61 69 P3: 72 72 84 89 91 93 97 97 184

Analyse vereinfachende Annahmen: p Prozesse p geradzahlig n=p²k paarweise verschiedene Elemente mit k>1 Berechnungsaufwand: Phase I: paralleles sequentielles Sortieren von Teillisten der Länge n/p => Aufwand: O(n/p log n/p) = O(n/p (log n - log p) ) Phase II: Sortieren der Listenprobe mit p² Elementen => Aufwand: O(p² log p²) = O(p² log p) Phase III: Aufteilen der Partitionen => Aufwand: O(n/p) Phase IV: Mischen von p sortieren Teillisten, Aufwand: O(n/p log p) => Gesamtkomplexität: O(n/p log n p² log p) Falls n >= p³ dominiert der erste Term: O(n log n / p) 185

Zum Aufwand von Phase IV Satz: Jeder Prozess hat maximal 2n/p Elemente zu mischen. Mit log p Mischstufen mit je 2n/p Vergleichen ergibt sich damit der oben angenommene Aufwand O(n/p log p). Der obige Satz folgt aus dem folgenden Theorem: Theorem: Bezeichnet ϕ i die Anzahl der Listenelemente, die in Phase IV von Prozess i gemischt werden müssen, so gilt: max ϕ i <= 2n/p n/p² - p 1 1<=i<=p 186