Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Das Problem des Handlungsreisenden

Ähnliche Präsentationen


Präsentation zum Thema: "Das Problem des Handlungsreisenden"—  Präsentation transkript:

1 Das Problem des Handlungsreisenden

2 Das Problem des Handlungsreisenden
Gegeben ist eine endliche Menge von Städten (Knoten), die untereinander paarweise durch Flugrouten (Kanten) verbunden sind. Das Problem des Handlungsreisenden besteht darin, eine kürzestmögliche Rundreise durch alle Städte zu finden. Ein naiver Algorithmus bei n Knoten besteht darin, einen Knoten festzuhalten, alle Vertauschungen der übrigen n-1 Knoten zu durchlaufen und jeweils die Länge der Rundreise zu bestimmen. Dabei kann man auf die Hälfte der Vertauschungen verzichten, weil eine Rundreise in beide Richtungen gleich lang ist. Der Gesamtaufwand beträgt (n-1)! · n : 2 = n! : 2 denn es gibt (n-1)! Vertauschungen der übrigen Knoten und man muss jedesmal n Kanten summieren. Da man Konstanten in der O-Schreibweise weglässt, beträgt der Aufwand O(n!).

3 Beispiel Dieser Graph ist nicht vollständig, das heißt es sind nicht alle Eckenpaare miteinander verbunden. Das kann man sich zunutze machen, weil dadurch weniger Vertauschungen zu überprüfen sind. Dennoch bleibt der Aufwand hoch, die richtige Rundreise zu finden.

4 Beurteilung des Aufwands
Im Experiment haben wir gesehen, dass unser naiver Algorithmus sehr schnell sehr aufwendig wird und schon bei 20 Knoten nicht mehr praktikabel ist. Wir könnten den naiven Algorithmus weiter verbessern, indem wir Vertauschungen, bei denen schon nach wenigen Kanten die bisher kürzeste Länge überschritten ist, nicht weiter verfolgen. Aber selbst die besten bekannten Verbesserungen haben den überexponentiellen Aufwand O(n!) nur auf exponentiellen Aufwand O(n2·2n) gesenkt, was immer noch bei vergleichsweise kleinen n undurchführbar wird. Die Theoretische Informatik lehrt, dass das Problem des Handlungsreisenden NP-vollständig ist. Die Frage, ob es für solche Probleme einen Algorithmus mit polynomiellem Aufwand gibt (kurz: „P = NP?“), ist eines der sieben mathematischen Leitprobleme des 21. Jahrhunderts. Für seine Lösung gibt es ein Preisgeld von einer Million US-Dollar.

5 Aufwand anderer Graphenalgorithmen
Im Vergleich zum Problem des Handlungsreisenden sind andere uns bekannte Graphenprobleme sehr schnell zu lösen. Wir gehen aus von einem Graphen mit n Knoten und k Kanten. Die Tiefensuche berührt jede Kante zweimal. Ihr Aufwand ist also O(2k) = O(k). Das ist linearer Aufwand bei einem Graphen mit wenigen Kanten. Ein Graph hat maximal n·(n-1):2 Kanten, also weniger als n2. Für einem beliebigen Graphen ist darum der Aufwand der Tiefensuche O(n2). Der Aufwand ist somit quadratisch in der Anzahl der Knoten, also auf alle Fälle polynomiell. Die Breitensuche berührt jede Kante einmal. Ihr Aufwand ist darum ebenfalls O(k).

6 Der minimale Spannbaum
Ein minimaler Spannbaum ist ein Teilgraph, der alle Knoten verbindet, aber dafür eine kleinstmögliche Summe von Kantenbewertungen braucht. Es gibt mehrere Algorithmen, wie man einen minimalen Spannbaum eines zusammenhängenden Graphen bestimmt. Wir verwenden den Algorithmus von Kruskal: Sortiere alle Kanten von der kürzesten zur längsten. Streiche alle Kanten aus dem Graphen. Füge nach und nach die kürzesten Kanten wieder in den Graphen ein. Eine Kante darf dabei jedoch nur eingefügt werden, wenn sie mit den bisherigen Kanten keinen Kreis bildet. Höre auf, sobald alle Knoten verbunden sind.

7 Beispiel 1 7 7 9 4 3 3 4 7 10 7 6 7 6 7 4 11 5 3 3 12 9 6 6 3 3 6 4 4 2 8 7 6 9 7 7 5 6 11 9 6 8 8 3 4 4 11 15 10 Die Kante der Länge 5, drei Kanten der Länge 6 und zwei Kanten der Länge 7 dürfen wir nicht mehr verwenden, da wir sonst Kreise schließen. Gleiches gilt für alle Kanten ab Länge 8.

8 Aufwand des Algorithmus von Kruskal
Aus der Q11 wissen wir, dass das Sortieren der Kanten den Aufwand O(k · log k) hat. (Es kann zum Beispiel dadurch geschehen, dass wir die Kanten in einen AVL-Baum einfügen und dann der Reihenfolge nach auslesen.) Die weiteren Schritte des Algorithmus von Kruskal sind linear in der Anzahl der Kanten, also O(k). Der Gesamtaufwand ist darum O(k · log k). Wenn wir wieder k mit n2 abschätzen, können wir den Aufwand auch in der Knotenzahl n ausdrücken als O(k · log k) = O(n2 · log n2) = O(n2 · 2 · log n) = O(n2 · log n)


Herunterladen ppt "Das Problem des Handlungsreisenden"

Ähnliche Präsentationen


Google-Anzeigen