Benutzer:Hauix/Scratch

aus Wikipedia, der freien Enzyklopädie

Repräsentation von Graphen

Adjazenzlisten

Geeignet für dünn besetzte Graphen.

Für einen Graphen speichere für jeden Knoten ein Feld . Für jede Kante mache einen Eintrag in der Liste .

Es müssen insgesamt Felder gespeichert werden. Die Summe aller Feldlängen ist gerade die Anzahl der Kanten im Graphen .

Bei der Repräsentation gerichteter Graphen kann bei jedem Feldeintrag für eine Kante zusätzlich ihr Gewicht gespeichert werden. Bei der Traversierung des Graphen ermöglicht dies den unmittelbaren Zugriff (in Schritten) auf das Kantengewicht.

Adjazenzmatrix

Geeignet für dicht besetzte Graphen.

Eine Adjazenzmatrix zu einem Graphen ist eine Matrix mit Boolschen Werten. Ein Matrixeintrag ist wahr, wenn in dem Graphen eine Kante existiert und falsch andernfalls.

Die Adjazenzmatrix hat immer Einträge unabhänig von der Anzahl der Kanten im Graphen. Diese Repräsentationsform eignet sich daher vorzugsweise für dicht besetzte Graphen. Der Speicherplatzbedarf pro Kante reduziert sich auf ein einzelnes Bit pro Kante im Gegensatz zu einem ganzen Speicherwort bei der Adjazenzliste.

Bei gewichteten Graphen wird in den Matrixeinträgen das Gewicht der Kante gespeichert, wenn diese existiert, oder sonst der Wert .

Elementare Graph-Algorithmen

Breitensuche

Die Breitensuche traversiert alle Knoten eines Graphen, die von einem gegebenen Startknoten aus erreichbar sind, in einer bestimmten Reihenfolge. Während der Traversierung wird für jeden Knoten ein Abstandswert berechnet, der die Länge des kürzesten Pfades vom Startknoten zu einem Knoten angibt. Für alle Knoten, die nicht vom Startknoten erreichbar sind, wird dieser Abstandswert als definiert.

Aufwand

Die Breitensuche und das Berechnen des Tiefenwertes für jeden Knoten ist in Schritten möglich.

Tiefensuche

Die Tiefensuche traversiert alle Knoten eines Graphen so, dass zuerst alle Kinder eines Knotens besucht werden, bevor seine Geschwister besucht werden. Dabei werden für jeden Knoten zwei Werte und berechnet, die den Zeitpunkt festhalten, zu dem der Knoten aufgefunden wurde () und zu dem die Bearbeitung des Knotens abgeschlossen wurde.

Aufwand

Tiefensuche mit der Berechnung der Werte und ist in Schritten möglich.

Topologische Sortierung

Topologische Sortierung berechnet eine Reihenfolge der Knoten eines azyklischen gerichteten Graphen . Falls es eine Kante gibt, dann kommt in der berechneten Reihenfolge der Knoten vor dem Knoten .

Algorithmus

Topologische Sortierung basiert direkt auf dem Algorithmus für Tiefensuche. Während einer Tiefensuche auf dem Graphen wird ein Knoten bei Abschluss seiner Bearbeitung an den Anfang einer Liste angehängt. Nach Beendigung der Tiefensuche sind die Knoten von topologisch sortiert in der Liste gespeichert.

Aufwand

Da es sich um eine minimal modifizierte Tiefensuche handelt, ist der Aufwand ebenfalls .


Starke Zusammenhangskomponenten

Eine Teilmenge der Knoten eines gerichteten Graphen bildet eine starke Zusammenhangskomponente , wenn jeder Knoten von jedem anderen Knoten aus erreichbar ist. Durch zweifache Tiefensuche (auf und ) können die starken Zusammenhangskomponenten eines Graphen gefunden werden. (Siehe auch: Zusammenhang von Graphen).

Aufwand

Wie Tiefensuche: