• Keine Ergebnisse gefunden

Optimaler Algorithmus

8.2 Methodik: Accelerated Cascading 65

9.2.3 Optimaler Algorithmus

9 Aufbrechen von Symmetrien

9.2 Färbealgorithmen 73

74 9 Aufbrechen von Symmetrien Übungen zu diesem Kapitel

Zusammenfassung dieses Kapitels

9-22

I

Symmetriebrechung 9-22

Symmetriebrechungbedeutet in der Parallelverarbeitung, eine Datenstruktur so vorzuverar- beiten, dassparallel verarbeitbare Teileentstehen. BeiArraysist dies in der Regel trivial (man nehme jedes zweite Element). Beiverketteten Listenerrechnet man3-Färbungen. Bei allgemeinen Graphenist Färben hingegensehr schwierig.

I

Satz

Man kann einen Ring mitlog lognFarben inZeitO(1)undArbeitO(n)färben.

I

Satz

Man kann einen Ring mit3Farben in ZeitO(logn)undArbeitO(nlogn)färben.

I

Satz

Man kann einen Ring mit3Farben inZeitO(logn)undArbeitO(n)färben.

Übungen zu diesem Kapitel

Übung 9.1 Beweis der Korrektheit von ReduceColors, mittel Geben Sie einen detaillierten Beweis des Lemmas von Folie 9-12 an.

Tipps:Man führe einen Widerspruchsbeweis: Wären am Ende des Algorithmusc[i]undc[S[i]]gleich, so müssten sie auch schon vorher gleich gewesen sein.

Übung 9.2 Algorithmenanalyse, leicht

Professor Schlauhmayer hat sich eine Beschleunigung des schnellen optimalen 3-Färbealgorithmus von Seite 9.19 ausgedacht. Sein neuer Algorithmus lautet wie folgt:

1 ReduceColors()

2 ReduceColors()

3 Sortiere alle Knoten nach ihrer Farbe

4 fori←3to2dlog logne+4seq do

5 KnockOutColor(i)

Der Professor behauptet, dass dieser Algorithmus eine 3-Färbung in ZeitO(log logn)und ArbeitO(n) berechnet. Was stimmt hieran nicht? Begründen Sie Ihre Antwort.

Übung 9.3 Einen Kompaktifizierungsalgorithmus entwerfen, schwer

Ein Programm benutzt einen Memory-Heap zur Speicherung einer Datenstruktur. Der Memory-Heap besteht aus einem ArrayMvon Zellen, die von1bisnnummeriert sind. Jede Zelleienthält entweder den Wertleeroder sie enthält ein Tripel bestehend aus einer reellen ZahlRisowie zwei Zeigernpi

undqi. Die Zeigerpiundqienthalten die Nummer einer nichtleeren Memory-Zelle oder den Wert0. Sie sollen einen in ZeitO(logn)und ArbeitO(n)arbeitenden Algorithmus entwerfen, der den Me- mory-Heap kompaktifiziert. Dies bedeutet, dass nach Ablauf Ihres Algorithmus die nichtleeren Zellen am Anfang des Memory-Heaps stehen und die Werte und Pointer korrekt angepasst wurden. Dazu soll für jeden Indexieiner nichtleeren Zelle im alten Memory-Heap der Inhalt dieser Zelle an eine neue Stellei0kopiert werden und die Zeigerpiundqisollen zup0iundq0iverändert werden.

Hier ein Beispiel: Der Memory-Heap habe anfangs den Inhalt

Zellenummeri: 1 2 3 4 5 6

Ri: 5 π leer −3,2 leer 100

pi: 0 1 – 0 – 4

qi: 6 6 – 0 – 1

Dann könnte er nach der Kompaktifizierung folgenden Inhalt haben:

Zellenummeri: 1 2 3 4 5 6

Ri: 5 π −3,2 100 leer leer

pi: 0 1 0 3

qi: 4 4 0 1

Tipp:Sie dürfen Hilfsarrays verwenden. Führen Sie eine Präfixsumme über ein Array durch, der eine 1für jede nichtleere Zelle hat.

9 Aufbrechen von Symmetrien

Übungen zu diesem Kapitel 75

Übung 9.4 Färbungsalgorithmus implementieren, mittel

Implementieren Sie den schnellen parallelen Färbungsalgorithmus mit OpenMP. Zur Erinnerung: Bei Eingabe einer Liste mitnElementen produziert der Algorithmus zuerst eine Färbung mitnFarben.

