Quanto sono comuni gli algoritmi del tempo esponenziale in caso generico nel software di produzione?


11

So che gli algoritmi del tempo esponenziale dovrebbero essere generalmente evitati ma a volte sono necessari. Un caso è il commesso viaggiatore. Quanto sono comuni tali algoritmi nel software di produzione? Questi casi sono in genere necessari o sono il risultato di lavori urgenti? Capisco che molti possono essere risolti con una buona euristica. Cosa si fa di solito con quelli che non possono?


1
La mia impressione è che per cose come il problema del venditore ambulante, si elimina l'algoritmo del tempo esponenziale e si
abbina

Molti problemi vengono risolti con algoritmi "esponenziali". (TSP, CDS, ILP, ecc.) È solo che gli algoritmi esponenziali hanno una buona euristica, quindi funzionano ragionevolmente con molti dati del mondo reale. Una domanda migliore potrebbe forse essere: "Quanto sono comuni gli algoritmi a tempo esponenziale in caso generico nel software di produzione?"
user541686

Aggiustata la domanda
ingegnere mondiale

Il commesso viaggiatore è n !, non esponenziale.
user281377

1
@ user281377: È anche in O (n ^ 2 2 ^ n) quindi sì, è un problema esponenziale. Questo è anche chiaro perché può essere mappato su SAT in poly time che può essere risolto in 2 ^ n volta - che funziona per tutti i problemi NP.
Raffaello

Risposte:


7

Qualcosa che non nel software di produzione ma fatto nel software di produzione è la verifica formale . Probabilmente non è adottato per la maggior parte dei software per i clienti, ma ottiene traccia per sistemi e driver integrati, vale a dire per hardware e software la cui correttezza è importante (e trattabile).

Quei problemi di verifica che sono effettivamente calcolabili (barriera # 1) sono spesso EXPTIME -hard, nei casi più fortunati si ottengono problemi completi di PSPACE (barriera # 2). Entrambe le classi sono (si sospetta siano) più difficili dei problemi NP-completi, che sono facili in confronto. Si ottengono facilmente anche problemi doppiamente esponenziali.

In questi casi, l'euristica (nel senso del risultato finale) non lo taglia poiché hai bisogno di risultati definiti; quindi hai bisogno di grandi macchine e tempo. Esistono euristiche (nel senso di una selezione alternativa) che spesso portano a tempi di esecuzione più brevi (ad esempio esplorazione intelligente dello spazio di ricerca quando vengono cercati stati di errore), ma nel peggiore dei casi l'attesa è tutto ciò che si può fare. Oppure puoi fare una prova su carta e penna e farla controllare dalle macchine , che è più semplice dal punto di vista computazionale.


5

L'algoritmo comunemente usato con complessità esponenziale nel caso peggiore è il metodo simplex usato nella programmazione lineare . Tuttavia, ciò che è la complessità dei casi generici di quel metodo è un problema aperto. Con alcune ipotesi specifiche è polinomiale.


5

Gli interpreti del linguaggio di programmazione sono peggiori del tempo esponenziale (nella lunghezza del loro input, cioè nella lunghezza del programma che stanno interpretando), e sono abbastanza comuni. Un altro esempio è la dimostrazione automatica del teorema / risoluzione dei vincoli / risoluzione sat / programmazione lineare intera. E ancora un altro esempio è la differenziazione simbolica come implementata ad esempio in Maple / Mathematica (sebbene sia possibile fare una differenziazione simbolica in tempo lineare se è permesso condividere sottoespressioni tra nodi).


1

Vorrei fare l'esempio del problema del commesso viaggiatore. Ci ho lavorato alcune volte.

Ci sono alcune volte in cui sono stato in un team che ha scritto una soluzione per il problema del commesso viaggiatore, ma con alcuni parametri in più. Ad esempio, potrebbe essere un negozio con una flotta di tecnici e ingegneri ciascuno con un set di abilità unico. Le destinazioni arrivano ogni giorno sotto forma di richieste di servizio. Tutti i programmi sono in produzione sebbene abbiano subito modifiche e manutenzioni sin dalla loro scrittura originale.

Funzionavano così. Ogni ingegnere riceverebbe un elenco di cose da riparare su un dispositivo portatile ogni giorno. Al termine di ogni attività di servizio, dovrebbero chiudere il caso. I casi lasciati fuori si uniscono ai casi per essere programmati per il giorno seguente con priorità leggermente superiore poiché da allora il cliente avrebbe espresso un po 'di insoddisfazione. C'erano molte ragioni per cui un ingegnere non avrebbe assistito a un caso. I problemi di traffico erano più comuni.

Quanto sono comuni? Almeno comune quanto il numero di richieste di assistenza post vendita provenienti dai clienti. Senza il servizio post vendita, ad esempio, fidelizzare i clienti sarà difficile e acquisirne di nuovi sarà più difficile.

Con molti negozi basati sul web come Amazon e altri negozi di libri e altri negozi di questo tipo che vanno bene nel mondo degli affari, penso che il commesso viaggiatore sia più comune di quanto non fosse prima. Inoltre, potrebbero esserci molte varianti del problema del venditore ambulante insegnate nei libri di testo.


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.