On Amazon.it: https://www.amazon.it/Complete-Concordances-James-Bible-Azzur/dp/B0F1V2T1GJ/


NP-Completo - Wikipedia

NP-Completo

Da Wikipedia, l'enciclopedia libera.

Traduci questa pagina Questa voce riguardante un argomento di informatica non è ancora stata tradotta completamente dalla lingua inglese. Terminala o riscrivila tu.

Nota: il testo da tradurre potrebbe essere nascosto: vai in modifica per visualizzarlo.

Niente traduzioni automatiche! - No Babelfish please!


Questa pagina fornisce una descrizione tecnica dei problemi NP-completi. Per una introduzione divulgativa, vedi Classi di complessità P ed NP.

Indice

[modifica] Introduzione

Nella Teoria della Complessità i problemi NP-completi sono i più difficili problemi in NP ("problemi non deterministici a tempo polinomiale") nel senso che quasi sicuramente non appartengono a P. La ragione è che, se si potesse trovare un algoritmo in grado di risolvere velocemente (cioè in tempo polinomiale) un qualsiasi problema NP-completo, allora si potrebbe usarlo per risolvere velocemente tutti i problemi NP.

La classe di complessità che contiene tutti i problemi NP-completi è spesso indicata con NP-C.

Un esempio di problema NP-completo è il problema delle somme parziali, cioè: dato un insieme finito di numeri interi, determinare se esiste un sottoinsieme tale che la somma dei suoi elementi sia zero. È evidente che è facile verificare velocemente se un sottoinsieme è o meno una soluzione del problema, ma non è noto alcun metodo per trovare una soluzione che sia sensibilmente più veloce di provare tutti i sottoinsiemi.

[modifica] Definizione formale di NP-completezza

Un problema π è NP completo se \pi \in NP e se  \forall    \pi^', \pi^' \le \pi

Ovvero se π è il piu difficile problema in NP.

In altre parole possiamo dire che un linguaggio L è NP-completo se i seguenti enunciati sono veri:

  1. L è in NP
  2. Per ogni Linguaggio L' in NP esiste una riduzione polinomiale di L' a L

questa è detta in particolare Karp-completezza, si può dire sia un caso particolare della Cook-completezza che definisce un problema NP-completo se, dato un oracolo per il problema P, ovvero un meccanismo in grado di rispondere ad una qualsiasi domanda sull'appartenenza di una stringa a P in un unità di tempo, è possiblile riconoscere in tempo polinomiale un qualsiasi linguaggio in NP. La definizione di cook-completezza risulta essere più generale tanto da includere i complementi dei problemi NP-completi nella classe dei problemi NP-completi.

"Riducibile" qui significa che per ogni problema L, c'è una riduzione polinomiale, un algoritmo deterministico che trasforma istanze lL in istanze cC, così che la risposta a c è sì se e solo se la risposta a l è sì. Per provare che un problema NP A è infatti un problema NP-complete è sufficiente mostrare che un problema NP-complete già conosciuto si riduce a A.

Una conseguenza di questa definizione è che se avessimo un algoritmo di tempo polinomiale per C, potremmo risolvere tutti i problemi in NP in tempo polinomiale.

Questa definizione è stata data da Stephen Cook in una pubblicazione intitolata 'The complexity of theorem-proving procedures' alle pagine 151-158 di Proceedings of the 3rd Annual ACM Symposium on Theory of Computing nel 1971, anche se il termine "NP-complete" non appare da nessuna parte nel suo scritto. A quella conferenza di computer science, ci fu un acceso dibattito tra gli scienziati dell'informazione sul tema se problemi NP-completi potessero essere risolti in tempo polinomiale con una macchina di Turing deterministica. John Hopcroft convinse tutti i presenti alla conferenza ad accantonare questa questione per riprenderla successivamete, visto che nessuno aveva prove formali per dimostrare quello che diceva. Questa questione è nota come il problema se P=NP.

Nessuno ancora è stato capace di provare se problemi NP-completi sono infatti risolvibili in tempo polinomiale, facendo di questo uno dei più grandi problemi della matematica. Comunque, c'è il forte sospetto fra gli scienziati che questi problemi non possono essere risolti in tempo polinomiale; secondo una votazione informale nel 2002 fra 100 ricercatori, 61 di loro dissero che P≠NP,, a confronto che soli 9 che dissero P=NP. Il Clay Mathematics Institute a Cambridge, MA offre la ricompensa di un milione di dollari a chiunque riesca a fornire una dimostrazione che P=NP o che P≠NP.

All'inizio sembra abbastanza sorprendente che problemi NP-completi debbano perfino esistere, ma nel celebre teorema di Cook-Levin (dimostrato indipendentemente da Leonid Levin), Cook provò che il problema della soddisfattibilità booleana è NP-completo. Nel 1972 Richard Karp provò che alcuni altri problemi erano lo stesso NP-completi, quindi c'è una classe di problemi NP-completi (oltre il problema della soddisfattibilità booleana). Dal risultato originale di Cook, migliaia di altri problemi sono stati mostrati essere NP-completi; molti di questi problemi sono riportati nel libro di Garey e Johnson's 1979 Computers and Intractability: A Guide to NP-Completeness.


