Wir kommen auf unsere Gadget-Metapher zurück. Zum Sortieren verwenden wir ein
Minmax-Gate, dass zwei Inputs und zwei Outputs hat:
Aus diesem Minmax-Gate wollen wir einen Schaltkreis bauen, der Sortieren kann.
Das nennt man in diesem Zusammenhang ein Sortiernetzwerk.
Wir folgen der Idee von Mergesort: wir zerlegen die Eingabeliste
in zwei Teile, die wir rekursiv sortieren; dann rufen wir eine Prozedur
merge auf, die die zwei sortierten Teillisten und zu einer
großen sortierten Liste zusammenfügt.
Sequentiell ist die Prozedur merge einfach zu implementieren und
tätigt im Worst-Case Vergleiche. Parallel ist das
schon schwieriger. In diesem Teilkapitel beschreiben wir Batchers Odd-Even Merging
Network
und das mergesort-artige Sortiernetzwerk, das man daraus erhält.
Ein Netzwerk für Merge
Wir haben als Input zwei Listen gegeben: und .
Beide sind bereits sortiert. Wir wollen nun eine sortierte version der Vereinigung, also
von berechnen. Sequentiell kennen Sie das als
die Subroutine merge von MergeSort, zum Beispiel
aus Kapitel 2.3 von TI-1. Um es
parallel
berechnen zu können, zerlegen wir das Array in die ungeraden und die geraden Indizes:
wobei wir davon ausgehen, dass gerade ist. Das dient zum Großteil dazu, die Notation zu
vereinfachen.
Nach gleichem Schema zerlegen wir :
Nun führen wir rekursiv einen Merge auf durch, ebenso
auf .
Wir erhalten also
Jetzt müssen wir uns noch parallel aus und den Merge der Gesamtliste
zusammenbasteln - und zwar parallel. Wir können zum Beispiel bereits
mit Sicherheit sagen, dass das kleinste dieser Liste ist. Danach wird es schon
schwieriger.
Definition 3.1.1(Rang). Sei
die Menge der Elemente in der Gesamtliste (wir gehen davon aus, dass
kein Element doppelt vorkommt, um den Mengenbegriff bequem verwenden zu können).
Der Rang eines Elements in ist die Anzahl der Elemente mit , also:
So hat das Minimum von zum Beispiel Rang und das Maximum Rang .
Wir fragen uns nun: was ist der Rang von , also einem Element, das in
auf einer ungeraden Position stand oder in . Das können wir nicht
sicher sagen, zum Beispiel kann Rang 2 haben, aber auch Rang 3, wenn zum Beispiel
gilt. Kann es Rang 4 haben? Das nächste Lemma beantwortet diese Frage:
Lemma 3.1.2.
Beweis.
Das Element ist in enthalten.
Dort gibt es genau Elemente, die sind.
Schauen wir uns an, wo in und liegt. Seien und die größten
ungeraden
Indizes mit und . Dann gilt
Die Mengen und enthalten zusammen mindestens Elemente, die
sind,
und somit gilt .
Davon gehören zu und zu , und somit
gilt .
Zusammen schließen wir, dass .
Folgende Elemente sind echt größer als :
Das sind insgesamt Elemente, die größer sind als .
Betrachten wir noch und . Eines davon ist selbst,
und somit ist eines von echt größer als . Es gibt also mindestens
Elemente, die echt größer sind als , und somit ist
.
Lemma 3.1.3.
Übungsaufgabe 3.1.1
Beweisen Sie das obige Lemma.
Für ergibt das erste Lemma und somit , da
ein Rang von 0 unmöglich ist. Analog erhalten wir .
Für wenden nun die beiden Lemmas auf und an und sehen, dass
gilt. Wir müssen also nur noch und vergleichen und können bestimmen,
welche Elemente und in der endgültigen sortierten Liste
sind. Im Überblick erhalten wir folgende rekursive Konstruktion
für merge:
Beobachtung 3.1.4 Das oben beschriebene Merge-Netzwerk hat
minmax-Gates und Tiefe .
Ein Sortiernetzwerk auf Merge-Netzwerken
Um nun ein Array der Länge zu sortieren, gehen wir wieder rekursiv
vor.
Wir nehmen an, dass gerade ist, und teilen das Array in zwei Hälften
und . Wir sortieren rekursiv und
wenden dann merge auf die Ergebnisliste an.
Theorem 3.1.5 Das gerade beschriebene Sortiernetzwerk hat
Tiefe und viele Gates.