• Keine Ergebnisse gefunden

11. Zweifach zusammenhängende Graphen

N/A
N/A
Protected

Academic year: 2021

Aktie "11. Zweifach zusammenhängende Graphen"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

11. Zweifach zusammenhängende Graphen

§ Artikulationspunkte,

zweifach zusammenhängende Graphen

§ Tiefensuchwald mit Rückwärtskanten

§ Algorithmus zur Berechnung der

Artikulationspunkte

(2)

Artikulationspunkt

§ Ein ungerichteter Graph heißt zusammenhängend (engl. connected), falls es für jeden Knoten einen Weg zu jedem anderen Knoten gibt.

§ Eine Zusammenhangskomponente eines ungerichteten Graphen G ist ein maximal zusammenhängender Teilgraph.

§ Ein Knoten heißt Artikulationspunkt (Artikulation med. = Gelenk;

engl. articulation point), wenn sein Wegfall die Anzahl der Zusammenhangskomponenten erhöht.

B

C

A

D F

§ Ein ungerichteter und

zusammenhängender Graph G mit den Artikulationspunkten C und D.

§ G \ {C} zerfällt in 3

Zusammenhangskomponenten

(3)

Artikulationspunkte und zweifacher Zusammenhang

§ Ein Graph heißt zweifach zusammenhängend (engl. biconnected), falls er zusammenhängend ist und keinen Artikulationspunkt besitzt.

§ Ziel: Bestimme in einem ungerichteten Graphen alle Artikulationspunkte.

§ Damit ist auch das Problem des zweifachen Zusammenhangs gelöst.

G

B

C

A

D

H E

F

§ Graph G ist

zusammenhängend und hat keine

Artikulationspunkte

§ G ist daher zweifach zusammenhängend

(4)

Tiefensuchwald mit Rückwärtskanten (TR)

B

C

A

D

§ Stellt man die Tiefensuche für einen Graph G graphisch dar, ergibt sich ein Tiefensuchwald.

§ Der Tiefensuchwald besteht aus Vorwärtskanten.

§ Zusätzlich wird der Tiefensuchwald ergänzt um Rückwartskanten.

Rückwartskanten sind Kanten, die einen Knoten mit einem bereits früher besuchten Knoten verbinden jedoch nicht den unmittelbar davor besuchten Knoten.

§ Beachte: Anzahl der Kanten in G und TR müssen gleich sein.

A B C

F D G

H

J

I

H

I

J

(5)

Vorfahre und Rückwärtsweg

§ Knoten v ist Vorfahre von w, falls es im TR einen Weg von v nach w gibt, der nur aus Vorwärtskanten besteht.

§ Ein Rückwärtsweg ist ein Weg in einem TR

mit einer beliebig langen (evtl. leeren) Folge von Vorwärtskanten und dann genau einer Rückwärtskante.

A B C D

E F

G

§ C ist Vorfahre von D, E, F und G

§ B – C – D – A ist ein Rückwärtsweg

§ C – D – E – F – D ist ein Rückwärtsweg

§ E – F – D – A ist kein Rückwärtsweg

Beispiele:

(6)

Bestimmung von Artikulationspunkten

G B

C

A

D

(W) Die Wurzel ist ein Artikulationspunkt, wenn sie mehr als ein Kind hat.

(NW) Ein Knoten v ≠ Wurzel ist ein Artikulationspunkt, falls v im TR ein Kind w hat, so dass es von w keinen Rückwärtsweg zu einem Vorfahren von v gibt.

A B C D

E F E

F

G C

B A

D E F

G

(7)

Nummerierungen: TSNr und MinNr

G B

C

A

D

§ TSNr[v]: Besuchszeitpunkt für Knoten v bei der rek. Tiefensuche

§ MinNr[v]: Minimum { TSNr[w] / w = v oder w ist von v über einen Rückwärtsweg erreichbar } Wie weit kommt man von v über einen Rückwärtsweg zurück?

A B C D

