Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
132 KAPITEL 6. KOMPLEXITÄT VON ALGORITHMEN<br />
zifikation realisierbar ist. Trotz e<strong>in</strong>igen Wochen <strong>in</strong>tensiven Versuchens ist es Ihnen<br />
nicht gelungen, das Programm zu schreiben. Was jetzt? Wenn Sie die Produktspezifikation<br />
analysieren und feststellen, dass sie sehr allgeme<strong>in</strong> formuliert ist, liegt es<br />
vielleicht an der Allgeme<strong>in</strong>heit und nicht an Ihrer Unfähigkeit. Es wäre z.B. toll,<br />
wenn Sie zeigen können, dass das von Ihnen verlangte Programm eigentlich auch<br />
das Halteproblem lösen könnte – dann können Sie Ihrem Chef beweisen, dass er<br />
unlösbare Aufgaben erteilt. Das ist aber leider nicht sehr wahrsche<strong>in</strong>lich, denn das<br />
Halteproblem ist doch sehr allgeme<strong>in</strong>. Also versuchen Sie zu zeigen, dass Ihr Programm<br />
e<strong>in</strong>es von den hunderten N P-vollständiger Problemen lösen würde – das<br />
zeigt nicht, dass die Aufgabe pr<strong>in</strong>zipiell nicht effektiv implementierbar wäre, aber<br />
dass es schon e<strong>in</strong>er Schar ausgezeichneter Programmierer nicht gelungen ist, e<strong>in</strong>en<br />
effizienten Algorithmus zu entwickeln.<br />
6.1 Beispiele effizienter Algorithmen<br />
In diesem Abschnitt illustrieren wir e<strong>in</strong>e genaue Analyse der Effizienz von Algorithmen<br />
an e<strong>in</strong>igen wichtigen Beispielen von Graphen-Algorithmen. E<strong>in</strong> gerichteter<br />
Graph G = (V, E), wobei V die Menge aller (n) Knoten und E die Menge aller<br />
Kanten (d.h. geordneten Paaren von Knoten) ist, wird gewöhnlich durch se<strong>in</strong>e<br />
n × n-Adjazenzmatrix<br />
repräsentiert, wobei<br />
aij =<br />
(aij)<br />
<br />
1 falls (i, j) e<strong>in</strong>e Kante <strong>in</strong> E ist<br />
0 sonst<br />
Oder durch Adjazenzlisten, d.h., durch n l<strong>in</strong>eare Listen, wobei die i-te Liste alle<br />
Knoten j mit (i, j) ∈ E enthält und die heads (Listenköpfe) <strong>in</strong> e<strong>in</strong>em Array<br />
gespeichert werden. Beispiel: für den gerichteten Graphen<br />
<br />
1<br />
<br />
<br />
5<br />
<br />
<br />
<br />
<br />
2<br />
<br />
3 <br />
<br />
4<br />
haben wir die Adjazenzmatrix der Gesamtgröße m = n 2<br />
⎛<br />
0<br />
⎜<br />
⎜0<br />
⎜<br />
⎜0<br />
⎝0<br />
1 0<br />
1 1<br />
0 0<br />
0 1<br />
⎞<br />
0 0<br />
1 0 ⎟<br />
0 0 ⎟<br />
0 1⎠<br />
1 0 0 0 0<br />
und die Adjazenzlisten der Gesamtgröße m = n + k