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.
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»):ℓ : E → R + s t X s t L ( s , X , t ) s t G [ X ∪ { s , t } ]
Pour tout sommet , la durée de la visite optimale du vendeur itinérant est . Étant donné que le premier paramètre est constant dans tous les appels récursifs, il existe différents sous-problèmes, et chaque sous-problème dépend d'au plus autres. Ainsi, l'algorithme de programmation dynamique s'exécute en temps .
Ou est-ce?!
Le modèle de RAM à nombres entiers standard permet la manipulation en temps constant d'entiers avec des bits , 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 en description du sous-ensemble , pour chaque , afin d'accéder à la table de mémorisation. Si les sous-ensembles sont représentés par des entiers, ces entiers nécessitent 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?