Danach wird die Anzahl der Farben durch(logn)-faches Anwenden der MethodeReduceColorsauf eine konstante Anzahl von Farben verringert. Zum Abschluss wird mithilfe desKnockOutColorAl- gorithmus eine 3-Färbung berechnet.

76 10 List-Ranking-Algorithmen

10-1 10-1

Kapitel 10

List-Ranking-Algorithmen

1, 2, 3, . . .

10-2 10-2

Lernziele dieses Kapitels

1. Problematik des List-Rankings kennen und anwenden können

2. Einfachen optimalen List-Ranking Algorithmus kennen

Inhalte dieses Kapitels

10.1 Motivation 77

10.1.1 Ein Anwendungsbeispiel . . . 77 10.1.2 Das Ranking-Problem . . . 77

10.2 Einfaches Ranking 77

10.3 Optimales Ranking 78

10.3.1 Idee . . . 78 10.3.2 Ausklinken eines Elementes . . . 78 10.3.3 Unabhängige Mengen . . . 79 10.3.4 Algorithmus . . . 80

10.4 Accelerated-Cascading 81

10.4.1 Idee . . . 81 10.4.2 Algorithmus . . . 81

Übungen zu diesem Kapitel 82

Worum es heute geht

Worum es heute geht

Die verkettete Liste gehört unzweifelhaft zu den grundlegendsten Datenstrukturen der In- formatik. Man begegnet ihr in solidem, äußerst bodenständigem Code einer industriellen Oberflächenprogrammierung, in den tiefsten Eingeweiden des Betriebssystem innerhalb des guru-gehacktem Assemblercodes des Scheduler, aber auch in der hohen Theorie der reinen Lehre der funktionalen Typtheorie.

Eines der Wesensmerkmale einer Liste ist, dass ihre Elemente in einerReihenfolgestehen. Es gibt eben ein erstes Element, ein zweites, ein drittes und so weiter; und diese Reihenfolge ist im Allgmeinen äußerst wichtig. Nun die »einfache« Problemstellung: Gegeben eine Liste im Speicher, bestimme für jedes Element der Liste, das wievielte es ist (dies nennt man auch denRangdes Listenelements). Dieses Problem ist sequentiell sehr einfach mit einem Einzeiler zu lösen (etwa while(c){c.rank=i++; c=c.next;}). Jedoch ist diese Schleife

»sehr« sequentiell und man wird sich zum Parallelisieren etwas Neues ausdenken müssen.

Wenn man im Parallelen nicht mehr weiter weiß, dann helfen bekanntlich immer Präfixsum- me oder Pointer-Jumping. So auch hier: Eine Liste ist ja ein entarteter Baum und folglich kann man auf sie Pointer-Jumping anwenden. Damit lässt sich List-Ranking in ZeitO(logn) bewerkstelligen, jedoch mit einer Arbeit vonO(nlogn). Dies ist alles andere als optimal. In der heutigen Vorlesung soll es darum gehen, diese Arbeit zu »drücken«. Dazu kombinieren wir Pointer-Jumping und die Färbealgorithmen aus dem letzten Kapitel mittels Accelerated- Cascading.

Diese Kombination von Algorithmen ist schon eher komplex, obwohl es sich um »einfa- che« List-Ranking-Algorithmen handelt. Die Algorithmen sind auch schon ziemlich gut und schnell, aber eben nicht perfekt. Um auch noch das letzte Quäntchen Geschwindigkeit herauszupressen, müssen wir in nächsten Kapitel nochwesentlich tiefer in die Trickkiste greifen.

10 List-Ranking-Algorithmen

10.3 Motivation 77

10.1 Motivation

10.1.1 Ein Anwendungsbeispiel

10-4 Wiederholung: Das Produkt vieler Matrizen. 10-4

Problemstellung

Eingabe Verkette Liste der Längenvon(4×4)-Matrizen.

Ausgabe Produkt der Matrizen in der durch die Verkettung gegebenen Reihenfolge.

Lösungsidee 1

Berechne das Produkt durch Pointer-Jumping. Die Rechenzeit ist dabeiO(logn), die Arbeit istO(nlogn).

Lösungsidee 2

Bestimmen für jede Matrix ihren Rang in der Liste.

Schreibe jede Matrix in einen Array an die Stelle ihres Rangs.

Bilde das Produkt der Elemente im Array (oder sogar Präfixsumme).

Falls wir den ersten Schritt in ZeitO(logn)und ArbeitO(n)hinbekommen, so auch die restlichen Schritte.