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.