18.09.2013 Aufrufe

Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

6.1. BEISPIELE EFFIZIENTER ALGORITHMEN 133<br />

1 <br />

2<br />

2 <br />

2 <br />

4 <br />

3<br />

3<br />

4 <br />

5 <br />

3<br />

5 <br />

1<br />

<br />

<br />

<br />

Beispiel 1 (Topologisches Sortieren). In Abschnitt 2.7 haben wir den folgenden<br />

Algorithmus für das topologische Sortieren e<strong>in</strong>es gerichteten Graphen G = (V, E)<br />

beschrieben:<br />

1: {(1) Initialisierung}<br />

2: i := 0<br />

3: W := V {W – die Menge der noch nicht bearbeiteten Knoten}<br />

4: {(2) Rekursionsschritt}<br />

5: while e<strong>in</strong> Knoten x ∈ W ohne Vorgänger existiert do<br />

6: i := i + 1;<br />

7: ord(x) = i;<br />

8: W := W − {x}<br />

9: Löschen des Knotens x aus dem Graphen<br />

10: od<br />

Wie lange dauert dieser Algorithmus für e<strong>in</strong>en Graphen mit n Knoten? Nehmen<br />

wir an, dass e<strong>in</strong>e E<strong>in</strong>tragung <strong>in</strong> die Liste ord sowie die Modifikation der Variablen<br />

i und W e<strong>in</strong>e konstante Zahl A von Zeite<strong>in</strong>heiten dauert. Um e<strong>in</strong>en Knoten x ohne<br />

Vorgänger zu f<strong>in</strong>den, suchen wir <strong>in</strong> der Adjazenzmatrix e<strong>in</strong>e Spalte mit lauter Nullen;<br />

das dauert Km 2 Zeite<strong>in</strong>heiten, wobei K e<strong>in</strong>e Konstante ist und m die aktuelle<br />

Knotenzahl ( m = n, n − 1, . . .,1), und die Entfernung e<strong>in</strong>es Knotens dauert e<strong>in</strong>e<br />

konstante Zahl L von Zeite<strong>in</strong>heiten. Dann ist die gesamte Zahl von Zeite<strong>in</strong>heiten<br />

für diesen Algorithmus<br />

T = 2A +<br />

n<br />

m=1<br />

(Km 2 + 3A + L) > Cn 3<br />

<br />

für e<strong>in</strong>e Konstante C.<br />

Dieser Algorithmus kann viel effizienter implementiert werden. Diesmal stellen wir<br />

den Graphen mittels Adjazenzlisten dar. Wir bezeichnen für jeden Knoten v mit<br />

IN[v] (e<strong>in</strong> Array, v = 1, . . .,n)<br />

die Zahl aller Kanten mit dem Endknoten v und wir setzen<br />

U = {v; v ∈ V und IN[v] = 0}.<br />

Algorithmus für Topologisches Sortieren<br />

E<strong>in</strong>gabe: Gerichteter Graph G = (V, E) mit n Knoten und k Kanten<br />

Ausgabe: Topologische Sortierung ord : V → {1, . . .,n} von G, falls G azyklisch<br />

ist<br />

1: {(1) Initialisierung}<br />

2: i := 0 {i – die letzte Zahl, die ord benutzt hat}<br />

3: U := ∅ {U - die Menge aller Knoten v mit IN[v] = 0}<br />

4: IN[1] := 0, . . .,IN[n] := 0

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!