• Keine Ergebnisse gefunden

10.2 Bäume und Eulertouren 77

11.3.5 Algorithmus

11-18 Der Algorithmus – wir setzen jetzt alles zusammen. 11-18

AlgorithmusEvaluate

1. Lies einen arithmetischen Baum als Eingabe, gegeben als Adjazenzliste.

2. Erstelle mittels der Euler-Tour-Technik einen Blätter-Array, in dem die Blätter nach- einander in ihrer Traversierungsreihenfolge im Baum stehen.

3. Wenn der Baum nur noch aus der Wurzel besteht, so steht dort das Ergebnis. Sonst wiederhole:

3.1 Betrachte nur die Blätter mitgerader Nummer.

3.2 Teile diese (konzeptionell) in die Mengen L und R der Blätter auf, die linke Kinderund dierechte Kindersind.

3.3 FühreRakeparallel für alle Elemente vonLaus.

3.4 FühreRakeparallel für alle Elemente vonRaus.

3.5 Streiche (konzeptionell) alle Blätter mit gerader Nummer aus dem Array.

11 Auswerten von arithmetischen Ausdrücken

Zusammenfassung dieses Kapitels 87

11-19 Zur Laufzeit und Korrektheit des Algorithmus 11-19

Satz

Der Algorithmus Evaluate wertet arithmetische Ausdrücke in Zeit O(log n) und Arbeit O(n)aus.

Beweis.

DieLaufzeit istO(log n), da die Vorverarbeitung ZeitO(log n)braucht und die Haupt- schleifelog nmal durchlaufen wird und in der Schleife immer nur ZeitO(1)benötigt wird.

DieArbeit ist O(n), da die VorverarbeitungO(n) Arbeit macht und ein der Haupt- schleife jedes Blatt nur einmal betrachtet wird.

Der Algorithmus ist korrekt,da sichergestellt ist, dass sich je zweiRake-Operationen nicht »in die Quere kommen«.

Zusammenfassung dieses Kapitels

11-20 1. Arithmetische Ausdrücke lassen sich in ZeitO(log n)und ArbeitO(n)auswerten. 11-20

2. Bei nicht ausgeglichenen Bäumen muss man mittels Linearformen »Berechnungen schon mal in der Mitte beginnen«, obwohl nicht alle Daten vorliegen.

Übungen zu diesem Kapitel

Übung 11.1 (Auswertung von monotonen booleschen Formeln, leicht)

Einemonotone boolesche Formel ohne Variablenkann man als Baum auffassen, an dessen Blättern die Konstanten true und falsestehen und dessen innere Knoten mit den Junktoren∧ und∨ beschriftet sind.

Beschreiben Sie, wie ein Algorithmus für die Auswertung solcher Formeln funktioniert, der eine Laufzeit von O(log n) und ArbeitO(n)hat. Der Baum sei wie üblich als Adjazenzliste gegeben.

Der Detailgrad Ihrer Beschreibung des Algorithmus sollte sich am Skript zur Vorlesung über arith- metische Ausdrücke orientieren.

Übung 11.2 (Auswertung von booleschen Formeln, mittel)

Eine allgemeine boolesche Formel ohne Variablen enthält neben den Und- und Oder-Junktoren auch noch Negationsknoten mit nur einem Kind.

Beschreiben Sie, wie Sie Ihren Algorithmus aus der vorherigen Aufgabe erweitern können, so dass er auch mit solchen Formeln umgehen kann (und noch dieselbe Laufzeit und Arbeit aufweist).

Beachten Sie, dass Negationsgatter in langen Ketten auftreten können (es gibt verschiedene Arten, dieses Problem zu lösen).

Übung 11.3 (Auswertung für Addition und Maximum, mittel)

Geben Sie einen Algorithmus an, der einen arithmetischen Ausdruck auf den rationalen Zahlen über den binären Operationen Addition (+) und Maximumsbildung (max) auswertet. Der Ausdruck ist dabei als Binärbaum mit nBlättern gegeben und der Algorithmus soll eine Laufzeit vonO(log n) besitzen.

Tipp: Benutzen Sie statt der Linearformen a·x+bals Kantenbeschriftung Ausdrücke der Form max(a+x,b).

Übung 11.4 (Auswertung von verallgemeinerten Formeln, schwer)

Lösen Sie die vorherige Übungsaufgabe für arithmetische Ausdrücke auf den positiven rationalen Zahlen über den Operationen+,×undmax.

Tipp:Überlegen Sie sich zunächst einen geeigneten Ersatz für die Linearformen.

88 12 Paralleles Sortieren

12-1 12-1

Kapitel 12

Paralleles Sortieren

Wie man in der Gruppe einen Kartenstapel sortiert

12-2 12-2

Lernziele dieses Kapitels

1. Einfachen Merge-Sort kennen

2. Bitonischen Merge-Sort kennen

Inhalte dieses Kapitels

12.1 Einfacher Merge-Sort 89

12.2 Sortiernetze 89

12.2.1 Warum noch ein Algorithmus? . . . 89 12.2.2 Idee des Sortiertnetzes . . . 90 12.2.3 Das 0-1-Prinzip . . . 91

12.3 Bitonischer Merge-Sort 91

12.3.1 Bitonische Folgen . . . 91 12.3.2 Der Halbreiniger . . . 92 12.3.3 Das Sortiernetz . . . 93 Übungen zu diesem Kapitel 94

Worum es heute geht

Worum es heute geht

Zum Abschluss der Thematik »Parallele Algorithmen« soll es um ein Thema gehen, um das kein Informatiker herumkommt: Sortieren. Computer sind ständig mit Sortieren be- schäftigt, sie verbringen einen nicht unerheblichen Prozentsatz ihrer gesamten Rechenzeit (und damit ihres Stromverbrauchs) damit. Deshalb erscheint es geboten, dem Sortierpro- blem mindestens so viel Aufmerksamkeit zu schenken wie dem – im direkten Vergleich schon fast elfenbeinturmhaften – Problem der Auswertung arithmetischer Ausdrücke.

Wir haben bereits einen parallelen Merge-Sort-Algorithmus kennen gelernt. Der Hauptteil dieses Kapitels geht um Sortiernetze, mit deren Hilfe wir Daten zwar nicht schneller sortieren können als mit dem parallelen Merge-Sort-Algorithmus, aber dafür wesentlich einfacher und sehr leicht praktisch umsetzbar. Dies ist ein ganz wesentlicher Aspekt, wenn man Algorithmen tatsächlich implementieren möchte. Sortiernetzwerke lassen sich nicht nur sehr einfach in Algorithmen verwandeln, sie lassen sich sogar elegant in Hardware ätzen. Damit sind sie prädestiniert für den Einsatz in eingebettenen Systemen, bei denen es um Geschwindigkeit geht. Zum Vergleich: Versuchen Sie doch mal, den Schafe-und- Wölfe-Algorithmus in ein fpga zu verwandeln (es erscheint unwahrscheinlich, dass dies in diesem Universum jemals geschehen wird).

Natürlich gibt es einfachere und komplexere Sortiernetzwerke; wir werden nur einfache in diesem Kapitel behandeln. Das Ajtai-Komlós-Szemerédi-Sortiernetzwerke ist (theoretisch) wesentlich flacher als die einfachen in diesem Kapitel vorgestellten: Es hat TiefeO(log n) stattO(log2n). Erkauft wird dies mit einer komplexen Konstruktion und einer in der O- Notation versteckten Konstante, die man in verbesserten Versionen auf unter 6100 drücken konnte. Solche Netzwerke sind also nur dann »flach«, wenn man mehr als102000 Zahlen sortieren möchte, was in der Praxis nur sporadisch vorkommt.

12 Paralleles Sortieren

12.2 Einfacher Merge-Sort 89

12.1 Einfacher Merge-Sort

12-4 Unsere Ziele 12-4

Sei<eine feste Lineare Ordnung auf Objekten.

Problemstellung

Eingabe Liste von Objekten Ausgabe Sortierte Liste der Objekte Bekanntermaßen ist T(n) =O(n log n). Ziele

1. Ein Algorithmus mit ZeitO(log2n)und ArbeitO(n log n)(heute).

2. Ein einfacher Algorithmus mit ZeitO(log2n)und ArbeitO(n log2n)(heute).

3. Ein Algorithmus mit Zeit O(log n)und Arbeit O(n log n) (möglich, aber sehr kom- pliziert).

12-5 Ein einfacher Merge-Sort-Algorithmus. 12-5

Algorithmus

SeiA der Eingabearray. Falls seine Länge 1 ist, so sind wir fertig. Sonst:

1. TeileA in die vordere und in die hintere Hälfte auf.

2. Sortiere (parallel) die vordere und die hintere Hälfte rekursiv.

3. Verschmelze die beiden sortierten Listen zu einer Liste.

Zur Erinnerung:

Wir können zwei Listen der Längenin ZeitO(log n)und ArbeitO(n)verschmelzen (mittels Accelerated Cascading).

Merge-Sort hat eine Rekursionstiefe vonO(log n).

Also ist die GesamtzeitO(log2n)und die ArbeitO(n log n).

12.2 Sortiernetze

12.2.1 Warum noch ein Algorithmus?

12-6 Warum noch ein Algorithmus zum Sortieren? 12-6

Sortieren ist eines derwichtigsten Problemeüberhaupt.

Es kommt insehr vielen Anwendungenals Teilproblem vor.

Der einfache Merge-Sort Algorithmus enthält einen komplexenVerschmelzungalgo- rithmus.

Der einfache Merge-Sort Algorithmus lässt sichschlecht in Hardware implementieren. Es lohnt sich also, nach einempraktischerenSortieralgorithmus Ausschau zu halten.

90 12 Paralleles Sortieren 12.2 Sortiernetze