E F E

F

TR mit TSNr und MinNr

G

1,1 2,1 3,1 4,1

5,4 6,4

7,7

(NW) Knoten v ≠ Wurzel ist genau dann ein Artikulationspunkt, Damit lässt sich Regel (NW) neu formulieren:

(8)

Berechnung von MinNr

G B

C

A

D

§ MinNr[v] = Minimum von (M1) TSNr[v],

(M2) kleinster Wert von TSNr[w] für alle Rückwärtskanten (v,w) (M3) kleinster Wert von MinNr[w] für alle Vorwärtskanten (v,w)

E

F

A B

C

D G

1 2

3

4, 1 7

(M2)

(M1)

TR mit TSNr und MinNr

(9)

Algorithmus zur Bestimmung von Artikulationspunkten (1)

Set<Vertex> visited;

intcounter;

int[ ] TSNr;

int[ ] MinNr;

Vertex[ ] p;

public void findArtPoint(Graph g) { visited = Æ;

counter = 1;

for (jeden Knoten v)

if (! visited.contains(v) ) findArtPoint(g, v);

}

private void findArtPoint(Graph g, Vertex v) { // s. nächste Seite

}

§ findArtPoint(g) gibt alle Artikulationspunkte des ungerichteten Graphen g aus.

Globale Variablen:

§ counter dient zum Hochzählen der Besuchszeitpunkte.

§ TSNr und MinNr wie soeben beschrieben.

§ p[v] speichert den im TR zu v gehörenden Elternknoten ab.

§ Beachte:

Die Prüfung, ob eine Wurzel ein Artikulationspunkt ist (Regel (W)),

§ findArtPoint(g,v) startet eine rekursive Tiefensuche bei Knoten v.

(10)

Algorithmus zur Bestimmung von Artikulationspunkten (2)

Set<Vertex> visited;

intcounter;

int[ ] TSNr[n];

int[ ] MinNr;

int[ ] p;

// ...

private void findArtPoint(Graph g, Vertex v) { visited.add(v);

TSNr[v] = counter++;

MinNr[v] = TSNr[v]; // (M1) for (jeden Nachbarn w von v ) {

if (! visited.contains(w)) { p[w] = v;

findArtPoint(g, w);

if (MinNr[w] >= TSNR[v]) println(v + “ist ein Artikulations-Punkt”);

MinNr[v] = Minimum(MinNr[v], MinNr[w]); // (M3) }

§ p[v] speichert den im TR zu v gehörenden Elternknoten ab.

§ Mit p[v] kann geprüft werden,

Referenzen

ÄHNLICHE DOKUMENTE

Ein Knoten eines Graphen heißt verbindbar mit einem Knoten , wenn es einen Weg im Graphen gibt, der als Endknoten hat.. Ein Graph ist zusammenhängend, wenn je zwei

  Felder mit einem Namen zzz, die den Access-Type exposedField haben, haben implizit den Namen zzz_changed, wenn sie als Ausgabe-Feld verwendet werden, und den Namen set_zzz,

  Dieser Knoten erzeugt in jedem Frame eine Transformation, die dafür sorgt, daß die lokale z-Achse zum aktuellen Viewpoint zeigt..   axisOfRotation wird im

Falls a n+1 auf einem neuen Pfad liegt, aus dem noch kein a i gewählt wurde, wähle auch ein b n+1 , das auf einem neuen Pfad liegt, aus dem noch kein b i gewählt wurde. Das geht

Wenn es m¨oglich ist, von einem Zustand in einen anderen zu wechseln, zeichnen wir einen Pfeil

„ Siehe Bild: Für jeden Knoten sind alle Daten links kleiner und alle Daten rechts größer als die Daten des

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop &amp; Go Ereignisse verändert. Bei einer minimal

Computer-gestützte Programme für das Ge- wichtsmanagmeent seien zwar weniger wirk- sam als persönliche Interventionen, aber auf jeden FAll besser als nichts und auch ange- sichts