prev up inhalt next


Subsections


Hamiltonkreis

Gibt es eine Permutation (wie oben) mit endlichen Kantenkosten. (c(xi,xj) = $\infty$ , falls (i,j)$\notin$E )

Exakte Lösungen für das TSP

1.
Alle Permutationen testen. (Aufwand: O (n!) )
2.
Backtracking Skizze:


Datenstruktur: Keller (Aufwand bei vollbesetztem Graph: O(n!) )

3.
Dynamic Programming Sei S $\subset$ V , i $\in$ V . g(i,S) = Länge des kürzesten Weges, der von i aus über genau alle Knoten von S läuft und beim Knoten o endet.


g(i, $\emptyset$ ) : = c(i,o)
g(i,S) : = $\min\limits_{j\in S}^{}${g(j,S$\backslash${j}) + c(i,j)},(i$\notin$S)
Lösung des TSP: g(o,V$\backslash${o})
Platzbedarf (Speicher): ${n\choose 1}+{n \choose 2}+\ldots+{n\choose n}=
O(2^n)$
Laufzeit: O(2n) (gute Verbesserung gegenüber O(n!) )

4.
Branch & Bound Teillösung (Fixierung einiger Variablen) = Teilproblem T = < w,b > ( w = fixierter Weg, b = untere Schranke)
Jede Lösung, die w enthält, kostet mindestens b .
Aus T entstehen Teilprobleme durch Expansion. (wi = w $\cup$ {ei},Ti = < wi,bi > )
Wir verwalten alle Teilprobleme in einem Heap.


Eine Schranke bi für Ti lautet: c(w) + c(ei) + c(S) + c(f ) ( f = billigste Kante von V$\backslash$w zum Knoten o ).

Algorithmus:

     Startproblem <o, 0 > in Heap.
     Sei L0 eine Näherungslösung.
     REPEAT
          Entferne billigste Teillösung T = <w,b > aus Heap.
          Expandiere w zu w1 , w2 , ... , wk mit b1 , b2 , ... , bk .
          Falls Lösung entsteht und besser als L0 , dann ersetzen.
          Sinnvolle Teilprobleme in den Heap tun.
     UNTIL Heap enthält keine sinnvollen Probleme mehr.
     L0 ist Lösung.

(Teil-) Problem sinnvoll $\iff$ b -Wert < bisher beste Lösung ( L0 ).


Laufzeit: exponentiell (z.B. O((1,2)n) )


prev up inhalt next