Complessità temporale dell'algoritmo Bellman-Held-Karp per TSP, prendere 2


16

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.O(2nn2)

Ecco una breve descrizione dell'algoritmo. L'ingresso è costituito da un grafico diretto G=(V,E) con n vertici e una funzione di lunghezza non negativa :ER+ . 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 } ]stXstL(s,X,t)stG[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"):

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

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) .sL(s,V{s},s)sΘ(2nn)nO(2nn2)

O lo fa ?!

Il modello RAM intero standard consente la manipolazione a tempo costante di numeri interi con bit O(logn) , 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.XX{v}vn

Quindi: qual è l'attuale tempo di esecuzione asintotico dell'algoritmo Bellman-Held-Karp?


Il link "cose ​​strane" è interrotto.
Tyson Williams,

Ho corretto il collegamento.
Jeffε,

Risposte:


12

Questa è meno una risposta matematica che filosofica, ma preferisco pensare a un modello RAM che consenta la manipolazione di numeri interi a tempo costante con un numero B di bit sconosciuto ma almeno grande quanto il , dove S è la quantità di spazio richiesta dall'algoritmo. Perché, se gli interi non fossero così grandi, come potresti anche indirizzare la tua memoria? Per gli algoritmi polinomiali di tempo e spazio è lo stesso dei bit O (log n), ma per gli algoritmi di spazio esponenziale evita il problema.log2S

Ovviamente, se S supera la quantità di memoria che hai effettivamente, il tuo algoritmo non funzionerà affatto. In alternativa, verrà eseguito il paging delle informazioni all'interno e all'esterno della memoria e si dovrebbe utilizzare un modello di gerarchia di memoria anziché il modello RAM.


Sono abituato all'idea che il modello di macchina dovrebbe dipendere dalla dimensione di input , ma c'è qualcosa di un po 'strano nel lasciare che il modello di macchina dipenda dall'algoritmo. Vuoi davvero lasciare che la tua macchina risolva qualsiasi problema in PSPACE in tempo costante, purché tu stia già utilizzando lo spazio esponenziale? n
Jeffε

3
Per me è meno una questione di far variare il modello a seconda dell'algoritmo, e più una questione di avere un modello fisso ma non in grado di eseguire tutti gli algoritmi (perché esaurisce lo spazio). Per me non sembra così diverso dai computer reali.
David Eppstein,

1
Non sono convinto dalla risposta di David. Ci sono due problemi qui. Uno è teorico, l'altro pratico. Nell'ambito teorico è più naturale essere precisi sul modello e analizzare il tempo di esecuzione in modo appropriato. Nell'impostazione pratica non è facile sapere se si esaurirebbe effettivamente la memoria in una particolare istanza a causa delle varie ottimizzazioni che si possono fare (e fare parzializzazione parziale ecc.), Tuttavia, quando si implementa l'algoritmo che dovremo affrontare come archiviamo i set e li indicizziamo. Il modello sopra non aiuta a questo proposito.
Chandra Chekuri,

8

C'è una discussione di questo problema nel recente libro di Fedor V. Fomin e Dieter Kratsch " Exact Exponential Algorithms " in cui specificano il tempo di esecuzione nel modello RAM a costo unitario e il modello RAM a costo di registro ( - la distanza massima tra le città ef ( n ) = O ( g ( n ) ) se f ( n ) = O ( g ( n ) p o l y ( n ) ) ):Wf(n)=O(g(n))f(n)=O(g(n)poly(n))

e 2 n logW n O ( 1 ) (nota, 2 n logW n O ( 1 ) O ( 2 n )), rispettivamente.O(2n)2nlogWnO(1)2nlogWnO(1)O(2n)


1
Quindi evitano il problema nascondendo il fattore polinomiale. Voglio sapere qual è il fattore polinomiale!
Jeffε

3
Presumono che il fattore polinomiale sia (vedi il link nel mio commento). n2
Oleksandr Bondarenko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.