Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seminar parallele Programmierung SS 2003

Ähnliche Präsentationen


Präsentation zum Thema: "Seminar parallele Programmierung SS 2003"—  Präsentation transkript:

1 Seminar parallele Programmierung SS 2003
Graphalgorithmen Seminar parallele Programmierung SS 2003 Bernd Kruthoff und Jochen Olejnik

2 Gliederung 1. Motivation 2. Verbundene Komponenten
- Hirschbergs Algorithmus 3. Minimal Spannender Baum - Kruskals Algorithmus - Sollins Algorithmus 4. Kürzeste Pfade von einem Knoten ausgehend - Moores Algorithmus 5. Zusammenfassung

3 1. Motivation Probleme der Praxis werden komplexer
Lassen sich häufig durch Graphen darstellen Herkömmliche Algorithmen stoßen an Grenzen Lösung: Parallelisierung bekannter Algorithmen

4 Verbundene Komponenten
Finden aller verbundenen Komponenten in einem ungerichteten Graphen 3 mögliche Ansätze: A. Suchalgorithmen durch Breiten- bzw. Tiefensuche durch den kompletten Graphen

5 Verbundene Komponenten
B. Transitive Hülle Grundlage: Adjazenzmatrix Bestimmen der transitiven Hülle durch Plus-Min-Multiplikationen Plus-Min-Multiplikation ist Matrixmultiplikation bei der Skalamultiplikationen durch Additionen und Additionen durch Minimumoperationen ersetzt werden => Strukturanalogie zur Matrixmultiplikation: => Laufzeit: für eine Plus-Min-Multiplikation => für log n Plus-Min-Multiplikationen

6 C. Hirschbergs Algorithmus
Grundidee: Knoten zu Knotengruppen zusammenfassen bis kein weiteres Zusammenfassen mehr möglich ist Jeder Knoten gehört zu genau einer Knotengruppe Knotengruppen werden durch Wurzel (hier: kleinstes Element) identifiziert Der Algorithmus: 1. Schritt: Zu jedem Knoten wird die angrenzenden Knotengruppe mit der kleinsten Wurzel gesucht 2. Schritt: Verbinden der Wurzeln der in Schritt 1 gefundenen Knotengruppen 3. Schritt: Die in Schritt 2 gefundenen Knotengruppen werden zu einer Knotengruppe zusammengefasst Endet, wenn es in Schritt 1 keine angrenzende Knotengruppe mehr gibt

7 Ein Beispiel: Die Ausgangssituation: Knoten 1 2 3 4 5 6 7 8 9 10 11
Knoten-gruppe

8 Beispiel: 1. Iteration 1. Schritt: Zu jedem Knoten wird die angrenzende Knotengruppe mit der kleinsten Wurzel gesucht

9 Beispiel: 1. Iteration 2. Schritt: Verbinden der Wurzeln der in Schritt 1 gefundenen Knotengruppen

10 Beispiel: 1. Iteration 3. Schritt: Die in Schritt 2 gefundenen Knotengruppen werden zu einer Knotengruppe zusammengefasst

11 Beispiel: 1. Iteration Ergebnis
Knoten 1 2 3 4 5 6 7 8 9 10 11 Knoten-gruppe

12 Beispiel: 2. Iteration Letzte Iteration: Startgraph:
1. Schritt: Zu jedem Knoten wird die angrenzenden Knotengruppe mit kleinster Wurzel gesucht

13 Beispiel: 2. Iteration 2. Schritt: Verbinden der Wurzeln der in Schritt 1 gefundenen Knotengruppen

14 Beispiel: 2. Iteration 3. Schritt: Die in Schritt 2 gefundenen Knotengruppen werden zu einer Knotengruppe zusammengefasst

15 Beispiel: 2. Iteration Ergebnis
Knoten 1 2 3 4 5 6 7 8 9 10 11 Knoten-gruppe

16 Komplexität Der Algorithmus benötigt Iterationen weil sich die Anzahl der Knotengruppen mit jeder Iteration mindestens halbiert Es werden n2 Prozessoren benötigt, weil maximal n benachbarte Knotengruppen pro Knoten verglichen werden müssen. => Gesamtkomplexität

17 Verbesserungen Betrachten von Brents Theorem:
Es reichen Prozessoren aus um n Elemente anzusprechen und deren Minimum in Zeit zu finden. Jeder Prozessor kann log n Elemente anstatt nur einem ansprechen oder das Minimum aus log n Elementen berechnen, anstatt nur das Minimum aus zwei Elementen ohne die Zeitkomplexität zu verändern. Der Algorithmus benötigt also Zeit bei Prozessoren.

18 Eine Implementierung Implementierung von Hirschbergs Algorithmus auf das 2D Mesh SIMD Rechnermodell (Nassimi, Sahni) 3 neue Befehle: random.read(a,[b]c) liest den Wert der Variablen c im Bereich von Prozess b in die Variable a ein random.write(a,[b]c) schreibt den Wert der Variablen a in die Variable c im Bereich von Prozess b Laufzeit dieser Operationen ist nur vom Rechner abhängig => konstant in Bezug auf die Anzahl der Elemente bits(i,j,k) gibt den Wert der Stellen j bis k der Zahl i zurück z. B. bits (9,3,2) : 9 ist binär 0101 zweite und dritte Stelle: 01 also wird 1 zurückgegeben Ist j<k wird 0 zurückgegeben

19

20

21

22 Laufzeit dieser Implementierung

23 Loop (Zeilen 5-18) wird log n mal durchlaufen
In innerem Loop (Zeilen 9-13) wird d mal die Minimumoperation angewendet, welche O(n) Zeit verbraucht

24 Laufzeit dieser Implementierung
Loop (Zeilen 5-18) wird log n mal durchlaufen In innerem Loop (Zeilen 9-13) wird d mal die Minimumoperation angewendet, welche O(n) Zeit verbraucht Auf dem 2D mesh-SIMD-Rechner mit n Prozessoren und n=2k Knoten und Maximalwert d hat dieser Algorithmus eine Komplexität von

25 Minimal Spannender Baum
Finden des Minimal Spannenden Baumes in einem ungerichteten verbundenen gewichteten Graphen Kruskals Algorithmus Idee: Alle Knoten sind anfangs Bäume Pro Iteration wird nun die kleinste noch nicht im Minimal Spannenden Baum vorhandene Kante eingefügt, falls dadurch kein Zyklus entstünde

26 Beispiel Kruskals Algorithmus

27 Beispiel Kruskals Algorithmus

28 Der Heap als Datenstruktur
Parallelisierung durch geschickte Wahl der Datenstruktur Hier bietet sich der Heap an! => Gute Laufzeiteigenschaften Hier wird der Heap mit -wertigen Knoten zu einem vollständigen Binärbaum ausgebaut Lemma: Man kann mit einer UMA-Multiprozessormaschine mit log nProzessoren ein Element aus einer n-elementigen Menge in konstanter Zeit aus dem Heap auslesen.

29 Der Heap als Datenstruktur
Jede Ebene hat Flag mit Wert => voll wenn alle Knoten belegt => leer wenn es leere Knoten in Ebene gibt Wert empty_node zeigt pro Ebene Knoten, in dem Wert fehlt Jeder Prozessor ist für eine Ebene zuständig. Wird ein Knoten leer so füllt ihn der zuständige Prozessor aus dem kleinsten Element der Kinder dieses Knotens wieder auf Wird ein Blatt leer, so wird der Wert  eingetragen Heapaufbau kann durch Prescheduling parallelisiert werden

30 Ein Beispielheap E Heap F EN 1 Voll kein 2 Leer 3 6 4

31 Der Gesamtalgorithmus
Aufbauen des Heap Prozess entnimmt fortlaufend Knoten aus dem Heap und überprüft, ob sie zum Minimal Spannenden Baum gehören Die restlichen Prozesse stellen währenddessen den Heap wieder her Terminiert, wenn  ausgelesen wird Laufzeit: Wiederaufbau des Heap und Überprüfung auf Zyklus (Find und Union) geschieht in konstanter Zeit Entnahme der Knoten in konstanter Zeit möglich =>Gesamtalgorithmus benötigt O(n) Zeit

32 Wechsel....


Herunterladen ppt "Seminar parallele Programmierung SS 2003"

Ähnliche Präsentationen


Google-Anzeigen