380 likes | 665 Views
Paradigma algoritmilor “greedy”. Prezentarea generala a paradigmei Studii de caz memorarea programelor rucsac (varianta continua) arbori Huffman. Algoritmi “greedy” - ingrediente. probleme de optim proprietatea de alegere locala (“greedy”)
E N D
Paradigma algoritmilor “greedy” • Prezentarea generala a paradigmei • Studii de caz • memorarea programelor • rucsac (varianta continua) • arbori Huffman
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
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 (sau ultimul) 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’)
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/nk=0,n-1t(k) • iesire • o asezare a obiectelor in lista a.i. timpul mediu de regasire sa fie minim
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)
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)
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
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)
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)
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 xi 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 – xi
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
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
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
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
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 si T1 T2 nu este 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
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)
Paradigma algoritmilor “greedy” (continuare) • Studii de caz • arborele partial de cost minim • secventializarea activitatilor • Prezentarea formala a paradigmei
Arborele partial de cost minim - formulare • instanta: • un graf ponderat (G, w), G = (V, E), w : E R • arbore = graf conex fara cicluri • subgraf partial: G’ = (V, E’) cu E’ E • arbore partial = subgraf partial + arbore • costul unui arbore partial este w(G’) = {i,j}E’ w({i,j}) • iesire: • un arbore partial de cost minim
Arborele partial de cost minim – algoritm generic procedure APCM(G, w) begin A E1 E while ((V, A) nu este arbore partial) do alege din E1 o muchie {i,j} “sigura” pentru A E1 E1 - {{i,j}} A A {{i,j}} end • muchia {i,j} “sigura” pentru A A {{i,j}}este submultime a unui arbore partial de cost minim
Arborele partial de cost minim – algoritmul lui Kruskal 10 10 20 20 50 20 30 30 30 40 10 10 • A este o padure • pasul de alegere locala alege o muchie de cost minim ce uneste doi arbori din A • structura de date pentru A: union-find
Arborele partial de cost minim – algoritmul lui Kruskal (cont) procedure APCM_Kruskal(G, w) begin A for eachi in V do single(i) sorteaza E crescatordupa w for each {i,j} in E in ordinecrescatoare do if (find(A, i) find(A, j) then union(A, i, j) end • Complexitate: O(m log m), unde m estenumarul de muchii
Algoritmul lui Kruskal - formalizare • S = multimea de muchii • X C(S) daca X este padure • alegere locala: • adauga la B muchia {i,j} de cost minim a.i. • {i,j} uneste doi arbori din B (B {{i,j}} C(S) ) • {i,j} de cost minim peste muchiile care satisfac proprietatea de mai sus • proprietatea de substructura optima • muchia {i,j} adaugata prima data imparte B in doi subarbori: B1=(V1, E1), B2 = (V2, E2) cu V = V1 V2 • fie G1, G2 subgrafurile induse de V1 resp. V2 • B1 este APCM pentru G1 si B2 este APCM pentru G2
Arborele partial de cost minim – algoritmul lui Prim 10 10 20 20 50 20 30 30 30 50 40 10 10 40 • A este arbore cu radacina r • pasul de alegere locala alege o muchie de cost minim ce se poate adauga la A mentinind proprietatea de arbore • structura de date pentru A: arbore reprezentat prin legatura parinte • structura de data pentru E1: un min-heap Q cu cheie[i] = ponderea minima peste ponderile muchiilor ce unesc pe i cu un virf ales deja
Arborele partial de cost minim – algoritmul lui Prim procedure APCM_Prim(G, w, r) begin Q V for fiecare i in Q do cheie[i] cheie[r] 0; parinte[r] -1 while (Q ) do citeste(Q,i); elimina(Q) for (fiecare j in listaDeAdiac[i]) do if (j Q and w({i,j}) < cheie[j]) then parinte[j] = i; cheie[j] w({i,j}) end • Complexitate asimptotica: O(n log n)+O(m log n) = O(m log n), unde m este numarul de muchii si n este numarul de varfuri
Algoritmul lui Prim- formalizare • S = multimea de muchii • X C(S) daca X estearbore • alegerelocala: • adauga la B muchia {i,j} de cost minim a.i. • B {{i,j}} arbore ( C(S) ) • {i,j} de cost minim pestemuchiile care satisfacproprietatea de maisus • proprietatea de substructura optima • fie {i,j} ultimamuchiealeasaa.i. j nu e in arboreinainte de alegerealocala • B – {{i,j}} este APCM pentrugrafulindus de V – {j}
Secventializarea optima a activitatilor: formulare • Intrare: • n activitati 0,1,2, …,n-1 • fiecare activitate dureaza o unitate de timp • realizarea activitatii i aduce profitul p(i) > 0 • activitatea i trebuie terminata la termenul limita d(i) (deadline) • Iesire • o lista liniara s = (s(0),…, s(k-1)) de activitati a.i. • orice activitate s(i) este realizata in termen, d(s(i)) i+1 • profitul este maxim
Secventializarea optima a activitatilor: exemplu • o solutie posibila: (0, 3,1) cu profitul 20 + 25 + 35 = 80 • d(0) = 2 1, d(3) = 2 2, d(1) = 3 3 • o alta solutie posibila: (2, 3,1) cu profitul 35 + 25 + 35 = 95 • d(2) = 1 1, d(3) = 2 2, d(1) = 3 3 • exista vreo solutie mai buna?
Secventializarea optima a activitatilor: model mat. • solutie acceptabila: s = (s(0),…, s(k-1)) a.i. (i) d(s(i)) i+1 (orice activitate este realizata in timp) • solutia optima: s* a.i. s* aduce profit maxim peste solutiile acceptabile i p(s*(i)) = max{i p(s(i)) | s acceptabila} • reordonarea unei solutii acceptabile in ordinea crescatoare a termenelor limita produce tot o solutie acceptabila (2, 0, 1) solutie acceptabila (0, 2, 1) solutie acceptabila Rezulta ca putem reprezenta o solutie acceptabila ca o multime: {0, 1, 2}; secventa acceptabila se obtine ordonand multimea dupa termenii limita
Secventializarea optima a activitatilor: model mat. • criteriul de alegere locala: B B {i} unde i este activitatea de profit maxim a.i. B {i} este solutie acceptabila • Teorema. Daca B este determinata de algoritmul greedy, atunci orice secventializare acceptabila a lui B este optima. s = (2,3,1) B = Ø B = {1} B = {1,2} B = {1,2,3} Ideea de demonstratie: Fie B’solutie optima. Daca B B’ si B are r elemente comune cu B’, se construieste o alta solutie optima B’’ din B’ a.i. B si B’’ au r+1 elemente comune.
Secventializarea optima a activitatilor: model mat. • S = multimea activitatilor • C(S): X C(S) daca X este solutie acceptabila (admite o secventializare acceptabila) • proprietatea de alegere locala: • vezi slide-ul precedent • proprietatea de substructura optima: • daca i este prima activitate aleasa, atunci B-{i} este solutie optima pentru subproblema obtinuta prin eliminarea lui i
Algoritmi “greedy” – formulare matematica • modelul matematic • S multime de stari, C colectie de submultimi ale lui S • axioma de accesibilitate (AA) X C: X (x X: X {x} C) • sistem accesibil: (S, C) • X este extensibila daca exista y S – C a.i. X {y} C • baza: X C maximala • presupunere: B, B’ baze (B B’ B’ B)
Algoritmi “greedy” – formulare matematica (continuare I) • modelul matematic (continuare) • clasa de probleme: • intrare: S, C, f : C R (functia obiectiv) • iesire: o baza B cu f(B) = optim{f(X) | X baza in C} • alegere “greedy”: alege x dintre elementele nealese a.i. f(B {x}) este optim peste {f(B {y}) | y neales si (B {y}) C} (*)
Algoritmi “greedy” – formulare matematica (continuare II) procedure algGreedy(S, C, f, B) begin S1 S B while (B este extensibila) do alege x din S1 conf. crit. (*) S1 S1 – {x} B B {x} end
Algoritmi “greedy” – formulare matematica (continuare III) • un cazcindalegerea “greedy” produce optim global: • (S, C) estematroid: • AA esteinlocuita cu proprietatea de ereditate: X C, X (x X: X {x} C) • are loc proprietatea de interschimbare (PI): X, Y C, |X| < |Y| (y Y-X: X {y} C) • (S, C) estematroidponderat: • f este o pondere: f : S R , f(X) = (f(x) | x X) • optim = max • alegere “greedy”: alege x a.i. f(x) = max{f(y) | y in S B, B {y}) C}
Algoritmi “greedy” – formulare matematica (continuare IV) Teorema: Algoritmul “greedy” determina o submultime optima daca (S, C) este matroid ponderat. • Demonstratie: • x de pondere maxima • Fapt: exista o solutie optima B care contine pe x • fie B’ o solutie optima; pp ca x nu e in B’ • luam B ={x}; apoi utilizam PI si adaugam la B elem. din B’ a.i. B = B’ – {y} {x} • B este optima • S’ = { y | {x,y} C }, C’ = {X | X {x} C} • daca B este solutie pentru (S, C) care contine x, atunci B – {x} este solutie optima pentru (S’, C’)
Exemple de matroizi • S = multimea muchiilor dintr-un graf, C = mult. subgrafurilor aciclice (reprezentate ca multimi de muchii) • C = multimea submultimilor de dim cel mult k • S = multimea coloanelor unei matrici n x n, C = multimea coloanelor liniar independente