Complexité temporelle de l'algorithme Bellman-Held-Karp pour TSP, prise 2


16

Une question récente a discuté de l'algorithme de programmation dynamique désormais classique pour TSP, dû indépendamment à Bellman et Held-Karp . Il est universellement rapporté que l' algorithme s'exécute en temps . Cependant, comme l'un de mes étudiants l'a récemment souligné, ce temps d'exécution peut nécessiter un modèle de calcul excessivement puissant.O(2nn2)

Voici une brève description de l'algorithme. L'entrée consiste en un graphe orienté avec sommets et une fonction de longueur non négative . Pour tout sommet et , et tout sous-ensemble de sommets qui exclut et , soit la longueur du chemin hamiltonien le plus court de à dans le sous-graphique induit . L'algorithme de Bellman-Held-Karp est basé sur la récurrence suivante (ou comme les économistes et les théoriciens du contrôle aiment l'appeler «l'équation de Bellman»):G=(V,E): E R + s t X s t L ( s , X , t ) s t G [ X { s , t } ]n:ER+stXstL(s,X,t)stG[X{s,t}]

L(s,X,t)={(s,t)if X=minvX (L(s,X{v},v)+(v,t))otherwise

Pour tout sommet s , la durée de la visite optimale du vendeur itinérant est L(s,V{s},s) . Étant donné que le premier paramètre s est constant dans tous les appels récursifs, il existe Θ(2nn) différents sous-problèmes, et chaque sous-problème dépend d'au plus n autres. Ainsi, l'algorithme de programmation dynamique s'exécute en temps O(2nn2) .

Ou est-ce?!

Le modèle de RAM à nombres entiers standard permet la manipulation en temps constant d'entiers avec des bits O(logn) , mais au moins pour les opérations arithmétiques et logiques , les entiers plus grands doivent être divisés en morceaux de taille mot. (Sinon, des choses étranges peuvent se produire.) N'est-ce pas également le cas pour l'accès à des adresses mémoire plus longues? Si un algorithme utilise un espace superpolynomial, est-il raisonnable de supposer que les accès à la mémoire ne nécessitent qu'un temps constant?

Pour l'algorithme de Bellman-Held-Karp en particulier, l'algorithme doit transformer la description du sous-ensemble X en description du sous-ensemble X{v} , pour chaque v , afin d'accéder à la table de mémorisation. Si les sous-ensembles sont représentés par des entiers, ces entiers nécessitent n bits et ne peuvent donc pas être manipulés en temps constant; s'ils ne sont pas représentés par des nombres entiers, leur représentation ne peut pas être utilisée directement comme index dans la table de mémorisation.

Donc: Quel est le temps d'exécution asymptotique réel de l'algorithme Bellman-Held-Karp?


Votre lien "choses étranges" est rompu.
Tyson Williams,

J'ai corrigé le lien.
Jeffε

Réponses:


12

C'est moins une réponse mathématique qu'une réponse philosophique, mais je préfère penser à un modèle RAM qui permet une manipulation en temps constant d'entiers avec un nombre B de bits inconnu mais au moins aussi grand que , où S est la quantité d'espace requise par l'algorithme. Parce que, si les entiers n'étaient pas si gros, comment pourriez-vous même adresser votre mémoire? Pour les algorithmes polynomiaux de temps et d'espace, c'est la même chose que les bits O (log n), mais pour les algorithmes d'espace exponentiels, cela évite le problème.Journal2S

Bien sûr, si S dépasse la quantité de mémoire que vous avez réellement, votre algorithme ne fonctionnera pas du tout. Ou, il s'exécutera en paginant des informations dans et hors de la mémoire et vous devriez utiliser un modèle de hiérarchie de mémoire au lieu du modèle de RAM.


Je suis habitué à l'idée que le modèle de machine devrait dépendre de la taille d'entrée , mais il y a quelque chose d'un peu bizarre à laisser le modèle de machine dépendre de l'algorithme. Voulez-vous vraiment laisser votre machine résoudre tout problème dans PSPACE en temps constant, tant que vous utilisez déjà l'espace exponentiel? n
Jeffε

3
Pour moi, il s'agit moins de faire varier le modèle en fonction de l'algorithme, et plus d'avoir un modèle fixe mais pas capable d'exécuter tous les algorithmes (car il manque d'espace). Pour moi, cela ne semble pas si différent des vrais ordinateurs.
David Eppstein

1
Je ne suis pas convaincu par la réponse de David. Il y a deux problèmes ici. L'un est théorique, l'autre pratique. Dans le cadre théorique, il est plus naturel d'être précis sur le modèle et d'analyser le temps de fonctionnement de manière appropriée. Dans le cadre pratique, il n'est pas facile de savoir si l'on manquerait réellement de mémoire sur une instance particulière en raison des diverses optimisations que l'on peut faire (et faire une mémorisation partielle, etc.), cependant, lors de la mise en œuvre de l'algorithme, nous devrons traiter comment nous stockons les ensembles et indexons en eux. Le modèle ci-dessus n'aide pas à cet égard.
Chandra Chekuri

8

Il y a une discussion de cette question dans le livre récent de Fedor V. Fomin et Dieter Kratsch " Exact Exponential Algorithms " où ils spécifient le temps d'exécution dans le modèle RAM à coût unitaire et le modèle RAM à coût journalier ( - la distance maximale entre les villes et f ( n ) = O ( g ( n ) ) si f ( n ) = O ( g ( n ) p o l y ( n ) ) ):WF(n)=O(g(n))F(n)=O(g(n)poly(n))

et 2 n logW n O ( 1 ) (note, 2 n logW n O ( 1 ) O ( 2 n )), respectivement.O(2n)2nJournalWnO(1)2nJournalWnO(1)O(2n)


1
Ils esquivent donc le problème en cachant le facteur polynomial. Je veux savoir quel est le facteur polynomial!
Jeffε

3
Ils supposent que le facteur polynomial est (voir le lien dans mon commentaire). n2
Oleksandr Bondarenko
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.