Problemi risolvibili controintuitivamente nella pratica?


21

Di recente, ho vissuto la dolorosa esperienza divertente di spiegare in modo informale il concetto di complessità computazionale a un giovane programmatore autodidatta di talento, che non aveva mai seguito un corso formale di algoritmi o complessità. Non sorprende che molte nozioni all'inizio sembrassero strane ma avevano senso con alcuni esempi (PTIME, intrattabilità, incomputabilità) , mentre altre sembrano diventare più naturali (classificazione dei problemi tramite riduzioni, tempo e spazio come risorse, analisi asintotica) . Tutto stava andando per il meglio finché non ho ammesso per sbaglio quel SATpuò essere risolto efficacemente * in pratica ... E proprio così, li ho persi. Non importava quanto convincentemente stavo cercando di discutere per la teoria, il ragazzo era convinto che fosse tutta una matematica di merda artificiale che non gli sarebbe importato. Bene...

¯ \ _ (ツ) _ / ¯

No, non avevo il cuore spezzato, né mi importava davvero di quello che pensava, non è questo il punto di questa domanda. La nostra conversazione mi ha fatto pensare a una domanda diversa,

Quanto ne so davvero di problemi teoricamente irrisolvibili (complessità del tempo superpolinomiale) ma praticamente risolvibili (tramite euristica, approssimazioni, solutori SAT, ecc.)?

Ho capito, non molto. So che ci sono alcuni solutori SAT molto efficienti che risolvono in modo efficiente casi enormi, che Simplex funziona alla grande in pratica e forse qualche altro problema o algoritmo. Potete aiutarmi a dipingere un quadro più completo? Quali problemi noti o addirittura classi di problemi rientrano in questa categoria?

TL; DR: Quali sono i problemi che sono risolvibili in pratica controintuitivamente? Esiste una risorsa (aggiornata) per saperne di più? Abbiamo una caratterizzazione per loro? E, infine, come domanda di discussione generale, non dovremmo?

EDIT # 1: Nel tentativo di rispondere alla mia ultima domanda di discussione su una simile caratterizzazione , sono stato introdotto all'analisi semplificata degli algoritmi, un concetto introdotto da Daniel Spielman e Shang-Hua Teng in [1] che si interpola continuamente tra il caso peggiore e analisi di casi medi di algoritmi. Non è esattamente la caratterizzazione discussa sopra, ma cattura lo stesso concetto e l'ho trovato interessante.

[1] Spielman, Daniel A. e Shang-Hua Teng. "Analisi uniforme degli algoritmi: perché l'algoritmo simplex richiede solitamente tempo polinomiale." Journal of the ACM (JACM) 51, n. 3 (2004): 385-463.


6
Cosa intendevi affermando che SAT può essere risolto efficacemente in pratica? Perché il tuo amico si affida alla sicurezza su Internet? Presumibilmente non ci sono problemi difficili nella pratica? La robustezza è uno dei principali vantaggi della poli-volta / solvibilità efficiente.
Chandra Chekuri,

6
L'isomorfismo grafico è un candidato naturale.
DW,

2
Ehi, @ChandraChekuri, intendevo dire che praticamente i solutori di SAT possono rispondere alle istanze di SAT con milioni di variabili e clausole. O almeno, è quello che pensavo fosse il caso. Non sono sicuro di aver capito cosa intendi per "sicurezza su Internet"? Non sto discutendo contro il formalismo, sono interessato a problemi che sono in teoria intrattabili, ma per tutti gli scopi pratici (forse a causa di una approssimazione decente, forse a causa della struttura speciale delle istanze del mondo reale, ecc.) Sono considerati " trattabile".
Konstantinos Koiliaris,

1
@KonstantinosKoiliaris Penso che il punto sia che la sicurezza di tutti i tipi di protocolli crittografici si basa su (di solito anche qualcosa di molto più forte), e come tale fornisce esempi abbondanti di problemi di routine che sono estremamente difficili per i solutori di SAT ( o lo speriamo molto, comunque). PNP
Emil Jeřábek sostiene Monica

2
In questa ottica, potrebbe essere utile verificare la complessità generica. In effetti, si scopre che il problema dell'arresto è quasi sempre risolvibile in tempi polinomiali, come lo è ad esempio SAT (in effetti, SAT ha una garanzia più forte). Ciò che si intende per "quasi sempre" è che il problema ammette un algoritmo in modo tale che la proporzione di input per cui l'algoritmo si arresta (e genera la risposta corretta, ovviamente) nel tempo polinomiale va a 1 all'aumentare della lunghezza dell'input.
Guillermo Angeris,

Risposte:


17
  • Le istanze SAT altamente strutturate (anche su milioni di variabili) possono spesso essere risolte in pratica. Tuttavia, sono ancora aperte istanze SAT casuali vicino alla soglia di soddisfacibilità con alcune centinaia di variabili (il che significa, anche in pratica, se generi una cosa del genere che potresti non sapere mai nella vita dell'universo se la cosa che hai generato è soddisfacente o meno utilizzando i solutori SAT attuali). Potresti essere interessato a questa domanda correlata e alle sue risposte.

  • I cercatori di cricche sono anche sorprendentemente buoni "in pratica"

  • La programmazione di interi e la programmazione di interi lineari misti (con alcune variabili razionali e alcune di interi) sono al centro di interi dipartimenti di ricerca operativa e spesso possono (ma non sempre) essere risolti in pratica

  • Da quello che ho capito, molti problemi -Complete che sorgono nella verifica spesso possono essere risolti in pratica, ma "in pratica" di solito implica "sulle istanze altamente strutturati". (Al contrario, non sappiamo ancora chi vince per casi piuttosto piccoli del gioco di Go, che è un altro problema completo di P S P A C E ).PSPACEPSPUNCE

  • EXPSPUNCE

  • Come già sottolineato nei commenti di DW, l'isomorfismo grafico può praticamente essere risolto in pratica. È molto difficile imbattersi in moderni software GI come nauty, beatitudine, impertinente, ecc.


Grazie Giosuè, te lo sto dando per i problemi più interessanti / ampi suggeriti.
Konstantinos Koiliaris,

1
I cercatori di cricche non sono sempre buoni nella pratica. Dipende davvero dal grafico. E il tuo link sembra parlare solo di grafici casuali.
Peter Shor,

Espandere un po 'di IG: i solutori di GI più all'avanguardia di AFAIK come quelli menzionati usano un approccio di individualizzazione-perfezionamento ottimizzato (dove il perfezionamento è il raffinamento del colore, che già funziona come un test di GI quasilineare per quasi tutti i grafici) , ma Neuen e Schweitzer hanno recentemente mostrato limiti inferiori esponenziali per questo metodo e costruito istanze difficili (praticamente).
Watercrystal

1
@JoshuaGrochow: Sì, sono d'accordo con te su questo. Volevo solo ampliare la parte "controintuitiva" della domanda poiché OP ha specificamente menzionato che Simplex si comporta molto bene nella pratica anche se sono noti limiti inferiori esponenziali e qui abbiamo la stessa situazione.
Watercrystal,

1
Ho solo esperienza con la congettura di Keller , in cui i grafici (certamente grandi) hanno ostacolato molti algoritmi di ricerca della cricca.
Peter Shor,

14

Il sistema di tipo Hindley-Milner è utilizzato nei linguaggi di programmazione funzionale (Haskell, SML, OCaml). L'algoritmo di inferenza del tipo è quasi lineare nella pratica e funziona incredibilmente bene, ma è noto per essere DEXPTIME-completo!

Un commento generale: non sorprende che la complessità del momento peggiore non sia necessariamente un'ottima misura delle prestazioni pratiche di un algoritmo. Tuttavia, dire che la discrepanza tra teoria e pratica rende inutile la teoria della complessità è come dire che i numeri naturali sono uno spreco perché usiamo solo una quantità minuscola di tutti i numeri disponibili. Un famoso filosofo una volta disse che "L'esperienza senza teoria è cieca, ma la teoria senza esperienza è un semplice gioco intellettuale".


FPL

6

Altri esempi, principalmente da linguaggi di programmazione:

  1. k-CFA (k-Control Flow Analysis) è completo EXPTIME (Van Horn & Mairson 2008), ma comunque lo eseguono ottimizzando l'intero programma come compilatori come MLton. I tempi di compilazione sono lunghi, ma raramente disastrosi.
  2. La risoluzione del sovraccarico (dinamico) è generalmente NP-completa (Palsberg 2012). Ma poi raramente è un problema nel mondo reale.
  3. K
  4. La risoluzione SMT è generalmente NP-completa, ma i solutori SMT commerciali (come Z3 e CVC4) sono in genere piuttosto performanti. Non lavoro direttamente con i solutori SMT, ma ho usato Z3 indirettamente da Liquid Haskell e Dafny, e i tempi di controllo sembrano OK.
  5. Il problema decisionale per l'aritmetica di Presburger è davvero complesso (Fischer & Rabin 1974), ma l'algoritmo decisionale di Bill Pugh, il test Omega (Pugh 1991), funziona generalmente entro un tempo polinomiale di basso ordine.

Onn


Riferimenti:

[1] David Van Horn e Harry G. Mairson. 2008. Decidere che kCFA è completo per EXPTIME. In Atti della 13a Conferenza internazionale ACM SIGPLAN sulla programmazione funzionale (ICFP '08). ACM, New York, NY, USA, 275-282.

[2] http://web.cs.ucla.edu/~palsberg/paper/dedicated-to-kozen12.pdf

[3] MJ Fischer e MO Rabin. 1974. COMPLESSITÀ SUPER-ESPONENZIALE DELL'ARITMETICA DEL PRESBURGER. Rapporto tecnico. Massachusetts Institute of Technology, Cambridge, MA, USA.

[4] William Pugh. 1991. Il test Omega: un algoritmo di programmazione di numeri interi rapido e pratico per l'analisi delle dipendenze. Negli atti della conferenza ACM / IEEE del 1991 sul supercomputer (Supercomputing '91). ACM, New York, NY, USA, 4-13.


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.