Preview only show first 10 pages with watermark. For full document please download

Warshall Algorithmus

   EMBED


Share

Transcript

Graphmanagement in Datenbanken Thema: Warshall-Algorithmus in der Datenbank Seminar im WS 2005/06 Dozenten: Professor Ulf Leser, Silke Trißl Referentin: Ayşegül Gündoğan 1 Gliederung Š Einführung Š Warshall Algorithmus Š Modifizierter Warshall Algorithmus Š Blocked Warshall Š Lu Š Zusammenfassung 2 „ 1 Einführung Š Es werden Algorithmen vorgestellt, um die transitive Hülle einer Datenbankrelation zu berechnen Š (gerichtete) Graphen als Relationen vorhanden 3 Warshall Algorithmus Š Bevor wir beginnen… …einige Definition: „ „ „ Ein Graph G = (V,E) besteht aus einer Menge von Knoten V (Vertices) und einer Menge von Kanten E (Edges). Zwei Knoten, die durch eine Kante verbunden sind, heissen adjazent Der Grad eines Knotens ist die Anzahl der adjazenten Knoten 4 „ 2 Weitere Definitionen Š Datenstrukturen für Graphen „ „ Adjazenzmatrix: Boolesche Matrix, bei der ein Eintrag a[i,j] wahr ist, falls eine Kante (i,j) existiert. Adjazenzliste: Zu jedem Knoten v wird eine Liste der von v aus erreichbaren Knoten gespeichert. Š Gerichtete Graphen „ Bei einem gerichteten Graphen haben alle Kanten eine Richtung:Vorgänger, Nachfolger. 5 Weitere Definitionen Die transitive Hülle (transitive closure) „ „ für jeden gerichteten Pfad von a nach b im Graphen G wird eine Kante (a,b) in G* eingefügt D.h. existiert so ein Pfad, findet je nach Algorithmus entweder Eintrag in einer Matrix, oder z ein Listeneintrag statt z 6 „ 3 Warshall Algorithmus Š Eingabe: n x n-Adjazenzmatrix A eines Graphen G Š Ausgabe: n x n-Adjazenzmatrix A* des Graphen G* mit A*i,j = 1, falls es einen Weg von Knoten i nach Knoten j gibt und A*i,j = 0 sonst 7 Warshall Algorithmus: Beispiel Graph G: G*: Für k = 1; i = 2; j = 5; Für k = 1; i = 5; j = 5; 0 Adjazenmatrix A: A*: j 0 0 5 i 4 2 3 1 1 1 2 1 2 3 4 5 1 1 1 1 1 1 1 1 1 1 1 1 3 4 5 1 for (k=0; k 2 foreach(tєL and t.A > t.B) do „ L´ = [(0,0), (0,5), (1,5), (2,1), (2,4), (5,1)] L´ 1.foreach begin 3 4 findall t´ in L where t.B = t´.A; 5 insert{(t.A,t´.B)}into L; 7 foreach(tєLand t.A