Nachtrag unten, um die k (k-1) -Begriffe zu verdeutlichen k(k−1):
Wenn Sie also die Terme im Ausdruck untersuchen, können Sie sich (als Analogie) vorstellen Term eine Aufzählung aller binären Zeichenfolgen ist, die 1 enthalten und an erster Stelle eine 1 haben. Mit anderen Worten, wir lassen jede Position in der Binärzeichenfolge die Wahl darstellen, ob eine bestimmte der Städte im Problem in der genauen Teilmenge liegt, die wir zu diesem Zeitpunkt betrachten. Für 5 Städte entspricht 10101 also der Teilmenge {1,3,5}.(n−1k)kn
Um also über alle Teilmengen von {1, ..., } zu berechnen , zählen wir einfach durch jede binäre Teilmenge (dh durch binäre Zeichenfolgen) der Größe = 2 (dh binäre Zeichenfolgen der Größe , die zwei enthalten) Größe = 3, dann Größe = 4, ... dann Größe = n. (Beachten Sie, dass die Teilmenge size = 1 nur die erste Stadt enthalten darf und es daher irrelevant ist, ihre Teilentfernung zu berechnen, da die Entfernung von 1 -> allen anderen Städten in der Teilmenge -> 1 genau 0 ist.)nn
Bei jeder Teilmenge mit Städten müssen bis zu kandidatenoptimale Teilpfade berücksichtigt werden. Insbesondere könnte der optimale Gesamtpfad möglicherweise durch die gegebene Teilmenge verlaufen und in einer der Städte enden , mit Ausnahme der ersten Stadt. Dann berechnen wir für jeden solchen Kandidaten-Unterpfad die optimale Tour bis zu diesem Punkt als Minimum eines der vorherigen Unterpfade der Größe = plus der Entfernung von der Terminalstadt für diesen Unterpfad zum Terminalstadt für den aktuellen Kandidaten-Unterpfad. Dies ergibt solche Vergleiche, die wir machen müssen. Die Diskrepanz zwischen meinem Term und demkk−1k−1k−1(k−1)(k−2)(k−1)(k−2)k(k−1)Der Begriff in der verknüpften Analyse ist ein Notationsunterschied (ich würde angesichts meiner Definition von über einen anderen Bereich summieren als sie). Zumindest sollte es jedoch die Komplexität dieses Terms in quadratischer Ordnung veranschaulichen.k
Wie interessant - ich habe gerade vor ein paar Minuten genau diesen Algorithmus in C ++ codiert. (Also vergib die Tangente von der reinen Theorie in eine kleine praktische Diskussion. :))
Es kostet Zeit und Raum - zumindest unter meiner Implementierung. In der Praxis werden Ihre Platzanforderungen jedoch viel schmerzhafter als die Zeitanforderungen, wenn sie so schnell wachsen. Auf meinem PC (mit 4 GB RAM) kann ich beispielsweise Instanzen mit bis zu 24 Städten lösen - mehr als das, und mir geht der Speicher aus.O(2nn2)O(2nn)
Natürlich könnte ich nur ein schlechter Programmierer sein, und Sie könnten es in der Praxis besser machen als ich. :) :)
Bearbeiten: Ein bisschen mehr Details zu einem Detail Ihrer Frage: Der Term ergibt sich aus der Tatsache, dass Sie im schlimmsten Fall den partiellen, optimalen Abstand zu den vorherigen Teilmengen berechnen müssen (es gibt höchstens von ihnen; beachten Sie, dass in der von Ihnen verknüpften Analyse über mit der aktuellen summiert wird . Dies erfordert wiederum im schlimmsten Fall -Vergleiche mit Teilmengen der Größe für insgesamt .k(k−1)nknO(k)k−1O(k2)
Wenn meine Erklärung nicht klar genug war, finden Sie hier einige nette Vorlesungsunterlagen von Vazirani ( PDF ). Scrollen Sie nach unten zu S. 188, um eine Diskussion über TSP zu erhalten, einschließlich einer Analyse von Held-Karp.
Hauptnotiz
Es ist wichtig zu beachten, dass wir nicht
"Entfernung des optimalen Pfades für
combination of k cities
",sondern
"Entfernung des optimalen Pfads für
combination of k cities
UND fürend-point city from this combination
" berechnen und speichern .Das Verständnis hilft bei der Bedeutung der ersten beiden Multiplikatoren in der folgenden Formel.
Erste Phase
Die Anzahl der Operationen in der ersten Phase ist:∑k>=2(n−1k−1)choose city combinationof size = k−1⋅(k−1)choose city to be the lastfrom k−1 citiesin chosen combination⋅((n−1)−(k−1))choose citythat is not in chosen combinationto add to path
Fehlende hochgestellte Summe bedeutetk=n−1
(n−1n−2)⋅(n−2)⋅1 n−1
for all k>=2 that is valid for binomial coefficient
. Der letzte gültige Nicht-Null-Term der Summe gilt also für Dies bedeutet, dass unsere Summe nicht die letzten Auswahlmöglichkeiten erfasst der Stadt mit der ersten Stadt zu verbinden. Es gibt Städte, um eine Verbindung zur ersten Stadt herzustellen. Schließlich werden wir diesen Begriff zur Summe hinzufügen.Lassen Sie die Formel in eine Form umwandeln, die Sie auch auf der Wikipedia-Seite von Held-Karp angeben .
Zweite Phase
In der zweiten Phase wird der optimale Pfad durch Markierungen wiederhergestellt, die wir in der ersten Phase gleichzeitig mit der Berechnung der Entfernungen vorgenommen haben.
Für jeden optimalen Pfad "für
combination of k cities
UND fürend-point city from this combination
" haben wir die vorletzte Stadt gespeichert.Um den optimalen Pfad zurückzuverfolgen, müssen wir eine Datenstruktur anfordern, um die vorletzte Stadt "für
∑k>=2n−1k=(n)(n−1)2−1
combination of k cities
UND fürend-point city from this combination
" zurückzugeben. Diese Datenstruktur muss also so etwas wie seinMap<combination of k cities, Map<last city, second-to-last city>>
. Als Indexcombination of k cities
können wir zum Beispiel verwendenbinary_string[city id]=1 if city id is in combination
. Wir müssen uns also alle Elemente von ansehencombination of k cities
, um die Kombination zu identifizieren und unsere Datenstruktur zu indizieren. Dies gibt uns die Anzahl der Operationen für die zweite Phase:quelle