1 / 43

Guido Proietti Email: guido.proietti@univaq.it URL: www.di.univaq.it/~proietti/index_personal

Teoria degli algoritmi e della computabilità Terza giornata : Ricerca e ordinamento ottimi. P vs NP , algoritmi di approssimazione, e il potere della randomizzazione. Guido Proietti Email: guido.proietti@univaq.it URL: www.di.univaq.it/~proietti/index_personal .

olaf
Download Presentation

Guido Proietti Email: guido.proietti@univaq.it URL: www.di.univaq.it/~proietti/index_personal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Teoriadeglialgoritmi e dellacomputabilitàTerza giornata: Ricerca e ordinamento ottimi. P vs NP, algoritmi di approssimazione, e il potere della randomizzazione Guido Proietti Email: guido.proietti@univaq.it URL: www.di.univaq.it/~proietti/index_personal

  2. Tbest(n) = 1 x è in prima posizione Tworst(n) = n xL oppure è in ultima posizione Correzione esercizio: Il problema della ricerca Un primo algoritmo è quello di ricerca sequenziale (o esaustiva), che gestisce l’insieme di numeri come una lista L non ordinata Contiamo il numero di confronti (operazione dominante):

  3. Algoritmo di ricerca binaria Se ipotizzassimo che la sequenza di numeri fosse un array L ordinato, potremmo progettare un algoritmo più efficiente: Confronta x con l’elemento centrale di L e prosegue nella metà sinistra o destra in base all’esito del confronto

  4. Esempi su un array di 9 elementi Cerca 2 Cerca 1 Cerca 9 Cerca 3 3<4 quindi a e b si invertono

  5. Analisi dell’algoritmo di ricerca binaria Contiamo i confronti eseguiti nell’istruzione 3 (operazione dominante): Tbest(n) = 1 l’elemento centrale è uguale a x Tworst(n) = Θ(log n)xL Infatti, poiché la dimensione del sotto-array su cui si procede si dimezza dopo ogni confronto, dopo l’i-esimo confronto il sottoarray di interesse ha dimensione n/2i. Quindi, dopo i=logn +1 confronti, si arriva ad avere a>b.

  6. Un algoritmo di ordinamento ottimo: il MergeSort (John von Neumann, 1945) • Problema dell’ordinamento: • Lower bound - (n log n) albero di decisione • Upper bound – O(n2) IS,SS • Proviamo a costruire un algoritmo ottimo, usando la tecnica del divide et impera: • Divide: dividi l’array a metà • Risolvi il sottoproblema ricorsivamente • Impera: fondi le due sottosequenze ordinate

  7. Esempio di esecuzione Input ed output delle chiamate ricorsive

  8. Fusione di sequenze ordinate (passo di impera) • Due array ordinati A e B possono essere fusi rapidamente: • estrai ripetutamente il minimo di A eB e copialo nell’array di output, finché A oppure B non diventa vuoto • copia gli elementi dell’array non ancora completamente svuotato alla fine dell’array di output Notazione: dato un array A e due indici x  y, denotiamo con A[x;y] la porzione di A costituita da A[x], A[x+1],…,A[y]

  9. Algoritmo di fusione di sequenze ordinate • Merge (A, i1, f1, f2) • Sia X un array ausiliario di lunghezza f2-i1+1 • i=1 • i2=f1+1 • while (i1 f1 e i2 f2) do • if (A[i1]  A[i2]) • then X[i]=A[i1] • incrementa i e i1 • else X[i]=A[i2] • incrementa i e i2 • if (i1<f1) then copia A[i1;f1] alla fine di X • else copia A[i2;f2] alla fine di X • copia X in A[i1;f2] fonde A[i1;f1] e A[f1+1;f2] output in A[i1;f2] Osservazione:usa l’array ausiliario X

  10. Costo dell’algoritmo di merge Lemma La procedure Merge fonde due sequenze ordinate di lunghezza n1 e n2 eseguendo al più n1+ n2 -1 confronti Dim: Ogni confronto “consuma” un elemento di A. Nel caso peggiore tutti gli elementi tranne l’ultimo sono aggiunti alla sequenza X tramite un confronto. Il numero totale di elementi è n1+ n2. Quindi il numero totale di confronti è n1+ n2 -1. QED Numero di confronti: C(n=n1+ n2)=O(n1+ n2)=O(n) (si noti che vale ancheC(n)=Ω(min{n1,n2})) Numero di operazioni (confronti + copie)? T(n)=(n1+ n2)

  11. MergeSort • MergeSort (A, i, f) • if (i  f) thenreturn • m = (i+f)/2 • MergeSort(A,i,m) • MergeSort(A,m+1,f) • Merge(A,i,m,f) Ovviamente la chiamata principale è Mergesort(A,1,n)

  12. Complessità del MergeSort Si vede facilmente che il tempo di esecuzione di MergeSort è: T(n) = 2 T(n/2) + Θ(n) con T(1)=1, da cui: T(n)=2(2T(n/22)+Θ(n/2))+Θ(n)= =2(2(2T(n/23)+Θ(n/22))+Θ(n/2))+Θ(n)=… e per k = log2n si ha n/2k = 1 e quindi T(n)=2(2(…(2T(n/2k)+Θ(1))+…+Θ(n/22))+Θ(n/2))+Θ(n) = 2log n·Θ(1)+2logn-1·Θ(2)+2logn-2·Θ(22)+…+ 20·Θ(n) = n∙Θ(1)+n/2∙Θ(2)+n/4∙Θ(4)+…+1∙Θ(n) =Θ(n logn)

  13. Più precisamente… Nelcasopeggiore, il MS esegue(n ⌈log n⌉ - 2⌈log n⌉ + 1) confronti, che corrisponde ad un numero compreso tra (n log n - n + 1) e (n log n + n + O(log n)) Nelcasomedio, il MS esegue(n ⌈log n⌉ - 2⌈log n⌉ + 1) – 0.2645·nconfronti Nelcasomigliore(array giàordinato), il MS eseguen-1confronti; puòessereottenutofacendoun controllopreliminarenellaprocedura di Mergetraultimo elementodella prima sequenza e primo dellaseconda

  14. Osservazioni finali • Il MergeSort è un algoritmo (asintoticamente) ottimo rispetto al numero di confronti eseguiti nel caso peggiore • Il MergeSort non ordina in loco, e utilizza memoria ausiliaria (l’occupazione di memoria finale è pari a 2n)

  15. Richiamo: gerarchia delle classi Decidibili ExpTime (ARRESTO(k)) P (ricerca) NP NP-completi (SAT)

  16. Richiamo: inclusioni proprie? • Abbiamo visto che: P ⊑NP ⊑ExpTime, con P ≠ExpTime • In NP c’è una classe molto speciale ed importante di problemi che sicuramente non apparterrebbero a P se fosse NP≠P: i problemi NP-completi • Per i problemi in P, che possono essere risolti in tempo polinomiale su una RAM, il compito principale dell’algoritmista è progettare algoritmi efficienti, possibilmenteottimi • Anche per i problemi in NP vorremmo progettare algoritmi efficienti, ma c’è un piccolo dettaglio: si congettura (in realtà, si crede fortissimamente) che i problemi NP-completi non ammettano algoritmi risolutivi polinomiali! • Che fare allora?

  17. P vs NP: ilproblema da un milione di dollari

  18. 24 marzo 2000, Collège de France, Parigi problemi del millennio • Congettura di Hodge • Congettura di Poincaré • Ipotesi di Riemann • Teoria quantistica di Yang-Mills • Equazioni di Navier-Stokes • P vs NP • Congettura di Birche Swinnerton-Dyerasd risolto Fondazione Clay mette in palio 7 premida un milionedidollaril’uno per la soluzionediquellichesonoconsideratiiproblemimatematicipiùimportanti del nuovomillennio

  19. P vs NP: unaformulazionedall’aspettoinnocuo ilproblema del commessoviaggiatore: (TSP, datravelling salesman problem) date ncittà e, per ognicoppiadicittài, j, la distanzafrai e j trovare un tour (un camminociclico) dilunghezza minimachepassa per tutte le città • Si noti come tale problema ricada tra quelli di ottimizzazione – Richiedono di restituire la soluzione migliore (rispetto ad un prefissato criterio) tra tutte quelle possibili. Ad esempio trovare il cammino di lunghezza minima fra due nodi di un grafo unadomandada$ 1.000.000: esiste un algoritmopolinomialecherisolveil TSP? unadomandada$ 0,01: esiste un algoritmocherisolveil TSP?

  20. P vs NP: unaformulazionedall’aspettoinnocuo un semplicealgoritmo per ilTSP: enumeratuttiipossibili tour fra le ncittà, misurando la lunghezzadiciascunodiessi e memorizzandoquellopiùbreve via viaosservato è un algoritmoefficiente? quanti tour possibilicisono con ncittà? #tour: (n -1)(n -2)(n -3)… 3 2 1=(n -1)! Ad esempio, 52! fattoriale è: 80.658.175.170.943.878.571.660.636.856.403.766.975.289.505.440.883.277.824.000.000.000.000 in milionesimidisecondo è almeno 5000 miliardidi volte piùdell’etàdell’universo!!! EffettivamentesipuòdimostrarecheTSP è NP-hard, ovvero la suaversionedecisionale è NP-completa, e quindisicongettura la non esistenza di algoritmirisolutivipolinomiali

  21. Efficiente Polinomiale? Di certo, un algoritmoesponenzialecome quelloproposto per ilTSP è inefficiente. Ma un algoritmopolinomialeè sempreefficiente? Ed unoesponenzialeè sempreinefficiente? puòessereconsideratoefficienteun algoritmo (polinomiale) che ha complessità(n100)? …no! puòessereconsideratoinefficienteun algoritmo (non polinomiale) che ha complessità(n1+0.0001 log n)? …no! …ma nellapratica la distinzionefunziona! problemi per iqualiesistonoalgoritmipolinomialitendono ad averepolinomi “ragionevoli” problemi per iquali non siconosconoalgoritmipolinomialitendono a esseredavverodifficili in pratica

  22. Crescitapolinomialevscrescitaesponenziale In effetti, la differenzafracomplessitàpolinomiale e non polinomiale è davveroenorme Tempi diesecuzionedidifferentialgorimi per istanzedidimensionecrescentesu un processorechesaeseguireun milionediistruzionidi alto livelloal secondo. L’indicazionevery longindicacheil tempo dicalcolosupera 1025anni.

  23. Alcuniproblemifacili(cheammettono un algoritmopolinomiale)

  24. Premessa: i grafi Nel 1736, il matematico Eulero, affrontò l’annoso problema dei 7 ponti di Königsberg (Prussia): È possibile o meno fare una passeggiata che parta da un qualsiasi punto della città e percorra una ed una sola volta ciascuno dei 7 ponti?

  25. La modellizzazione di Eulero Eulero affrontò il problema schematizzando topologicamente la pianta della città, epurando così l’istanza da insignificanti dettagli topografici: A A D B D B C C …e così Königsberg venne rappresentata con un insieme di 4 punti (uno per ciascuna zona della città), opportunamente uniti da 7 linee (una per ciascun ponte)

  26. Definizione di grafo Un grafo G=(V,E) consiste in: - un insieme V={v1,…, vn} di vertici (o nodi); - un insieme E={(vi,vj) | vi,vjV} di coppie (non ordinate) di vertici, detti archi. A Esempio: Grafo di Eulero associato alla città di Königsberg: V={A,B,C,D}, E={(A,B), (A,B), (A,D), (B,C), (B,C), (B,D), (C,D)} D B C Nota: È piùpropriamentedettomultigrafo, in quantocontienearchiparalleli.

  27. Torniamo al problemadei 7 ponti… • Definizione: Un grafo G=(V,E) si dice percorribile (oggi si direbbe Euleriano) se e solo se contiene un cammino (non semplice, in generale) che passa una ed una sola volta su ciascun arco in E. • Teorema di Eulero: Un grafo G=(V,E) è percorribile se e solo se è connesso ed ha tuttii nodi di grado pari, oppure se ha esattamente due nodi di grado dispari. • NOTA: Un grafo con tutti i nodi di grado pari può essere percorso partendo da un qualsiasi nodo (e terminando quindi su di esso). Invece, per percorrere un grafo avente due nodi di grado dispari e tutti gli altri di grado pari, è necessario partire da uno qualsiasi dei due nodi di grado dispari, e terminare il percorso sull’altro nodo di grado dispari.

  28. Soluzione al problemadei 7 ponti  Il problemadei 7 pontinon ammettesoluzione, in quanto i 4 nodihannotuttigradodispari, e quindiilgrafo non è percorribile. La cosaimportante da notare è che la percorribilitàpuòovviamenteesserestabilitàefficientemente (addirittura in tempo linearerispettoalladimensione del grafo), semplicementeguardando al gradodeinodi del grafo!

  29. Un problema molto importante su grafi: il cammino minimo tra due nodi 10 2 3 9 u 18 6 6 2 6 4 18 30 11 5 1 8 6 16 20 v 7 44 dato un grafo pesato G=(V,E) con pesi positivi sugli archi, e dati due nodi u e v, trovare un cammino da u a v di costo minimo (che minimizza la somma dei pesi degli archi del cammino) Esistono soluzioni efficienti per tale problema: per esempio, l’algoritmo di Dijkstrapuò essere implementato in O(m + n log n), ove m è il numero di archi e n è il numero di nodi

  30. 2-colorabilità Dato un grafoG (non diretto e non pesato) dire se è possibilecolorare i nodi di G con 2colori in modo tale che per ognicoppia di nodiadiacenti, i due nodiabbianocoloridiversi Esistono soluzioni efficienti per tale problema: basta verificare se il grafo è bipartito mediante una visita in profondità del grafo, la quale richiede tempo O(m + n)

  31. Alcuniproblemi molto simili a cicloEuleriano, camminominimoe 2-colorabilità ma (sorprendentemente) difficili! (per i quali non siconoscenessunalgoritmopolinomiale)

  32. Ciclo Hamiltoniano Dato un grafo non orientato G=(V,E) dire se G ammette un ciclo che passa per tutti i nodi una e una sola volta

  33. Cammino massimo Dato un grafoG (non diretto e non pesato) e due nodis e t, trovareilcammino (semplice) piùlungofras e t s s t t

  34. 3-colorabilità Dato un grafoG (non diretto e non pesato) dire se è possibilecolorare i nodi di G con 3colori in modo tale che per ognicoppia di nodiadiacenti, i due nodiabbianocoloridiversi

  35. Algoritmi approssimati • D. Supponiamo di dover risolvere un problema NP-hard. Cosa posso fare? • R. La Teoria dice che è improbabile trovare un algoritmo che abbia tempo polinomiale. • Dobbiamo sacrificare una delle tre caratteristiche desiderate. • Risolvere il problema all'ottimo. • Risolvere il problema in tempo polinomiale. • Risolvere istanze arbitrarie del problema. • Algoritmo di -approssimazione. • Gira in tempo polinomiale. • Risolve istanze arbitrarie del problema. • Trova soluzioni entro un rapporto  dal vero ottimo. • Sfida. E' necessario dimostrare che il valore di una soluzione è vicino all'ottimo, senza nemmeno sapere quale sia il valore ottimo!

  36. Approssimazione • Un algoritmo che restituisce una risposta C che è “vicina” alla soluzione ottima C* è detto un algoritmo di approssimazione. • La “vicinanza” solitamente è misurata dal limite del rapporto (n) che l'algoritmo produce : • Pb di Minimizzazione: C/C* ≤ (n) • Pb di Massimizzazione: C*/C ≤ (n)

  37. Esempio: VERTEX-COVER • Istanza: un grafo non diretto G=(V,E). • Problema: trovare un insieme CV di taglia minima tale che per ogni (u,v)E, o uC oppure vC. Esempio:

  38. Un algoritmo di 2-approssimazione • C   • E’  E • whileE’   • do sia (u,v) un arco arbitrario di E’ • C  C  {u,v} • rimuovi da E’ ogni arco incidente a u oppure a v. • returnC.

  39. Demo

  40. O(m)=O(n2) O(1) O(n2) O(n) La complessità temporale è O(n3), ossia, polinomiale • C   • E’  E • whileE’  do • sia (u,v) un arco arbitrario di E’ • C  C  {u,v} • rimuovi da E’ ogni arco incidente a u oppure a v • return C

  41. Correttezza L’insieme di vertici che il nostro algoritmo restituisce è chiaramente un vertex-cover, dato che iteriamo fino a che ogni arco viene coperto.

  42. nessunvertice in comune! Quanto è buona un’approssimazione? Osserviamo l’insieme di archi scelti dal nostro algoritmo ogniVC ne contiene1 in ognuno • ilnostroVC li contieneentrambi, quindi è al piùgrandeildoppiorispetto a qualsiasi VC, e in particolare del VC ottimo, cioè: • |nostro VC|/|qualsiasi VC| ≤ 2 e quindi|nostro VC|/|VC ottimo| ≤ 2 •  ilfattore di approssimazione è pari a 2.

  43. Lista tesine Il problemadell’arresto (Di Ghionno) Modelli di calcolo: macchina di Turing e RAM (Gallina) La notazioneasintotica: classi O, Ω e Θ (Gregori) Classi P, NP e ExpTime (Laconi) Selectionsort (Lops) Insertionsort (Massi) Lower bound problema dell’ordinamento (Mitrangolo) Merge sort (Palombo) Ricerca sequenziale e binaria (Terregna) Il problema del cammino minimo (Cetrullo) Algoritmi di approssimazione (Del Casale)

More Related