1 / 16

Cursul 5

Cursul 5. Paradigma algoritmilor “greedy” Prezentarea generala a paradigmei Studii de caz memorarea programelor rucsac (varianta continua) arbori Huffman arborele partial de cost minim. Algoritmi “greedy” - ingrediente. probleme de optim proprietatea de alegere locala (“greedy”)

heavynne
Download Presentation

Cursul 5

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. Cursul 5 • Paradigma algoritmilor “greedy” • Prezentarea generala a paradigmei • Studii de caz • memorarea programelor • rucsac (varianta continua) • arbori Huffman • arborele partial de cost minim

  2. Algoritmi “greedy” - ingrediente • probleme de optim • proprietatea de alegere locala (“greedy”) • solutia de optim global poate fi obtinuta facind alegeri optime locale (“greedy”) • alegerea optima locala curenta poate depinde de alegerile de pina atunci dar nu si de cele viitoare • trebuie demonstrat ca alegerile optime locale conduc la obtinerea optimului global • proprietatea de substructura optima • solutia optima a problemei contine solutiile optime ale subproblemelor

  3. Algoritmi “greedy” – o prima formalizare • S – o multime de intrari • C(S) • obiectele din C(S) sunt submultimi ale lui S • operatii: X  {x}, X – {x} • Problema • Intrare: S, f : C(S)  R • Iesire: B obiect maximal din C(S) care optimizeaza f • B este construita incremental • Alegerea locala • alege x a. i. B  {x}  C(S) • x defineste un optim local • proprietatea de substructura optima • fie x primul ales de alg. greedy • solutia problemei initiale include solutia subproblemei coresp. lui S’ = S – {x}, C(S’) = {B  S’ | B  {x}  C(S)}, f restrictionata la C(S’)

  4. Memorarea eficienta a programelor - formulare • instanta • n obiecte 0,1, ..., n-1 de marimi (lungimi) L0, L1 , ..., Ln-1 • presupunem cele n obiecte asezate intr-o lista liniara in ordinea ((0), ..., (n-1)) • timpul de regasire a obiectului de pe pozitia k este t(k) = i=0,k L(i) • timpul mediu de regasire este TM() = 1/nk=0,n-1t(k) • iesire • o asezare a obiectelor in lista a.i. timpul mediu de regasire sa fie minim

  5. Memorarea eficienta a programelor – algoritm “greedy” • exemplu • L = (40, 10, 60, 30) • TM(id) = (40 + 50 + 110 + 140)/4 = 340/4 = 85 •  = (1, 3, 0, 2) • TM() = (10 + 40 + 80 + 140) = 270/4 < 85 • algoritm “greedy”: alege la pasul curent un obiect neales inca de lungime minima • alegerea “greedy” duce la obtinerea optimului global •  o permutarea a.i. i < j si L(i) > L(j) • ’ = (i,j) ( inmultit cu transpozitia (i,j)) • TM(’) < TM() • rezulta ca  este optima daca (i,j) i < j  L(i)  L(j) • permutarea calculata de alg. greedy satisface ac. prop. • proprietatea de substructura optima (?) • timp: O(n log n) • spatiu suplimentar: O(1)

  6. Memorarea eficienta a programelor – algoritm “greedy”, formal • S = {(i,j) | 0  i, j < n} • X  C(S) daca: ((i,j), (i’,j’)  X) i = i’  j = j’ • alegerea locala: • (k, i) a.i. k este prima pozitie libera si L(i) minim peste obiectele nealese • B  B  {(k,i)} • in final B descrie permutarea  care ordoneaza obiectele crescator dupa marime • proprietatea de substructura optima • permutarea  “include” permutarea ce ordoneaza crescator dupa marime obiectele {0,1,…,n-1} – (0) (eliminarea celui mai mic obiect)

  7. Problema rucsacului (varianta continua): formulare • instanta: • n obiecte 0, 1, ..., n-1 de dimensiuni (greutati) w0, w1, ..., wn-1 • un rucsac de capacitate M • introducerea in rucsac a unei parti fractionare xi din obiectul i aduce un profit xi pi • profitul total adus de alegerile x0, ..., xn-1 este i=0,n-1 xipi • iesire: • o alegere pentru care profitul adus este maxim

  8. Problema rucsacului: solutie “greedy” care nu-i OK • la pasul curent alege obiectul cu profitul pi cel mai mare • contraxemplu: • n = 3, p = (3, 4, 6), w = (6, 4, 8), M = 10 • profitul = 8 cu alegerea (0, ½, 1)

  9. Problema rucsacului: solutie “greedy” OK • la pasul curent • alege obiectul ce aduce profit maxim pe unitatea de greutate (pi/wi) • daca este loc suficient in rucsac, obiectul se introduce in totalitate (xi = 1) • altfel obiectul este introdus partial (maxim din cit se poate, 0  xi < 1) si procesul de alegere se opreste • exemplu (continuare): • p/w = (3/6, 4/4, 6/8) • profitul = 17/2 cu alegerea (0, 1, 6/8) Teorema Solutia calculata de algoritmul “greedy” este optima • demonstratie • timp: O(n log n) • spatiu suplimentar: O(n)

  10. Problema rucsacului: solutie “greedy”, formalizare • S = {(i,x) | 0  i < n, x  [0,1]} • X  C(S) daca: ((i,x), (i’,x’)  X) i = i’  x = x’ (xwi | (i,x)  X)  M • alegerea locala: • (i, xi) a.i. i aduce profit maxim pe unitatea de greutate si x cantit maxima ce incape in rucsac • B  B  {(i, xi)} • proprietatea de substructura optima • solutia x include solutia x’corespunzatoare subproblemei P’ obtinuta din P prin eliminarea obiectului i cu profit maxim pe unitatea de greutate si M’ = M – wi

  11. Coduri Huffman • Coduri liber (independent) de prefix optime • instanta • n mesaje M0, M1, ..., Mn-1 cu frecventele f0, f1, ..., fn-1 • cod(Mi)  {0,1}*, i,j: i  j  cod(Mi) nu este prefix a lui cod(Mj) • lungimea medie a codificarii = 1/n i=0,n-1 (|cod(Mi)|fi) • iesire • o codificare cu lungimea medie minima

  12. Coduri Huffman: reprezentarea unei codificari ca arbore 0 1 1 1 0 0 2 1 B 0 0 1 4 A 2 R 1 U 0 1 H • HARABABURA

  13. Coduri Huffman: algoritm “greedy” f0 f1 fn-1 n1+ n2  n2 n1 n2 n1 • initial: n arbori cu un singur nod etichetati cu fi • pasul curent T1 T2 T1 T2 cu n1, n2 minime peste multimea radacinilor

  14. Proprietati ale codurilor Huffman Lema Fie cod o codificare optima. Daca fi < fj atunci |cod(Mi)|  |cod(Mj)| (mesajele cu frecvente mai mari au lungimile codurilor mai mici) • demonstratie Lema Orice codificare optima poate fi transformata intr-o codificare Huffman cu aceeasi lungime medie. • demonstratie

  15. Coduri Huffman: algoritm “greedy”, formalizare • S – cea mai mica multime de arbori construita astfel: • fi S • T1, T2  S  T1  T2  S • X  C(S) daca: (T X) T = fi sau ( T1, T2  X) T = T1 T2 X este finita f(X) = max{suma_ponderata(T) | T  S} • alegere locala B = B  {T1  T2}, T1, T2 cu radacini minime in B • proprietatea de substructura optima • solutia problemei coresp. intrarii f0, f1, ..., fn-1 “include” solutia subproblemei coresp. intrarii f0 + f1, ..., fn-1, unde f0, f1 sunt minime

  16. Coduri Huffman: implementare C = zona auxiliara A = min-heap cu radacinile B = noduri care nu-s radacini inf stg drp . . . 0 1 • initial cele n noduri se afla in heap-ul A • la pasul curent: • se extrag primele doua radacini n1 si n2 din heap-ul A • se introduce n1+n2 in heap-ul A • se adauga n1 si n2 la B • A se micsoreaza cu o unitate, B se mareste cu doua unitati, C scade cu o unitate • timp: O(n log n) • spatiu: O(n)

More Related