In einer aktuellen Frage wurde der heute klassische dynamische Programmieralgorithmus für TSP erörtert, der unabhängig von Bellman und Held-Karp entwickelt wurde . Es wird allgemein berichtet, dass der Algorithmus in -Zeit ausgeführt wird. Wie einer meiner Studenten kürzlich betonte, erfordert diese Laufzeit möglicherweise ein unangemessen leistungsfähiges Rechenmodell.
Hier ist eine kurze Beschreibung des Algorithmus. Die Eingabe besteht aus einem gerichteten Graphen mit Eckpunkten und einer nicht negativen Längenfunktion . Für alle Scheitelpunkte und und jede Teilmenge von Scheitelpunkten, die und , bezeichnen die Länge des kürzesten Hamilton-Pfades von nach im induzierten Teilgraphen . Der Bellman-Held-Karp-Algorithmus basiert auf der folgenden Wiederholung (oder, wie Ökonomen und Kontrolltheoretiker es gerne nennen, „Bellman-Gleichung“):
Für jeden Scheitelpunkt ist die Länge des optimalen Verkäufer Tour reisen . Da der erste Parameter in allen rekursiven Aufrufen konstant ist, gibt es verschiedene Unterprobleme, und jedes Unterproblem hängt von höchstens anderen ab. Somit läuft der dynamische Programmieralgorithmus in der Zeit .L ( s , V ∖ { s } , s ) s Θ ( 2 n n ) n O ( 2 n n 2 )
Oder doch ?!
Das standardmäßige Ganzzahl-RAM-Modell ermöglicht die zeitkonstante Manipulation von Ganzzahlen mit -Bits. Zumindest für arithmetische und logische Operationen müssen jedoch größere Ganzzahlen in wortgroße Blöcke aufgeteilt werden. (Andernfalls können seltsame Dinge passieren.) Gilt dies nicht auch für den Zugriff auf längere Speicheradressen? Wenn ein Algorithmus Superpolynomraum verwendet, ist es vernünftig anzunehmen, dass Speicherzugriffe nur konstante Zeit erfordern?
Insbesondere für den Bellman-Held-Karp-Algorithmus muss der Algorithmus die Beschreibung der Teilmenge in die Beschreibung der Teilmenge für jedes umwandeln , um auf die Notizentabelle zuzugreifen. Wenn die Teilmengen durch Ganzzahlen dargestellt werden, benötigen diese Ganzzahlen Bits und können daher nicht in konstanter Zeit bearbeitet werden. Wenn sie nicht durch ganze Zahlen dargestellt werden, kann ihre Darstellung nicht direkt als Index in der Memoization-Tabelle verwendet werden.X ∖ { v } v n
Also: Was ist die tatsächliche asymptotische Laufzeit des Bellman-Held-Karp-Algorithmus?