Un problema che soddisfa la condizione 2 ma non necessariamente la condizione 1 è detto NP-hard. Informalmente, un problema NP-hard è "almeno difficile come" qualsiasi problema NP-completo, e forse anche più difficile. Per esempio, scegliere la mossa perfetta in certi giochi da tavolo di lato arbitrario è NP-hard o perfino strettamente più difficile di problemi NP-hard.

[modifica] Esempi di problemi

Un esempio interessante è il problema di isomorfismo di grafi, il problema della teoria dei grafi che consiste nel determinare se esiste un isomorfismo tra due grafi. Due grafi sono isomorfi se uno può essere trasformato nell'altro semplicemente rinominando i suoi vertici. Consideriamo questi due problemi:

  • Isomorfismo di grafi: il grafo G1 è isomorfo al grafo G2?
  • Isomorfismo di sottografi: il grafo G1 è isomorfo ad un sottografo del grafo G2?

Il problema dell'isomorfismo di sottografi è NP-completo. Si sospetta che il problema dell'isomorfismo di grafi non sia né PNP-completo, sebbene è evidentemente in NP. Questo è un esempio di un problema che si ritiene computazionalmente difficile, ma che si ritiene non sia NP-completo.

Il metodo più facile per dimostrare che un nuovo problema è NP-completo è prima di tutto dimostrare che appartiene alla classe NP, e quindi trovare una riduzione da un problema che si sa essere NP-completo al nuovo problema (nella sua forma decisionale).


Per un elenco più completo di problemi NP-completi vedi Lista problemi NP-Completi.

Segue uno schema di alcuni problemi e delle riduzioni tipicamente utilizzate per provarne la NP-completezza. Nello schema una freccia da un problema ad un altro indica la direzione della riduzione.

Immagine:Relative NPC chart.PNG


Di solito vi son piccole differenze tra problemi in P e problemi NP-completi. Per esempio il 3-SAT, una riduzione del problema di soddisfacibilità booleano, rimane NP-Completo, nonostante il problema 2SAT, che è leggermente meno stringente sia in P.


[modifica] Soluzioni imperfette

Fino ad ora, tutti gli algoritmi conosciuti per problemi NP-Completi necessitano di un tempo superpolinomiale nella dimensione dell'input. L'esistenza di algoritmi più veloci è sconosciuta. Quindi, per risolvere un problema NP-Completo di dimensioni non banali, generalmente vengono utilizzati i seguenti approcci:

  • Algoritmo di approssimazione: Un algoritmo che trova velocemente una soluzione sub-ottimale che si trova in un intorno (noto) di quella ottimale.
  • Algoritmo probabilistico: Un algoritmo il cui tempo medio di esecuzione per una distribuzione data del problema è provata essere buona—idealmente, uno che assegna una bassa probabilità a input "difficili".
  • Casi speciali: Un algoritmo veloce se l'istanza del problema appartiene all'insieme di alcuni casi speciali. La parametrizzazzione della complessità può essere vista come una generalizzazione di questo approccio.
  • Euristica: Un algoritmo che funziona "ragionevolmente bene" in molti casi, ma per cui non c'è prova che sia sempre veloce e che dia buoni risultati.

Un esempio di algoritmo euristico è l'algoritmo greedy sub-ottimale O(n log n) usato per il problema della colorazione del grafo durante la fase di allocazione dei registri di alcuni compilatori. Ogni vertice è una variabile, gli archi vengono disegnati tra le variabili usate nello stesso momento, e i colori indicano il registro assegnato ad ogni variabile. Poiché la maggior parte delle macchine RISC hanno un gran numero di registri generici, anche un approccio euristico è efficace per questa applicazione.

[modifica] Vedi Anche

  • Lista di problemi NP-completi
  • ASR-completi
  • Teorema di Ladner

[modifica] Bibliografia



Classi di complessità (elenco)
P • NP • co-NP • NP-C • co-NP-C • NP-hard • UP • #P • #P-C • L • NL • NC • P-C • PSPACE • PSPACE-C • EXPTIME • EXPSPACE • PR • RE • Co-RE • RE-C • Co-RE-C • R • BQP • BPP • RP • ZPP • PCP • IP • PH
Static Wikipedia March 2008 on valeriodistefano.com

aa   ab   af   ak   als   am   an   ang   ar   arc   as   ast   av   ay   az   ba   bar   bat_smg   bcl   be   be_x_old   bg   bh   bi   bm   bn   bo   bpy   br   bs   bug   bxr   ca   cbk_zam   cdo   ce   ceb   ch   cho   chr   chy   co   cr   crh   cs   csb   cv   cy   da   en   eo   es   et   eu   fa   ff   fi   fiu_vro   fj   fo   fr   frp   fur   fy   ga   gd   gl   glk   gn   got   gu   gv   ha   hak   haw   he   hi   ho   hr   hsb   ht   hu   hy   hz   ia   id   ie   ig   ii   ik   ilo   io   is   it   iu   ja   jbo   jv   ka   kab   kg   ki   kj   kk   kl   km   kn   ko   kr   ks   ksh   ku   kv   kw   ky   la   lad   lb   lbe   lg   li   lij   lmo   ln   lo   lt   lv   map_bms   mg   mh   mi   mk   ml   mn   mo   mr   ms   mt   mus   my   mzn   na   nah   nap   nds   nds_nl   ne   new   ng   nl   nn   nov  

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu