1 / 19

Curs 8

Curs 8. Paradigma Programare dinamica Studii de caz distanta intre siruri subsecventa crescatoare de lungime maxima Prezentarea formala a paradigmei. Distanta intre siruri – problema. instanta doua siruri a si b de lungime n asupra lui a se pot face operatiile:

kamaria
Télécharger la présentation

Curs 8

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. Curs 8 • Paradigma Programare dinamica • Studii de caz • distanta intre siruri • subsecventa crescatoare de lungime maxima • Prezentarea formala a paradigmei

  2. Distanta intre siruri – problema • instanta • doua siruri a si b de lungime n • asupra lui a se pot face operatiile: • modificare: M(i, c) daca ai c • stergere: S(i) • inserare: I(i, c) • iesire • o secventa de operatii de lungime minima care transforma sirul a in b • exemplu • a = “armata”, b = “camara” • “armata”  “amata”  “camata”  “camara” • d[“armata”, “camara”] = 3

  3. Distanta intre siruri – propretati • ordinea operatiilor intr-o secventa optima nu are importanta • “armata”  “amata”  “camata”  “camara” • “armata”  “amata”  “amara”  “camara” • “armata”  “carmata”  “camata”  “camara” • “armata”  “carmata”  “carmara”  “camara” • “armata”  “armara”  “amara”  “camara” • “armata”  “armara”  “carmara”  “camara”

  4. Distanta intre siruri – proprietati (cont.) • exista o secventa optima in care sirurile intermediare au lungimea  n • d[a,b] este o metrica: • d[a, a] = 0 • d[a, b] = d[b, a] • d[a, c] d[a, b] + d[b, c]

  5. Distanta intre siruri – model • stare: DES[i,j] = determinarea distantei minime intre subsirurile de lungime i si respectiv j • valoarea asociata unei stari: [i,j] • functia asociata unei stari: d[i, j] = d[a[1..i], b[1..j]] • decizie: • presupunem ca b[j] se obtine prin stergere: DES[i,j]  DES[i-1, j] • presupunem ca b[j] se obtine prin modificare: DES[i,j]  DES[i-1, j-1] • presupunem ca a[i] se obtine prin inserare: DES[i,j]  DES[i, j-1]

  6. Distanta intre siruri – model (cont.) • relatia de recurenta d[0, j] = j, d[i, 0] = i (i, j) d[i, j] = min{d[i-1, j] + 1, d[i-1, j-1] + [i, j], d[i, j-1] + 1} [i, j] = if (a[i] = b[j]) then 0 else 1 • timp: • calculului matricii d: O(n2) • determinarea secventei de operatii: O(n) • spatiu: O(n2)

  7. Distanta intre siruri - exemplu c a m a r a 2 3 4 5 6 a 1 1 2 3 4 5 r 2 2 2 3 3 4 m 3 3 3 3 4 4 a 4 4 3 3 3 4 t 5 5 4 4 3 4 a 6 6 5 5 4 4 0 1 1 2 2 2 3 3 ( M(5,’r’), S(2), ) I(1,’c’)

  8. Distanta intre siruri - variatii • alte operatii: • transpozitia: schimba ordinea a doua caractere adiacente • distanta Levenshtein (de editare) • sunt admise numai inserari, stergeri si inlocuiri • toate operatiile au costul 1 • distanta Hamming • sunt admise numai inlocuirile • costul operatiei este 1 • este finita ori de cate ori |a| = |b| • distanta “episodica” (episode distance) • sunt admise numai inserari • costul operatiei este 1 • distanta este sau |b|-|a| sau 

  9. Distanta intre siruri - variatii • distanta data de cea mai lunga subsecventa • sunt admise numai inserari si stergeri • toate operatiile au costul 1 a = “amxbtycsnma” si b = “bancxstymcxn” “amxbtycsnma”  “bamxbtycsnma”  “baxbtycsnma”  “banxbtycsnma”  “bancxbtycsnma”  “bancxtycsnma”  “bancxstycsnma”  “bancxstymcsnma”  “bancxstymcnma”  “bancxstymcxnma”  “bancxstymcxna”  “bancxstymcxn” = b • (a,x,t,y,c,n) este subsecventa comuna • este cea mai lunga?

  10. Distanta intre siruri - aplicatii • “matching” aproximativ peste siruri (aproximate string matching) • problema: dat un text s de lungime n, un patern p de lungime m, o distanta d() intre siruri si un numar k, sa se determine pozitiile j din textul s astfel incat sa existe i cu d(p, s[i..j])  k • distanta Levenshtein: “string matching with k differences” • distanta Hamming: “string matching with k missmatches” • distanta episodica: “episode matching” (modeleaza cazul cand se cauta o secventa de evenimente intr-o perioada scurta de timp) • cea mai lunga subsecventa comuna: exact ce spune numele • procesul de cautare: • a = p, b = s • trebuie sa modificam alg. a.i. orice pozitie j din text este startul potential al unei potriviri; asta se realizeaza prin setarea d[0,j] = 0

  11. Distanta intre siruri - aplicatii • calculul matricei se face pe coloane • initial: d[i, 0] = i pentru i = 0, …, m • se proceseaza textul caracter cu caracter • presupunem ca la pasul curent se proceseaza sj • coloanaj este actualizata: d[i, j] = if (pi = sj) then d[i-1, j-1] else 1 + min(d[i-1, j], d[i, j-1], d[i-1, j-1]) • pozitiile j pentru care d[m,j]  k sunt raportate • de remarcat ca numai ultimele doua coloane sunt necesare

  12. Distanta intre siruri - aplicatii

  13. Parallelizing

  14. Subsecventa crescatoare maximala – problema • instanta • o secventa de numere intregi a = (a1, a2, …, an) • stergand cateva elemente din a se obtine o subsecventa • o subsecventa pastreaza ordinea relativa a elementelor • exemplu: • a = (9, 3, 15, 12, 7, 4, 13, 6, 8) • subsecventa: (3, 12, 7, 6) • subsecventa crescatoare: ( 3, 7, 13) • iesire: subsecventa crescatoare de lungime maxima • exemplu: exista o subsecventa crescatoare de lungime > 3? • cum se poate rezolva utilizand distanta de editare?

  15. Subsecventa crescatoare maximala – model • a = (9, 3, 15, 12, 7, 4, 13, 6, 8) 1 2 3 4 5 6 7 8 9 • construim un graf G: • varfuri: 0, 1, 2, …, 9 • arce: { (0,i) | i > 0 }  { (i,j) | a[i] <= a[j] } 0 1 2 3 4 5 6 7 8 9

  16. Subsecventa crescatoare maximala – model • subsecventa crescatoare = drum in G • subsecventa crescatoare maximala = drum de lungime maxima in G • asociem o matrice de costuri: • c[i, j] = 1 daca i < j si (a[i] <= a[j] sau i = 0) • c[i,j] = -  altfel • stare: SCM(i) = subproblema determinarii celui mai lung drum ce se termina in i • L[i] = valoarea optima pentru SCM(i) • PO implica L[i] = L[j] + c[j,i], j predecesorul lui i pe drumul optim • relatia de recurenta: • L[0] = 0 • L[i] = max { L[j] + c[j,i] | j < i }

  17. Subsecventa crescatoare maximala – model • a = (9, 3, 15, 12, 7, 4, 13, 6, 8) 0 1 2 3 4 5 6 7 8 9 L = (0, 1, 1, 2, 2, 2, 2, 3, 3, 4) • extragerea solutiei: • s[4] = 9 • s[3] = 8 • s[2] = 6 • s[1] = 2 • s[0] = 0 • timp de executie: O(n2) • spatiu suplimentar: O(n)

  18. Programare dinamica – prezentare formala • Modelul matematic • probleme de optim • functia obiectiv: optim R(x1, ..., xn) • restrictii: g(x1, ..., xn) ? 0 • decizie: d: s  s’ • unei stari s asociem o valoare z si o functie f(z) a.i. daca s corespunde starii initiale atunci f(z) = optim R(x1, ..., xn) • politica: d1: s0 s1, d2: s1 s2, . . . , dn: sn-1 sn,

  19. Programare dinamica – prezentare formala (cont.) • PO conduce la o relatie de recurenta: • daca • d: s  s’ (sau d: s’  s) • z val. asociata lui s, T(z,y) val. asociata lui s’, • H algoritmul care calculeaza f(z) conform lui d, atunci, aplicind PO, obtinem f(z) = optimy H(z, y, f(T(z,y)))

More Related