Contenuto e scopo presentazione Premesse: Dato un sistema: • alcune domande non hanno senso • alcune domande che hanno senso non hanno una risposta (o hanno risposte che non possono essere fornite in un tempo finito) • alcune domande che hanno senso hanno risposte (esatte) che non possono essere fornite in tempi ragionevoli • le risposte di alcune domande hanno risposte (esatte) che possono essere fornite in tempi ragionevoli Teoria della complessità Concetti fondamentali Scopo della scienza è capire a quale domande può essere data una risposta e fornire in tempi ragionevoli risposte esatte, se possibile, o risposte approssimate, se non si può fare altrimenti. Raffaele Pesenti Raffaele Pesenti Contenuto e scopo presentazione Contenuto e scopo presentazione Premesse: I problemi di PL, o che possono essere “ricondotti” ad essere tali, sono risolvibili in modo “efficiente” in funzione delle loro “dimensioni” sia dal punto di vista teorico, e.g., con il metodo dell’elissoide, sia dal punto di vista pratico con il Simplesso e, più raramente, con l’algoritmo del punto interno. Il Simplesso però in casi “sfortunati”, e.g., cubo di Klee–Minty, esegue un numero “molto elevato” di iterazioni. Si pongono quindi le seguenti domande: – esistono altre classi di problemi per cui possono essere fatti ragionamenti “simili”? – si possono definire in modo formale i concetti espressi tra apici? Raffaele Pesenti 2 Contenuto: • vengono introdotti i concetti fondamentali riguardanti la teoria della complessità Scopo: • dato un problema fornire dei criteri che permettano di stabilire se esista la speranza di realizzare un algoritmo che permetta con tempi di calcolo ragionevoli di determinare la soluzione ottima, oppure se convenga utilizzare metodi approssimati o euristiche. 3 Raffaele Pesenti 4 Factoids Oggetto della teoria della complessità Alcuni dati rispetto ai quali confrontare l’onere computazionale (in tempo e in bit) necessari ad un algoritmo per la soluzione dell’istanza di un problema. Secondi in un minuto: 60 Secondi in un ora: 3.6 103 Secondi in un giorno: 8.64 104 Secondi in un anno: 3.16 107 Età stimata dell’universo: 1010 – 2 1010 anni = 3.16 1017 – 6.32 1017 secondi L’oggetto della teoria della complessità è stabilire se un problema sia facile o difficile La difficoltà di un problema è una caratteristica generale e non associata a particolari istanze del problema stesso Massima velocità di un computer (2006): 340 TFlops = 3.4 1014 ops. per sec.* Stima del numero di atomi nell’universo visibile: 1078 – 1080 *si veda http://www.top500.org/, operazioni usate per risolvere sistemi lineari. Raffaele Pesenti 5 Raffaele Pesenti Problemi e Istanze 6 Esempio • Problema P: domanda la cui risposta dipende dal valore assunto da un insieme di parametri e variabili. P è definito tramite la descrizione dei parametri e la descrizione delle proprietà di cui deve godere la risposta (soluzione) cercata. Una possibilità è fornire: – l’insieme delle soluzioni ammissibili F – una funzione obiettivo c che permette di valutare il costo/profitto associato ad ogni soluzione. • Esempio Dato un grafo G=(V,E), esiste un percorso hamiltoniano di lunghezza <K? Struttura del problema = grafo G Struttura della soluzione = percorso hamiltoniano Parametri = i particolari nodi, archi ed i pesi degli archi ℜ c:F → • Istanza di un problema P : particolare domanda che si ottiene fissando i valori di tutti i parametri di P Raffaele Pesenti 7 Raffaele Pesenti 8 Problemi Difficoltà di un problema • Problemi di decisione Risposta SI/NO (es., ∃ un ciclo hamiltoniano di lunghezza <K?) • Problemi di ricerca Trovare una soluzione (una prova della risposta “SI”) (es., trovare un ciclo hamiltoniano di lunghezza <K) • Problemi di enumerazione Trovare tutte le soluzioni (es., trovare tutti i cicli hamiltoniani di lunghezza <K) Facilità di un problema Esiste un algoritmo di soluzione efficiente Difficoltà di un problema Non esiste un algoritmo di soluzione efficiente • Problemi di ottimizzazione Trovare una soluzione (una prova della risposta “SI”) ottima rispetto ad un obiettivo (es., trovare un ciclo hamiltoniano di lunghezza minima) Raffaele Pesenti 9 Stabilire la difficoltà di un problema misurare l’efficienza del (migliore) algoritmo risolutore Misurare l’efficienza di un algoritmo determinare la complessità computazionale dell’algoritmo Raffaele Pesenti Algoritmo 10 Efficienza di un algoritmo Efficienza di un algoritmo • Algoritmo: sequenza di istruzioni non ambigue che a partire da dei dati di input produce dei risultati soddisfacenti date proprietà. Tempo richiesto per trovare la soluzione • Algoritmo (definizione formale): ciò che riesce ad eseguire una macchina di Turing Quantità di memoria richiesta per elaborare i dati del problema Dimensione dell’istanza del problema (Numero di variabili, vincoli, grandezza dei dati) Quantità di informazioni necessarie per codificare un’istanza Raffaele Pesenti 11 Raffaele Pesenti 12 Codifica di un’istanza di un problema Codifica di un’istanza di un problema Codifica: metodologia utilizzata per descrivere un’istanza di un problema, è caratterizzata da un alfabeto di simboli e da espressioni significative. Esempio: Un problema di PL Codificare i dati (n+mn+m coeff.) ci, i=1,...n; aij, i=1,...,n, j=1,...,m; bj, j=1,...m Codifica “ragionevole”: utilizza almeno 2 simboli non introduce dati irrilevanti né richiede una generazione esponenziale di dati Numeri a precisione finita: interi e razionali come rapporto tra interi Dimensione di un’istanza di un problema: lunghezza della stringa di simboli necessaria a descrivere l’istanza (teoricamente tale lunghezza dovrebbe essere la minima, praticamente basta che sia “ragionevole”) Raffaele Pesenti Sistema binario (codifica di un numero x): k+1 bit, con k ≤ log2 x ≤k+1 più 1 bit per il segno 13 Raffaele Pesenti Codifica di un’istanza di un problema Codifica di un’istanza di un problema Esempio: Codifica decimale (ragionevole) 1 cifra (0-9) ⇒ 10 numeri 10 (2 cifre) ⇒ 100 numeri 10 × 10=100 (3 cifre) ⇒ 1000 numeri 100 × 10=1000 (4 cifre) ⇒ 10000 numeri ⇒ mentre il numero di numeri cresce di fattori 10 il numero di cifre cresce come il logaritmo Esempio: Codifica unaria (non ragionevole) 1 cifra (1) ⇒ 1 numeri 10 decimale (10 cifre) ⇒ 10 numeri 100 decimale (100 cifre) ⇒ 100 numeri 1000 decimale (1000 cifre) ⇒ 1000 numeri ⇒ mentre il numero di simboli cresce di fattori 10 il numero di cifre cresce linearmente Raffaele Pesenti 14 Esempio: Generazione esponenziale di dati Problema di decisione difficile: dato un grafo determinare se esiste un ciclo hamiltoniano di lunghezza <K. Problema di decisione semplice: dati n numeri trovare se esiste un numero <K (sorting) Con una codifica non ragionevole (codificare il grafo e tutti i suoi cicli) si potrebbe trasformare il problema difficile del ciclo hamiltoniano nel problema semplice del sorting. La codifica non è ragionevole perché in essa è contenuta la generazione delle soluzioni del problema. 15 Raffaele Pesenti 16 Tempo di soluzione Efficienza di un algoritmo Funzione di complessità nel tempo Tempo richiesto per risolvere un’istanza del problema codificata ragionevolmente Il tempo di calcolo della soluzione è definito in maniera indipendente dalle caratteristiche del particolare calcolatore utilizzato (più formalmente bisognerebbe fare riferimento ad una macchina standard, e.g., macchina di Turing, Random Access Machine (RAM)). Tempo di soluzione: numero delle operazioni elementari (addizioni, moltiplicazioni, confronti, scrittura/lettura registri ) necessarie all’algoritmo per risolvere un’istanza di una dimensione data. Raffaele Pesenti 17 Funzione di complessità nel tempo: f(n), dove n è la dimensione di un’istanza, è la funzione che restituisce il massimo numero di operazioni elementari necessarie ad un algoritmo per risolvere le istanze di dimensione n di un problema. • La funzione di complessità nel tempo è determinata per mezzo della worst case analysis. • Un modo alternativo di valutare la complessità è l’analisi statistica (più complicato). Raffaele Pesenti Funzione di complessità nel tempo 18 Funzione di complessità nel tempo Occorre conoscere solo il comportamento asintotico (n →∞) della funzione di complessità nel tempo, ossia l’ordine di f(n) Ordine: La funzione f(n) è di ordine g(n), indicato come O(g(n)), se ∃ n’ ed una costante c tali che f(n) ≤ c⋅ g(n) per n ≥ n’ Notazione f(n) = O(g(n)) asymptotic upper bound f(n) = o(g(n)) asymptotically negligible (lim f(n)/g(n) = 0) f(n) = (g(n)) asymptotic lower bound (se e solo se g(n) = O(f(n))) f(n) = (g(n)) asymptotically dominant (se e solo se g(n) = o(f(n))) f(n) = (g(n)) asymptotically tight bound (se e solo se vale f(n) = O(g(n)) e g(n) = O(f(n))) Esempio: un polinomio p(n) =Σi=1..r cini è O(nr) Raffaele Pesenti 19 Raffaele Pesenti 20 Algoritmi Classe P Algoritmo polinomiale Un algoritmo è di tipo polinomiale se ha una funzione di complessità nel tempo che è O(np) per un certo p fissato. Algoritmo esponenziale Un algoritmo è di tipo esponenziale se non ha una funzione di complessità nel tempo di tipo polinomiale. Ordine esponenziale Una funzione f(n) è di ordine esponenziale se non è limitata da alcun polinomio, ossia, dati n2 ≥ n1, c1, c2>0 e d1, d2>1, Classe P Appartengono alla classe P tutti i problemi di decisione che possono essere risolti da algoritmi di tipo polinomiale (Polynomial time algorithm). Commento: I problemi in P sono ben risolti poiché per essi esiste un algoritmo efficiente di soluzione. Per questo i problemi in P vengono anche detti trattabili. c1 d 1n1 ≤ f ( n ) ≤ c 2 d 2n 2 Raffaele Pesenti 21 Raffaele Pesenti Classe P Classe P Esempio:tre algoritmi su un calcolatore che esegue una operazione in 10-6s n 10 30 n 5 0.1s Esempio: Sono noti algoritmi polinomiali per determinare il minimo albero ricoprente in un grafo: 60 n 2 10 − 4 s 9 ⋅10 − 4 s 3.6 ⋅10 −3 s O(f(k)) 24.3s 13m 2 n 10 −3 s 17.9m 366c polinomiale l’algoritmo di Kruskal è O(nlogn), l’algoritmo di Prim è O(n2) esponenziale Legenda: s=secondi, m=minuti, c=secoli La complessità computazionale non dipende dalla velocità del calcolatore utilizzato. Esempio: un calcolatore 1000 volte più veloce (10-9s) potrebbe eseguire le seguenti operazioni in più per i tre algoritmi 10 − 6 10 − 9 Raffaele Pesenti 22 n2 n5 k k 31 . 62 ⋅ k 3 . 98 ⋅ k 2n k 10 + k 23 Il problema (di decisione) dello shortest spanning tree: “dato un grafo stabilire se esiste un albero ricoprente di lunghezza <K” è in P Raffaele Pesenti 24 Esempi di problemi in P Classe NP Programmazione Lineare Continua Matching Cammino Minimo e tutti i problemi riconducibili a quello di Flusso a Costo Minimo Sistemi equazioni lineari Classe NP Appartengono alla classe NP tutti i problemi di decisione per cui, essendo nota una soluzione, è possibile verificare in tempo polinomiale se una data risposta è ammissibile (Non deterministic Polynomial time algorithm). La codifica di una soluzione è detta certificato di ammissibilità. Commento: Esistono problemi non in NP (tipicamente quelli enumerativi e molti di quelli di ottimizzazione) e problemi per cui non esiste modo di verificare la correttezza di una soluzione data. Raffaele Pesenti 25 Raffaele Pesenti Classe NP Classe NP I problemi NP sono quelli che sono risolvibili da un algoritmo di tipo polinomiale non deterministico (Non deterministic Polynomial time algorithm). Esempio: Problema: Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K? Risposta: Si Certificato di ammissibilità: Una sequenza di nodi del grafo Verifica: Seguire la sequenza dei nodi verificando che corrisponde ad un circuito hamiltoniano di lunghezza <K (polinomiale) Raffaele Pesenti 26 Algoritmo NP : Guessing stage) Checking stage) Un oracolo “indovina” la soluzione (non deterministico) Verifica in tempo polinomiale della soluzione (ovviamente nella realtà non esistono tali algoritmi) Teorema: P ⊆ NP Congettura: P≠ N P 27 Raffaele Pesenti NP P 28 Problema complementare Classe NP Esempi di problemi di decisione: Minimum spanning tree: è P e NP PL (determinare se esiste una soluzione >K): è NP e dal 1979 è stato provato che è P (algoritmo dell’ellissoide) Ciclo hamiltoniano di lunghezza <K: è NP ma non è stato provato che sia in P Problemi complementari (co-problemi): In un problema decisionale π , le cui soluzioni x in F devono soddisfare una data proprietà P, i.e., x∈F se e solo se P(x) =VERO, si deve rispondere alla domanda ∃ x t.c.P(x) =VERO? nel problema complementare co- π si deve rispondere alla domanda “negata”, ovvero se è falsa l’affermazione precedente ¬ ∃ x t.c.P(x) =VERO? ⇒ ∀ x t.c.P(x) =FALSO? Esempio: Il problema complementare del ciclo hamiltoniano di lunghezza<K: “Dato il grafo G, è vero che non esistono cicli hamiltoniani di lunghezza <K?” Raffaele Pesenti 29 Raffaele Pesenti Problema complementare Commenti: • Dimostrare la correttezza della soluzione di un problema complementare è, in generale, più complesso che dimostrare la correttezza della soluzione di un problema decisionale. Per il problema π: esiste un cigno nero? può essere estremamente difficile o impossibile trovare una risposta affermativa, ma se si riesce è banale convincere della correttezza della risposta, basta mostrare il cigno nero che si è trovato (il problema è in NP) Per co-problema co-π: non esiste un cigno nero? ⇒tutti i cigni non sono neri? può essere banale trovare un cigno che non è nero, ma potrebbe essere estremamente difficile convincere della verità della risposta positiva. Come certificato di ammissibilità bisognerebbe probabilmente mostrare tutti i cigni viventi, vissuti e che vivranno (il co-problema non sembra appartenere a NP). Raffaele Pesenti 31 30 Problema complementare Commenti(cont.): • Esistono però problemi in cui è facile dimostrare la correttezza sia del problema che del co-problema. Questa situazione si verifica quando è possibile determinare (non solo verificare come nel caso precedente) una soluzione per il problema decisionale, o negarne l’esistenza, in tempo polinomiale. Esempio: π: esiste un percorso tra Palermo e Catania minore di 100 Km? co-π: tutti i percorsi tra Palermo e Catania sono non minori di 100 Km? Per rispondere a questi problemi, essendo π∈P, si cerca in tempo polinomiale una soluzione di π (e.g., il percorso minimo), se questa esiste la risposta a π è SI e a co-π è NO, altrimenti, se non esiste soluzione per π, la risposta a π è NO e a co-π è SI. Si può (determinare e) quindi verificare la correttezza della risposta a co-π in tempo polinomiale, in questo caso co-π∈ΝP. Raffaele Pesenti 32 Problemi Co-NP Problema complementare Commenti(cont.): • Il ragionamento precedente non si può (o meglio, non sembra potersi) applicare al caso dei cigni e dei percorsi hamiltoniani in quanto non è (sembra essere) possibile determinare una soluzione del problema decisionale o negarne l’esistenza in tempi polinomiali (in pratica non esiste un algoritmo polinomiale che, e.g., determini il cigno più scuro o il percorso hamiltoniano minimo) I problemi co-P, complementari dei problemi in P, sono ancora in P. Non tutti i problemi co-NP, complementari dei problemi in NP, sembrano essere in NP. Congettura Teorema P=co-P ⇒ P⊆ NP ∩ co-NP, non noto se P = NP ∩ co-NP NP ≠ coNP NP P co-NP Esempio: Se il certificato di ammissibilità per il problema complementare del ciclo hamiltoniano è la lista di tutti i possibili cicli hamiltoniani (come attualmente appare) allora... per un grafo completo con m nodi il certificato ha dimensione pari a m! ⇒esponenziale quindi non verificabile in tempo polinomiale Raffaele Pesenti 33 Raffaele Pesenti 34 Trasformazioni e riduzioni Problemi più difficili Problemi più difficili Si definiscono come problemi più difficili di una classe quei problemi appartenenti alla classe che risultano almeno difficili quanto ogni altro Se si riuscisse a risolvere efficientemente uno dei problemi più difficili allora si potrebbero risolvere efficientemente anche tutti gli altri problemi della classe Trasformazione polinomiale (polynomial-time Karp reduction) E’ un algoritmo che, data un’istanza I di un problema π, produce in tempo polinomiale un’istanza I’ di un problema π’ in modo tale che, se la risposta è “SI” per I, allora la risposta è “SI” anche per I’ Riduzione polinomiale (polynomial-time Turing reduction) E’ un algoritmo che, data un’istanza I di un problema π, usa una subroutine per risolvere un’istanza I’ di un problema π ’ in modo tale che l’algoritmo sarebbe polinomiale se la procedura fosse di ordine O(1), i.e., fosse eseguita in un tempo indipendente dalla dimensione di I’, e se i parametri da passare alla subroutine sono calcolati in tempo polinomiale. La trasformazione polinomiale di π a π’ (π ridotto a π ’) π ∝π’ Raffaele Pesenti 35 Raffaele Pesenti 36 Esempio Trasformazioni e riduzioni Dati • Problema dello zaino KP(U,s,c,B,K) Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume s(u)∈N, e un peso c(u)∈N, e dati due interi positivi B,K∈N . Soluzione: un sottoinsieme U’⊆Utale che il volume occupato sia non maggiore di B, i.e., Σu∈ U’ s(u) ≤ B e il peso totale degli elementi scelti sia non minore di K, i.e., Σu∈ U’ c(u) ≥ K. Proprietà: – Le trasformazioni e le riduzioni polinomiali sono transitive – Dati π e π’, con π ∝ π ’, • se π’ ∈ P ⇒ π ∈ P • se π ∈ Ν P-C ⇒ π ’ ∈ Ν P -C • Problema di somma di sottoinsiemi SS(V,a,D) Istanza: dato un insieme finito V, dove |V|=2n e dove ogni v∈V è caratterizzato da un volume a(v)∈N, e dato un intero positivo D∈N . Soluzione: un sottoinsieme V’⊆V, dove |V’|=n, tale che Σv∈ V’ a(v) = D. allora ... Problema di somma di sottoinsiemi ∝ Problema dello zaino Raffaele Pesenti 37 Raffaele Pesenti 38 Esempio Esempio Dimostrazione (cont.) (correttezza) L’istruzione s(u)←a(u)|V|+ 1 impone che ogni u abbia volume che superi di uno un multiplo di |V|. Analoga considerazione per c(u) ←a(u)|V|+ 1. Le istruzioni B←D|V|+|V|/2,K ←D|V|+|V|/2 hanno come conseguenza che risolvendo KP(U,s,c,B,K) si cerchi un sottoinsieme U’ t.c. Dimostrazione si deve realizzare un algoritmo che per risolvere un SS(V,a,D) esegue un numero polinomiali di chiamate alla subroutine di soluzione di KP(U,s,c,B,K). Σu∈U’ s(u) ≤B ⇒|V| Σu∈ U’ a(u) + |U’| ≤D|V|+|V|/2 Σu∈U’ c(u) ≥ K ⇒ |V| Σu∈ U’ a(u) + |U’| ≥ D|V|+|V|/2 Sia risolvi_KP(U,s,c,B,K) la procedura che restituisce un sottoinsieme U’ soluzione di KP(U,s,c,B,K) se U’ esiste, allora la procedura risolvi_SS(V,a,D) risulta essere: quindi, se tale sotto insieme U’ esiste allora D|V|+|V|/2 ≤|V| Σu∈ U’ a(u) + |U’| ≤D|V|+|V|/2 risolvi_SS(V,a,D) U ←V da cui dividendo per |V| for each u ∈U c(u) ←a(u)|V|+ 1 for each u ∈U s(u) ←a(u)|V|+ 1 B ←D|V|+|V|/2 K ←D|V|+|V|/2 return risolvi_KP(U,s,c,B,K) Raffaele Pesenti Σu∈U’ a(u) = D + 1/2 - |U’|/|V|. poiché v(u) è intero e |U’|/|V| ≤ 1 l’ultima condizione impone Σu∈U’ a(u) = D e 1/2 - |U’|/|V| =0 ⇒ |U’|=|V|/2. quindi, se esiste U’, i suoi elementi soddisfano le condizioni del problema SS. 39 Raffaele Pesenti 40 Esempio Trasformazioni e riduzioni Dimostrazione (cont.) (complessità) La prima istruzione dell’algoritmo richiede 2n operazioni elementari poiché si devono elencare tutti gli elementi di V, analogamente la seconda e la terza istruzione richiedono 6n operazioni elementari (un for su 2n elementi di 3 operazioni). La quarta e la quinta istruzione richiedono 4 operazioni, i.e., un tempo indipendente dalla dimensione dell’istanza. La sesta istruzione è per ipotesi O(1). Di conseguenza la complessità dell’algoritmo è O(n) = O(max{2n,6n,4, O(1)}) . Raffaele Pesenti Commenti: – In parole povere π può essere ridotto a π’se i suoi dati possono essere “manipolati” (in tempo polinomiale) in modo che la soluzione del problema π p ossa essere ottenuta risolvendo uno o comunque “pochi” (in numero polinomiale) problemi π’ – Le trasformazioni e le riduzioni polinomiali permettono di definire se il problema π’ è almeno altrettanto difficile di π – L’ideale è riuscire a trasformare tutti i problemi in un unico di forma standard che si riesca a risolvere in modo efficiente o almeno accettabile. Un problema spesso preso come riferimento è la programmazione lineare intera (che però non è risolvibile in modo efficiente) Raffaele Pesenti 41 42 NP-completezza NP-completezza Commenti: Classe NP-C (NP-Completi) Appartengono alla classe NP-C tutti i problemi di decisione della classe NP che sono almeno difficili quanto ogni altro problema in NP, i.e., il problema π è NP-C se ∀π ’ ∈ NP, è possibile π’ ∝ π Se fosse possibile risolvere efficientemente un π ∈ NP-C allora tutti i problemi NP sarebbero stati risolti efficientemente. Per dimostrare P=NP basterebbe provare che un solo problema NP-C è P Commento: I problemi NP-C sono quelli a cui possono essere ridotti con una trasformazione polinomiale tutti i problemi in NP. La riduzione polinomiale alla Turing è più generale della trasformazione, una definizione basata su di essa comprenderebbe in NP-C anche i Co-NP Raffaele Pesenti 43 NP NP-C Raffaele Pesenti P co-NP 44 Il problema della soddisfacilità (SAT) Il problema della soddisfacilità (SAT) SAT Problem: Data un’espressione booleana in forma congiuntiva normale in n variabili, x1,..., xn, e loro complementi, dire se l’espressione è soddisfacibile Forma congiuntiva normale: un AND di OR: K y1i ∨ ...∨ yhi ∧( i=1 ) con Teorema di Cook (1971) Il problema SAT è NP-C se h ≥ 3 Commenti: SAT è stato il primo problema NP di cui è stata dimostrata l’appartenenza ad NP-C y ji ∈{x1,...,xn , x1,...,xn } dove le espressioni in parentesi sono clausole di cardinalità h Esempio: Data l’espressione E = (x1 ∨ x2 ∨ x4 ) ∧ (x1 ∨ x2 ) ∧ ( x4 ) ∧ (x1 ∨ x3 ∨ x4 ) ∧ (x2 ∨ x3 ∨ x4 ) dire se esiste un’assegnazione VERO-FALSO alle variabili per cui E=VERO. Raffaele Pesenti 45 Raffaele Pesenti 46 Primi problemi NP-completi Appartenenza di altri problemi a NP-C Vertex Cover Appartenenza di altri problemi a NP-C: Per dimostrare che π ∈ NP è incluso in NP-C, per transitività è sufficiente dimostrare che un π‘ ∈NP-C (ad esempio, SAT) si riduce ad esso, π’ ∝π . Hamiltonian Circuit on a Digraph Hamiltonian Circuit Feedback Arc Set Clique Set Packing Set Cover Feedback Node Set Esempio: Il problema dello zaino è in NP-C, infatti si dimostra che SAT ∝KP quindi poiché ∀ π ∈ NP è t.c. π ∝S AT e SAT ∝KP allora π ∝S AT ∝K P ⇒ π ∝KP Raffaele Pesenti SAT Partitioning Clique Cover 01LP Knapsack Max-Cut Sequencing 3-Dimensional Matching 3-SAT Chromatic Number Exact Cover Steiner Tree Hitting Set Vedere “A compendium of NP optimization problems” di P. Crescenzi e V. Kann 47 Raffaele Pesenti 48 Problemi di decisione e problemi di ottimizzazione Le definizioni della teoria della complessità fanno riferimento a problemi di decisione. Quanto detto si può estendere ai problemi di ottimizzazione un algoritmo che risolve un problema di decisione può essere utilizzato all’interno di un algoritmo di tipo polinomiale per risolvere il corrispondente problema di ottimizzazione. Raffaele Pesenti 49 Problemi di decisione e problemi di ottimizzazione Esempio: Problema di decisione (CH(k)) Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K? Problema di ottimizzazione (TSP) Determinare il ciclo hamiltoniano di G di lunghezza minima. Raffaele Pesenti Problemi di decisione e problemi di ottimizzazione 50 Problemi NP-hard Esempio (cont.): Sia S l’algoritmo per risolvere CH(k). L’algoritmo per risolvere TSP può essere costituito dalla seguente procedura dicotomica: 1. 2. 3. 4. Siano A e B la minima e massima lunghezza degli archi di G ed m il numero di nodi di G. Allora m⋅ A ≤lunghezza circuto hamiltoniano ≤m⋅ B Porre k= m(B+A)/2 e ∆ = m(B-A)/2 Usare S per risolvere CH(k). Porre ∆ = ∆ /2. Se la risposta di S è si, porre k=k - ∆ altrimenti k=k + ∆ ed andare a 2. Problemi NP-hard: Un problema π è NP-hard se esiste un problema NP-C che può essere ridotto, secondo Turing, ad esso. Il problema π non appartiene necessariamente ai problemi NP, può anche essere un problema non decisionale, ma, e.g., di ottimizzazione. NP-hard NP-C Poiché i coefficienti sono interi, al più ci saranno (log(m(B-A))+1 iterazioni. Raffaele Pesenti 51 Raffaele Pesenti 52 Problemi NP-hard Problemi NP-C (NP-hard) in senso debole/forte Commenti: Sono NP-hard problemi (anche non NP) almeno difficili quanto ogni problema NP-C. Se π ∈ NP-hard per alcune delle sue istanze (le più grandi) non potrà essere trovata la soluzione ottima in un tempo accettabile per mezzo di algoritmi esatti (enumerazione Algoritmo pseudopolinomiale: algoritmo che risolve un problema NP-C (o NP-hard) in un tempo che sia polinomiale nella lunghezza dell’input quando i coefficienti sono codificati in maniera “unaria”. esplicita o implicita). In generale è possibile determinare soluzioni accettabili per π ∈ NP-hard per mezzo di algoritmi approssimati (soluzioni sub-ottime) algoritmi euristici Problemi NP-C (NP-hard) in senso debole: problemi in NP-C (NP-hard) che possono essere risolti da algoritmi pseudopolinomiali Problemi NP-C (NP-hard) in senso forte: problemi in NP-C (NP-hard) che non siano pseudopolinomiali Raffaele Pesenti 53 Raffaele Pesenti Problemi NP-C (NP-hard) in senso debole 54 Problemi P-easy Esempio: il problema di somma di sottoinsiemi è NP-C infatti si dimostra SAT ∝ KP ∝ SS. Gli algoritmi più veloci per la soluzione di un istanza SS(V,a,D) hanno complessità O(Dn), dove 2n=|V|. Tali algoritmi sono esponenziali, dato che il numero D codificato in binario ha lunghezza logD:O(Dn) = O(2logDn). Se si fosse accettata però una codifica unaria gli algoritmi considerati risulterebbero polinomiali. Problemi P-easy: Un problema π è P-easy se esiste un problema in P a cui può essere ridotto. Il problema π non appartiene necessariamente ai problemi NP, può anche essere un problema non decisionale, ma, e.g., di ottimizzazione. I problemi P-easy sono risolvibili polinomialmente richiamando un numero di volte polinomiale la subroutine che risolve un problema in P. Nei casi pratici se D è “piccolo” o cresce “lentamente”, e.g., D <100 n, con la dimensione del problema gli algoritmi pseudopolinomiali hanno tempi di esecuzione “accettabili”. Raffaele Pesenti 55 Raffaele Pesenti 56 Errori Soluzioni approssimate e algoritmi euristici Trovare la soluzione ottima di problemi di ottimizzazione NP-hard può risultare in pratica troppo oneroso, inoltre dato che i parametri del modello considerato possono essere affetti da errori tale sforzo potrebbe essere anche poco rilevante. Nei casi pratici possono essere anche accettate delle soluzioni “buone” che, sperabilmente, non siano lontane dall’ottimo. Algoritmo euristico: algoritmo che risolve un problema di ottimizzazione, utilizzando in genere regole di buon senso, e fornisce una soluzione ammissibile ma non necessariamente ottima. Raffaele Pesenti 57 Errori: dato un problema (F,c; max), detti zopt= {max c(x) : x∈F} il valore della soluzione ottima e zA il valore fornito dall’algoritmo euristico A si definiscono EA= zopt - zA – errore assoluto: – errore relativo: RA= (zopt - zA)/zopt Raffaele Pesenti 58 Algoritmi approssimati Algoritmi approssimati Algoritmo ε - approssimato: algoritmo che garantisce un errore relativo non maggiore di ε > 0: Ra ≤ε Schema di approssimazione: algoritmo che garantisce Ra ≤ ε per qualunque ε > 0 – schema di approssimazione polinomiale: schema di approssimazione con complessità polinomiale nelle dimensioni dell’istanza – schema di approssimazione pienamente polinomiale: schema di approssimazione con complessità polinomiale nelle dimensioni dell’istanza e in 1/ε Raffaele Pesenti Quando è possibile (non sempre lo è) è opportuno dare una stima per eccesso dell’errore compiuto accettando la soluzione di un algoritmo euristico rispetto a quella ottima 59 Commenti: • Quando esistono conviene applicare algoritmi approssimati, per i quali è calcolabile, per definizione, un limite massimo dell’errore compiuto, rispetto a degli algoritmi euristici basati sul buonsenso, ma per cui non si può fornire un limite massimo dell’errore. • La classe dei problemi di ottimizzazione in NP-hard per cui esista un algoritmo approssimato viene detta APX, la classe dei problemi per cui esiste uno schema polinomiale viene detta PTAS, la classe dei problemi per cui esiste uno schema pienamente polinomiale è detta FPTAS: FPTAS ⊆ PTAS ⊆ APX se P ≠ NP le inclusioni sono strette. In particolare i problemi NP-C in senso forte non sono in FPTAS. Viceversa non è noto se tutti gli NP-C in senso debole sono in FPTAS. • Per alcuni problemi non sono noti algoritmi approssimati, per altri il migliore algoritmo approssimato ha valori di ε grandi (maggiori di 0.5). Raffaele Pesenti 60 Esempio Esempio Problema dello zaino KP(U,s,c,B, max) Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume s(u)∈N e da un valore c(u)∈N, e dato un intero positivo B∈N . Soluzione: un sottoinsieme U’⊆Utale che il volume occupato sia non maggiore di B, i.e., Σu∈ U’ s(u) ≤B Obiettivo: il peso totale degli elementi scelti sia massimo, i.e., maxΣu∈ U’ c(u) • L’algoritmo euristico è polinomiale: O(nlogn) • zopt è limitato superiormente zopt ≤ Σ i=1...m c(ui) + (B - Σi=1...m s(ui)) c(um+1)/s(um+1), il valore del r.h.s. della disequazione è infatti ciò che si otterrebbe riempiendo lo spazio disponibile B con gli m elementi di densità massima e frazionando l’(m+1)mo elemento, che è troppo grande per essere incluso completamente Algoritmo euristico: • sia n=|U|, si ordinano per densità decrescente c(u)/s(u) gli elementi in U in O(nlogn) operazioni; • si assegnano a U’ i primi m elementi più densi t.c. Σi=1...m s(ui) ≤B in O(n) operazioni: za = Σi=1...m c(ui) Raffaele Pesenti Proprietà: • Errore assoluto: EA ≤ z opt - zA= (B - Σi=1...m s(ui)) c(um+1)/s(um+1), • Errore relativo: RA ≤ (zopt - zA)/zopt ≤ (zopt - zA)/zA = =(B - Σi=1...m s(ui)) c(um+1)/s(um+1)/Σi=1...m c(ui) 61 Raffaele Pesenti Esempio 62 Algoritmi paralleli Commenti: • Per problemi di massimo generalmente 0<RA<1, mentre per problemi di minimo RA può anche non essere limitato superiormente. • L’errore relativo RA dell’algoritmo euristico può essere limitato superiormente solo da 1. Infatti siano dati – U={u1, u2} – v(u1) = 1, v(u2) = B – c(u1) = 1, c(u2) = B-1 allora – zopt = B-1 – zA = 1 – RA = (B-1-1)/(B-1) = (B-2)/(B-1) < 1 Facendo riferimento ad un modello standard di processori paralleli che accedono ad una random access memory comune (Parallel Random Access Machine (PRAM)) è sviluppata una teoria della complessità parallela. Algoritmo parallelo efficiente: dato un problema di dimensione n un algoritmo parallelo è detto efficiente se richiede un tempo O(logkn), con k costante positiva, quando utilizza un numero polinomiale di processori. qualunque limite inferiore a 1 può essere violato scegliendo B sufficientemente grande. Raffaele Pesenti 63 Raffaele Pesenti 64 P-completezza Esercizi Classe NC: La classe dei problemi per cui esiste un algoritmo parallelo efficiente è detta NC. Proprietà: NC ⊆ P, ma non è noto se NC = P Es. 1) Indicare, motivando la risposta, a che classe appartiene il problema corrispondente alla domanda: esiste un cigno bianco?. Indicare anche la classe del co-problema. Classe P-C (P-Completi) La classe di tutti i problemi di decisione della classe P che sono almeno difficili quanto ogni altro problema in P è detta P-C Proprietà: Se un problema π ∈ P-C è t.c. π ∈ NC allora P=NC La PL è in P-C, le operazioni booleane sono in NC. Raffaele Pesenti 65 Raffaele Pesenti Esercizi Esercizi Es. 3) Dato il problema: Problema dello pallet loading PalL(U,l,h,c,L,H, max) Istanza: dato un insieme finito U, dove ogni (scatola) u∈U è caratterizzato da un una superficie rettangolare di lati l(u)∈N e h(u)∈N, e da un valore c(u)∈N, e data una struttura rettangolare (pallet) di lati L ,H∈N. Soluzione: un sottoinsieme U’⊆Utale che i suoi elementi occupino una superficie non maggiore di L× H e non avvengano sovrapposizioni. Es. 2) Il problema Pn//Cmax di minimizzazione del massimo tra i tempi di completamento di operazioni indipendenti che possono essere eseguite su n macchine parallele è NP-hard. Determinare le conclusioni che possono essere tratte sulla complessità dei problemi 1//Cmax, Pn/prec/Cmax, Pn/chain/Cmax e BP sapendo che valgono le seguenti relazioni: 1//Cmax ∝ Pn//Cmax Pn//Cmax ∝ Pn/prec/Cmax BP ∝ Pn//Cmax Pn//Cmax ∝ BP Pn/chain/Cmax ∝ Pn/prec/Cmax Raffaele Pesenti 66 Obiettivo: il valore totale degli elementi scelti sia massimo, i.e., maxΣu∈U’ c(u) Provare che è NP-hard e dedurre le conseguenze operative che questo comporta sugli imballaggi secondari (scatole) dei prodotti. 67 Raffaele Pesenti 68 Esercizi Esercizi Es. 4) Una catena di supermercati ha un grosso magazzino da cui rifornisce tutti i supermercati della città. Ogni sera il magazzino centrale riceve la lista ordini dei prodotti necessari da ogni supermercato e carica uno o più roll (appositi carrelli verticali) con i beni richiesti. Per caricare ogni roll (e viceversa per scaricarlo) si deve risolvere un problema di circuito hamiltoniano, dove i nodi da visitare sono i punti dove è dislocata la merce richiesta nel magazzino centrale (e nei supermercati). Trarre delle conclusioni sul modo in cui devono essere elencati i prodotti nella lista ordini e su come devono essere disposti i prodotti nel magazzino centrale e nei supermercati in modo che il problema sia facilmente risolvibile. Es. 5) Dato un insieme di 12 elementi dai seguenti valori {3,4,4,5,6,6,7,8,9,10,11,13} suddividerlo in due sottoinsiemi di uguale cardinalità e valore complessivo. Formalizzare in pseudocodice l’algoritmo utilizzato e determinarne la complessità computazionale. Es. 6) Risolvere il problema del punto precedente con il seguente insieme di valori {38,10,59,89,88,95,1,40,86,13,24,4,3,16,21,1} usando l’algoritmo sviluppato. Raffaele Pesenti Raffaele Pesenti 69 Esercizi 70 Esercizi Es. 7) Dato il problema: Problema di Bin Packing BP(U,s,B,n) Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume s(u)∈N, e dato un intero positivo n di contenitori (bin) di volume B∈N . Soluzione: una partizione di U in sottoinsiemi U(i), per i =1,..., n, tale che il volume occupato in ogni contenitore i non sia maggiore di B, i.e., Σu∈ U(i) s(u) ≤B. Provare che il problema di bin packing è NP-Completo in quanto si può ridurre ad esso il problema dello della somma dei sottoinsiemi (che rimane in NP-C anche quando D = Σv∈V a(u)/2) . Es. 8) Il problema 1//ΣC di minimizzazione del tempo medio di completamento di m operazioni indipendenti e immediatamente disponibili che devono essere eseguite su una macchina è in P. In particolare si risolve all’ottimo eseguendo prima le operazioni di durata minore: politica SPT (shortest processing time first). Provare che tale politica è ottima, dimostrando che dato un qualunque ordinamento con le operazioni schedulate in maniera diversa da SPT se ne può ottenere uno non peggiore invertendo la posizione di due operazioni successive. Il problema 1/ri/ΣC, identico al precedente ma dove ogni operazione non è disponibile immediatamente ma solo a partire dal tempo ri , è invece NP-hard Suggerire delle euristiche di soluzione. Raffaele Pesenti 71 Raffaele Pesenti 72 Soluzioni ad alcune domande Esercizi Es. 8) (cont.) Definire un’euristica di ricerca locale (ad ogni passo vengono scambiate di posizione due operazioni) che risolva il problema 1/ri/ΣC determinando un minimo locale. Stabilire la complessità computazionale di tale euristica e indicare una soluzione iniziale da cui conviene partire. operazione durata tempo di rilascio Applicare l’euristica ai seguenti dati: 1 2 3 4 5 6 7 8 9 1 10 Raffaele Pesenti 38 10 59 89 88 95 1 40 86 13 24 0 5 40 120 100 150 100 200 60 30 30 73 Soluzioni ad alcune domande Es. 5) {4,6,6,7,9,11}, {3,4,5,8,10,13} Es. 7) Pensare le euristiche cercando di formalizzare il criterio con cui si carica un portabagagli di un’automobile quando si hanno tante valige di differente dimensione. Raffaele Pesenti 75 Es. 2) Su 1//Cmax non si può concludere (in realtà è in P) Su n/chain/Cmax non si può concludere (in realtà è in NP-hard) Su n/prec/Cmax e BP si può concludere che sono NP-hard Es. 3) Il problema dello zaino si riduce banalmente a quello del pallet loading (basta porre h(u) = 1, per ogni u). Conviene avere imballaggi che siano sottomultipli del pallet. Per comprendere l’importanza del problema si veda sito http://www.federlegno.it/ASSO-PALLET.htm Es. 4) la disposizione delle merci in tutti i supermercati deve essere topologicamente identica e simmetrica a quella del magazzino centrale. (Domanda aggiuntiva: come si possono inoltre sfruttare al meglio gli spazi disponibili, senza lasciare vuoti, che costano e colpiscono negativamente la clientela?). Raffaele Pesenti 74