Una recente domanda ha discusso dell'algoritmo di programmazione dinamica ormai classico per TSP, dovuto indipendentemente a Bellman e Held-Karp . L'algoritmo è universalmente segnalato per essere eseguito in tempo . Tuttavia, come ha recentemente sottolineato uno dei miei studenti, questo tempo di esecuzione potrebbe richiedere un modello di calcolo irragionevolmente potente.
Ecco una breve descrizione dell'algoritmo. L'ingresso è costituito da un grafico diretto con vertici e una funzione di lunghezza non negativa . Per tutti i vertici e , e qualsiasi sottoinsieme di vertici che esclude e , sia indicare la lunghezza del percorso hamiltoniano più breve da a nel sottografo indottot X s t L ( s , X , t ) s t G [ X ∪ { s , t } ]. L'algoritmo Bellman-Held-Karp si basa sulla seguente ricorrenza (o come gli economisti e i teorici del controllo amano chiamarlo "equazione di Bellman"):
Per ogni vertice , la lunghezza ottimale viaggiare giro venditore è . Poiché il primo parametro è costante in tutte le chiamate ricorsive, ci sono sottoproblemi diversi e ogni sottoproblema dipende al massimo da n altri. Pertanto, l'algoritmo di programmazione dinamica viene eseguito nel tempo O (2 ^ nn ^ 2) .
O lo fa ?!
Il modello RAM intero standard consente la manipolazione a tempo costante di numeri interi con bit , ma almeno per operazioni aritmetiche e logiche , i numeri interi più grandi devono essere suddivisi in blocchi di dimensioni di parole. (Altrimenti, possono succedere cose strane .) Ciò non vale anche per l'accesso a indirizzi di memoria più lunghi? Se un algoritmo utilizza lo spazio superpolinomiale, è ragionevole supporre che gli accessi alla memoria richiedano solo un tempo costante?
Per l'algoritmo Bellman-Held-Karp in particolare, l'algoritmo deve trasformare la descrizione del sottoinsieme nella descrizione del sottoinsieme , per ogni , per accedere alla tabella di memoization. Se i sottoinsiemi sono rappresentati da numeri interi, questi numeri interi richiedono bit e quindi non possono essere manipolati in tempo costante; se non sono rappresentati da numeri interi, la loro rappresentazione non può essere utilizzata direttamente come indice nella tabella di memoization.
Quindi: qual è l'attuale tempo di esecuzione asintotico dell'algoritmo Bellman-Held-Karp?