1 / 47

Terzo passo : lunghezza di una LCS

Terzo passo : lunghezza di una LCS. LCS-Length ( X , Y, m, n ) for i = 0 to m c [ i , 0 ] = 0 for j = 1 to n c [0 , j ] = 0 for j = 1 to n for i = 1 to m if x i == y j c [ i , j ] = c [ i -1 , j -1 ]+1, s [ i, j ] = “  ” elseif c [ i -1 , j ] ≥ c [ i , j -1 ]

laurie
Download Presentation

Terzo passo : lunghezza di una LCS

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. Terzo passo: lunghezza di una LCS LCS-Length(X, Y, m, n) fori = 0 tom c[i, 0] = 0 forj = 1 ton c[0, j] = 0 forj = 1 ton fori = 1 tom ifxi== yj c[i, j] = c[i-1, j-1]+1, s[i, j] = “” elseifc[i-1, j] ≥ c[i, j-1] c[i, j] = c[i-1, j], s[i, j] = “” else c[i, j] = c[i, j-1], s[i, j] = “” returnc,s

  2. Y B D C A B A c s 0 Quarto passo Esempio 0 1 2 3 4 5 6 j X c s 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 X=ABCBDAB Y=BDCABA c s 0 0  0  0  1  1  1  A B C B D A B c s 0 1  1  1  1  1  1  2  2  LCS=BCBA LCS=...A LCS=.CBA LCS=..BA LCS=.... c s 0 1  1  2  2  2  2  2  2  c s 0 1  1  2  2  3  3  3  c s 0 1  2  2  2  3  3  3  c s 0 1  2  2  3  3  4  4  c s 0 1  2  2  3  4  4  4  i

  3. Quarto passo: Stampa della LCS Print-LCS(X, s, i, j) ifi > 0 andj > 0 ifs[i, j] == “” Print-LCS(X, s, i-1, j-1) printX[i] elseifs[i, j] == “” Print-LCS(X, s, i-1, j) else Print-LCS(X, s, i, j-1)

  4. Y B D C A B A Metodo top-down Esempio 0 1 2 3 4 5 6 j X c s 0 0 0 0 1 2 3 4 5 6 7 c s 0 0  0  0  1  A B C B D A B X=ABCBDAB Y=BDCABA c s 1  1  1  1  c s 0 1  1  2  2  c s 1  1  2  2  3  c s 2  2  2  3  c s 3  4  c s 4  4  i

  5. Vi sono più triangolazioni possibili dello stesso poligono Triangolazione ottima Una triangolazione di un poligono convesso è una suddivisione del poligono in triangoli ottenuta tracciando delle diagonali che non si intersecano .

  6. In questo problema sono dati i vertici q1,q2,…,qndi un poligono convesso P presi in ordine antiorario. Ad ogni triangolo T è attribuito un costo c(T). Ad esempio c(T) potrebbe essere la lunghezza del perimetro, la somma delle altezze, il prodotto delle lunghezze dei lati, (l’area ?), ecc. Si vuole trovare una triangolazione del poligono P tale che la somma dei costi dei triangoli sia minima.

  7. Siano q1qkqn i vertici del triangolo T a cui appartiene il lato q1qn qk qn T q1 In quanti modi possiamo suddividere in triangoli un poligono convesso di n vertici? Ogni lato del poligono P appartiene ad un solo triangolo della triangolazione .

  8. Il triangolo T suddivide il poligono P nel triangolo Tstesso e nei due poligoni P1 e P2 di vertici q1,…,qke qk,…,qn qk P2 qn P1 T q1 Il vertice qk può essere scelto in n-2 modi diversi e i due poligoni hanno rispettivamente n1 = ked n2 = n-k+1 vertici. P1 quando k = 2e P2 quando k = n-1sono poligoni degeneri, ossia sono un segmento.

  9. Il numero T(n) di triangolazioni possibili di un poligono di n vertici si esprime ricorsivamente come segue E’ facile verificare che T(n) = P(n-1) dove P(n) sono le parentesizzazioni del prodotto di nmatrici. Quindi T(n) cresce esponenzialmente.

  10. Primo passo: struttura di una triangolazione ottima. Supponiamo che una triangolazione ottima suddivida il poligono convesso P di vertici q1q2...qnnel triangolo T di vertici q1qkqn e nei due poligoni P1 e P2 di vertici q1…qk e qk…qnrispettivamente. Le triangolazioni subordinate di P1 e di P2 sono triangolazioni ottime. Perché?

  11. Secondo passo: soluzione ricorsiva I sottoproblemi sono le triangolazioni dei poligoni Pi..jdi vertici qi…qj. Sia ci,j la somma dei costi dei triangoli di una triangolazione ottima di Pi..j. Se j = i+1 allora Pi..jè degenere e ci,j = 0. Se j > i+1 allora Pi..jsi può scomporre in un triangolo T di vertici qiqkqj e nei due poligoni P1 e P2 di vertici qi…qk e qk…qj con i < k < j

  12. Terzo passo: calcolo costo minimo Triangulation-Cost(q, n) fori = 1 ton-1 c[i, i+1] = 0 forj = 3 ton fori = j-2 downto 1 c[i, j] =  fork = i+1 toj-1 q = c[i, k]+c[k, j]+c(qiqkqj) ifq < c[i, j] c[i, j] = q s[i, j] = k returnc,s Complessità: O(n3)

  13. Quarto passo: Stampa triangolazione Print-Triangulation(s, i, j) ifj > i+1 k = s[i, j] Print-Triangulation(s, i, k) print “triangolo:”, i, j, k Print-Triangulation(s, k, j) Complessità: O(n)

  14. Algoritmi golosi • Tecnichedisoluzionedeiproblemivistefinora: • Metodoiterativo • Divide et impera • Programmazionedinamica • Nuovatecnica: • Algoritmigolosi

  15. Metodoiterativo Soluzione del problemadidimensionei Soluzione del problemadidimensionen Soluzione del problemadidimensionei-1

  16. Sottoproblemi Soluzioni Soluzioni Soluzioni Sottosottoproblemi Sottoproblemisemplici Divide et impera Problema Soluzioni Soluzioni Soluzioni

  17. In un problema di ottimizzazione abbiamo un insieme generalmente molto grande di soluzioni e dobbiamo scegliere tra di esse una soluzione che sia ottima in qualche senso (costo minimo, valore massimo, lunghezza minima, ecc.) Ottime Soluzioni possibili

  18. Possiamo risolvere un problema di questo tipo con una enumerazione esaustiva - si generano tutte le soluzioni possibili, - si calcola il costo di ciascuna di esse - e infine se ne seleziona una di ottima. Purtroppo l’insieme di soluzioni è generalmente molto grande (spesso esponenziale nella dimensione dell’input) per cui una enumerazione esaustiva richiede tempo esponenziale.

  19. Problema Soluzioni Sottoproblemi Soluzioni Soluzioni Soluzioni Molto spesso le soluzioni di un problema di ottimizzazione si possono costruire estendendo o combinando tra loro soluzioni di sottoproblemi. Esempio: Problema Torino-Trieste. Sottoproblemi: Torino-Asti, Asti-Trieste; Torino-Novara, Novara-Trieste, ecc.

  20. Abbiamo visto che perché la programmazione dinamicasia vantaggiosa rispetto all’enumerazione esaustiva bisogna che siano soddisfatte due condizioni: • Esistenza di sottoproblemi ripetuti. • Sottostruttura ottima.

  21. Soluzioni Soluzioni Soluzioni Sottoproblemiripetuti Problema Soluzioni Sottoproblemi Sottosottoproblemi Soluzioni Sottoproblema ripetuto Soluzioni Sottoproblemi semplici

  22. Ott Ott Ott Ott Ott Ott Ott Ott Ott Ott Sottostrutturaottima Combinazionidisoluzioniottimedeisottoproblemi Ott Problema Soluzioni Soluzioniottime Sottoproblemi Soluzioni ottime Soluzioni ottime Sottosottoproblemi Soluzioni ottime Sottoproblemisemplici

  23. Ott Soluzioni Ott Ott Ott Ott Ott Ott Ott Ott Ott Ott Sottoproblemi ripetuti Programmazionedinamica Problema Sottoproblemi Sottosottoproblemi Sottoproblemi semplici

  24. Ott Soluzioni Ott Ott Ott Ott Ott Ott Ott Ott Ott Ott Algoritmigolosi Sceltagolosa Problema Sottoproblemi Sottosottoproblemi Sottoproblemi semplici

  25. ogni volta si fa la scelta che sembra migliore localmente. • in questo modo per alcuni problemi si ottiene una soluzione globalmente ottima.

  26. Problema della scelta delle attività nattivitàa1,...,anusano la stessa risorsa (es: lezioni da tenere in una stessa aula). Ogni attività ai ha un tempo di iniziosi ed un tempo di fineficon si<fi. ai occupa la risorsa nell’intervallo di tempo [si, fi). ai ed aj sono compatibili se [si, fi) ed [sj, fj) sono disgiunti. Problema: scegliere il massimo numero di attività compatibili.

  27. Storiella Golosa Personaggi: L’algoritmo goloso Pinocchio Il grillo parlante Controlla Pinocchio La fata turchina Conosce il futuro

  28. Pinocchio arriva nella Città dei Balocchi e può scegliere i divertimenti che preferisce Ogni divertimento ha un’orariodi inizio ed una durata Voglio scegliere il maggior numero possibile di divertimenti. Perciò comincio scegliendo il divertimento che inizia per primo!! Così non perdo tempo. Attenzione Pinocchio!!! Se fai così non è detto che tu possa scegliere il maggior numero di divertimenti

  29. Allora scelgo il divertimento che dura di meno!! Così mi rimane più tempo per gli altri. Attenzione Pinocchio!!! Anche così non è detto che tu possa scegliere il maggior numero di divertimenti

  30. Allora scelgo il divertimento che non si sovrappone a troppi altri!! Così me ne rimangono di più tra cui scegliere. Uffa!! Ma sei proprio un rompiscatole!! Ora riprovo e se non ti va ancora bene ti schiaccio con il martello. Attenzione Pinocchio!!! Anche così non è detto che tu possa scegliere il maggior numero di divertimenti

  31. Io conosco una soluzione ottima ma non la mostro a nessuno. Scelgo il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Ossia deve esistere una soluzione ottima a cui Pinocchio può arrivare dopo aver fatto la scelta (la proprietà della scelta golosa). Ma per questo dovrei conoscere il futuro. Qui mi serve l’aiuto della fatina. So che la fatina conosce una soluzione ottima. Insegnerò alla fatina come modificare la sua soluzione ottima in modo che contenga il divertimento “D”. Mumble…, per dimostrarlo debbo provare che la scelta di quel monello non lo conduce in un vicolo cieco. Bene Pinocchio!! In questo modo prendi sicuramente il massimo numero di divertimenti ed io posso dimostrarlo.

  32. Io conosco una soluzione ottima ma non la mostro a nessuno. Io conosco una soluzione ottima che contiene “D”. Ho scelto il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Primo caso: Cara fatina, se la tua soluzione contiene il divertimento “D” lasciala invariata. Ora so che la fatina conosce una soluzione ottima che contiene il divertimento “D”. Mumble… se la soluzione della fatina contiene già “D” non ci sono problemi.

  33. Io conosco una soluzione ottima ma non la mostro a nessuno. Ho scelto il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Secondo caso: Mumble…. se la soluzione della fatina non contiene “D” devo dirgli di mettere “D” al posto di un altro divertimento. Mumble…. il primo divertimento nella soluzione della fatina termina dopo “D” e quindi “D” è compatibile con i successivi Cara fatina, se la tua soluzione non contiene il divertimento “D” metti “D” al posto del primo divertimento.

  34. D D2 ………………….. Dm D1 D2 ………………….. Dm

  35. Io conosco una nuova soluzione ottima che contiene “D”. Ho scelto il divertimento “D” che termina per primo!! Così quando ho finito mi rimane più tempo per gli altri. Ora so che la fatina conosce una soluzione ottima che contiene il divertimento “D”.

  36. Io conosco una soluzione ottima che contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora. Ora scelgo il divertimento “D” che termina per primo tra quelli non ancora iniziati. Mumble… devo mostrare che esiste una soluzione ottima che contiene sia “D” che tutti i divertimenti scelti prima. Insegnerò alla fatina come modificare la sua soluzione ottima in modo che contenga anche “D”.

  37. Io conosco una soluzione ottima che contiene i divertimenti scelti finora compreso il divertimento “D”. Io conosco una soluzione ottima che contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora ed ora ho scelto quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. Primo caso: Mumble… se la soluzione della fatina contiene il divertimento “D” non ci sono problemi. Cara fatina, se la tua soluzione contiene il divertimento “D” lasciala invariata.

  38. Io conosco una soluzione ottima che contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora ed ora ho scelto quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. Secondo caso: Mumble… se la soluzione della fatina non contiene “D” devo metterlo al posto di un altro. Non posso certo metterlo al posto di uno di quelli scelti prima e che so essere tutti contenuti nella soluzione della fatina. Non posso neppure metterlo al posto di uno già iniziato perché questi sono incompatibili con quelli scelti prima. Mumble… Il primo che nella soluzione della fatina segue quelli già scelti deve terminare dopo “D”. Quindi tutti gli altri sono compatibili con “D”. Cara fatina, se la tua soluzione non contiene il divertimento “D” mettilo al posto del primo divertimento che nella tua soluzione segue quelli già scelti da Pinocchio.

  39. D1 ….. Dk D Dk+2 ….. Dm ora attuale D1 ….. Dk Dk+1 Dk+2 ….. Dm

  40. Io conosco una nuova soluzione ottima che contiene i divertimenti scelti finora da Pinocchio compreso “D”. Ho finito tutti i divertimenti scelti finora ed ora ho scelto quel divertimento “D” che terminerà per primo tra quelli non ancora iniziati. So che la fatina conosce una soluzione ottima che contiene tutti i divertimenti scelti finora da Pinocchio compreso “D”.

  41. Io conosco una soluzione ottima che contiene tutti i divertimenti scelti finora da Pinocchio. Ho finito tutti i divertimenti scelti finora ma tutti gli altri sono già iniziati. Mumble… la soluzione ottima della fatina contiene tutti i divertimenti scelti finora e non ci sono altri divertimenti compatibili. Quindi la soluzione ottima della fatina non contiene altri divertimenti e quelli scelti finora da Pinocchio sono una soluzione ottima.

  42. Strategie golose: Scegliere l’attività che inizia per prima Non funziona Scegliere l’attività che dura meno tempo Non funziona Scegliere l’attività incompatibile con il minor numero di altre attività Non funziona

  43. Strategia che funziona: Scegliere l’attività che termina per prima. ActivitySelector(Att) AttScelte=Ø, AttComp= Att whileAttComp≠Ø “ inAttCompscegli l’attività ‘a’ che termina per prima, aggiungi ‘a’a AttSceltee togli da AttComptutte le attività incompatibili con ‘a’ ” returnAttScelte

  44. Per implementarla supponiamo le attività a1,...,anordinate per tempo di fine non decrescente f1≤ ... ≤fn Altrimenti possiamo ordinarle in tempo O(n log n) ActivitySelector(a, s, f, n) // f1≤ ... ≤ fn A= {a1}, k = 1 form = 2ton ifs[m] ≥ f[k] A = A⋃ {am}, k = m returnA

  45. f[k] i si fi 1 1 4 2 0 5 3 1 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 9 8 12 10 2 13 11 12 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a2 a2 a1 a1 a3 a3 a10 a10 a5 a5 a4 a4 a6 a6 a7 a7 a8 a8 a9 a9 ActivitySelector(a, s, f, n) A= {a1}, k = 1 form = 2ton ifs[m] ≥ f[k] A = A⋃ {am}, k = m returnA a11 a11 tempo

  46. La soluzione trovata contiene quattro attività Due domande: • La soluzione trovata con l’algoritmo goloso è l’unica possibile che contiene quattro attività? • La soluzione trovata con l’algoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività?

  47. i si fi 1 1 4 2 0 5 3 1 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 9 8 12 10 2 13 11 12 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a2 a1 a3 a10 a5 a4 a6 a7 a8 a9 a11 tempo

More Related