7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle

7. Transitive Hülle In Anwendungen ist es oft interessant zu wissen, ob man überhaupt von einem Knoten v zu einem Knoten w gelangen kann, ganz gleich ...
Author: Kasimir Breiner
0 downloads 1 Views 273KB Size
7. Transitive Hülle In Anwendungen ist es oft interessant zu wissen, ob man überhaupt von einem Knoten v zu einem Knoten w gelangen kann, ganz gleich wie lang der Weg auch ist. Gegeben sei dabei ein gerichteter Graph G = (V, E). Der Algorithmus von Warshall berechnet als Ergebnis einen Graphen G+ = (V, E+) der genau dann eine Kante (v, w) enthält, wenn es in G einen Weg von v nach w gibt. Der Graph G+ heißt transitive Hülle von G, da seine Kantenrelation E+ die kleinste transitive Relation ist, die E umfasst.

2

4

7

3

– 6. Einführung Graphen ––PAD PG IIII –– SoSe WS 2011/12 2009 ––Hochschule HochschuleDarmstadt Darmstadt

5

6

Kante des Graphen

Zusatz-Kante der transitiven Hülle

1

7. Transitive Hülle Der Graph G+ wird aus G entwickelt, indem schrittweise neue Kanten hinzugenommen werden: ● In Schritt 0 kommt eine Kante (i, j) hinzu, wenn sich aus zwei Kanten ein Weg von i nach j bilden lässt, der über den Knoten 0 führt (d.h. wenn (i, 0) und (0, j) Kanten sind). ● In Schritt 1 kommt eine Kante (i, j) hinzu, wenn sich aus zwei Kanten ein Weg von i nach j bilden lässt, der über den Knoten 1 führt; hierbei werden die in Schritt 0 neu gefundenen Kanten mit berücksichtigt. ● Dieses Verfahren wird für alle Knoten fortgesetzt. Warshall-Algorithmus Warshall-Algorithmus Eingabe: Eingabe:Graph GraphGG == (V, (V, E) E)mit mitVV == {0, {0, ..., ..., n-1} n-1} + + Ausgabe: Ausgabe:Graph GraphGG+ == (V, (V, EE+)) + Methode: Methode: EE+ := := EE für fürKnoten Knotenkk == 0, 0, ..., ..., n-1 n-1 für füralle allePaare Paarevon vonKnoten Knoten(i, (i, j) j) ++sind, dann wenn (i, k) und (k, j) Kanten in E wenn (i, k) und (k, j) Kanten in E sind, dann + erzeuge erzeugeneue neueKante Kante(i, (i, j) j)ininEE+ – 6. Einführung Graphen ––PAD PG IIII –– SoSe WS 2011/12 2009 ––Hochschule HochschuleDarmstadt Darmstadt

2

7. Transitive Hülle Beispiel:

– 6. Einführung Graphen ––PAD PG IIII –– SoSe WS 2011/12 2009 ––Hochschule HochschuleDarmstadt Darmstadt

3

7. Transitive Hülle Implementierung: ● Man geht von der Adjazenzmatrix des Graphen G aus, d.h. H =A[i, j] 0 ●





und ermittelt eine neue Matrix H1, die neue Wege zwischen Knoten angibt. Das macht man solange, bis keine neuen Kanten mehr hinzugefügt werden können. Beim Übergang von Hk-1[i, j] nach Hk[i, j] entscheidet man: ➢

existiert eine Kante von i nach k und von k nach j, dann wird Hk[i, j]=1



ansonsten bleibt Hk[i, j] unverändert

– 6. Einführung Graphen ––PAD PG IIII –– SoSe WS 2011/12 2009 ––Hochschule HochschuleDarmstadt Darmstadt

4

7. Transitive Hülle template bool *Warshall(Digraph g) {// berechnet transitive Hülle von g bool *H = new bool[maxNodes*maxNodes]; for (int i=0; i