Download Presentation
Curs 8

Loading in 2 Seconds...

1 / 19

# Curs 8 - PowerPoint PPT Presentation

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:

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

## PowerPoint Slideshow about 'Curs 8' - kamaria

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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:
• 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
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”
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]
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]

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)
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’)

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 
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?
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
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
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?
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

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 }
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)
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,
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)))