paradigma algoritmilor “greedy”

36
Paradigma algoritmilor “greedy” Prezentarea generala a paradigmei Studii de caz memorarea programelor rucsac (varianta continua) arbori Huffman

Upload: niran

Post on 21-Jan-2016

163 views

Category:

Documents


1 download

DESCRIPTION

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”) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Paradigma algoritmilor “greedy”

Paradigma algoritmilor “greedy”

Prezentarea generala a paradigmei Studii de caz

memorarea programelorrucsac (varianta continua)arbori Huffman

Page 2: Paradigma algoritmilor “greedy”

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 optimasolutia optima a problemei contine solutiile optime ale

subproblemelor

Page 3: Paradigma algoritmilor “greedy”

Algoritmi “greedy” – o prima formalizare

S – o multime de intrari C(S)

obiectele din C(S) sunt submultimi ale lui Soperatii: X {x}, X – {x}

ProblemaIntrare: S, f : C(S) RIesire: 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 optimafie x primul (sau ultimul) ales de alg. greedysolutia problemei initiale include solutia subproblemei

coresp. lui S’ = S – {x}, C(S’) = {B S’ | B {x} C(S)}, f restrictionata la C(S’)

Page 4: Paradigma algoritmilor “greedy”

Memorarea eficienta a programelor - formulare

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

iesireo asezare a obiectelor in lista a.i. timpul mediu de regasire sa

fie minim

Page 5: Paradigma algoritmilor “greedy”

Memorarea eficienta a programelor – algoritm “greedy”

exempluL = (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 minimaalegerea “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)

Page 6: Paradigma algoritmilor “greedy”

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)

Page 7: Paradigma algoritmilor “greedy”

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

Page 8: Paradigma algoritmilor “greedy”

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)

Page 9: Paradigma algoritmilor “greedy”

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 optimademonstratie

timp: O(n log n) spatiu suplimentar: O(n)

Page 10: Paradigma algoritmilor “greedy”

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 optimasolutia 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

Page 11: Paradigma algoritmilor “greedy”

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

Page 12: Paradigma algoritmilor “greedy”

Coduri Huffman: reprezentarea unei codificari ca arbore HARABABURA

1

2 4 1

2

0

0

1

0

1

0 1

1

10

0

H

R A

B

U

Mi H A R B U

fi 1 4 2 2 1

cod(Mi) 0010 011 010 10 110

Page 13: Paradigma algoritmilor “greedy”

Coduri Huffman: algoritm “greedy”

initial: n arbori cu un singur nod etichetati cu fi

f0 f1 fn-1

pasul curent

n1n2

n1n2

n1+ n2

cu n1, n2 minime peste multimea radacinilor

T1 T2 T1 T2

Page 14: Paradigma algoritmilor “greedy”

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

Page 15: Paradigma algoritmilor “greedy”

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 optimasolutia problemei coresp. intrarii f0, f1, ..., fn-1 “include” solutia

subproblemei coresp. intrarii f0 + f1, ..., fn-1, unde f0, f1 sunt minime

Page 16: Paradigma algoritmilor “greedy”

Coduri Huffman: implementare

initial cele n noduri se afla in heap-ul A la pasul curent:

se extrag primele doua radacini n1 si n2 din heap-ul Ase introduce n1+n2 in heap-ul Ase 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)

stgdrp

0 1

A = min-heap cu radacinile

B = noduri carenu-s radacini

C = zona auxiliara

. . .

inf

Page 17: Paradigma algoritmilor “greedy”

Paradigma algoritmilor “greedy” (continuare)

Studii de caz

• arborele partial de cost minim

• secventializarea activitatilorPrezentarea formala a paradigmei

Page 18: Paradigma algoritmilor “greedy”

Arborele partial de cost minim - formulare

instanta: un graf ponderat (G, w), G = (V, E), w : E Rarbore = graf conex fara ciclurisubgraf partial: G’ = (V, E’) cu E’ E arbore partial = subgraf partial + arborecostul unui arbore partial este w(G’) = {i,j}E’ w({i,j})

iesire:un arbore partial de cost minim

Page 19: Paradigma algoritmilor “greedy”

Arborele partial de cost minim – algoritm generic

procedure APCM(G, w)

begin

A E1 Ewhile ((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}}

endmuchia {i,j} “sigura” pentru A A {{i,j}}este

submultime a unui arbore partial de cost minim

Page 20: Paradigma algoritmilor “greedy”

Arborele partial de cost minim – algoritmul lui Kruskal

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

20

10

40

30

10

3020

50 20

10

10

30

Page 21: Paradigma algoritmilor “greedy”

Arborele partial de cost minim – algoritmul lui Kruskal (cont)

procedure APCM_Kruskal(G, w)

begin

A for each i in V do single(i)

sorteaza E crescator dupa w

for each {i,j} in E in ordine crescatoare do

if (find(A, i) find(A, j)then union(A, i, j)

end

Complexitate: O(m log m), unde m este numarul de muchii

Page 22: Paradigma algoritmilor “greedy”

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 optimamuchia {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. V2B1 este APCM pentru G1 si B2 este APCM pentru G2

Page 23: Paradigma algoritmilor “greedy”

Arborele partial de cost minim – algoritmul lui Prim

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

20

10

40

30

10

3020

50 20

10

10

30

50

40

Page 24: Paradigma algoritmilor “greedy”

Arborele partial de cost minim – algoritmul lui Prim

procedure APCM_Prim(G, w, r)

begin

Q Vfor 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

Page 25: Paradigma algoritmilor “greedy”

Algoritmul lui Prim- formalizare

S = multimea de muchii X C(S) daca X este arbore alegere locala:

adauga la B muchia {i,j} de cost minim a.i.

• B {{i,j}} arbore ( C(S) )

• {i,j} de cost minim peste muchiile care satisfac proprietatea de mai sus

proprietatea de substructura optimafie {i,j} ultima muchie aleasa a.i. j nu e in arbore inainte de

alegerea localaB – {{i,j}} este APCM pentru graful indus de V – {j}

Page 26: Paradigma algoritmilor “greedy”

Secventializarea optima a activitatilor: formulare

Intrare:n activitati 0,1,2, …,n-1fiecare activitate dureaza o unitate de timprealizarea activitatii i aduce profitul p(i) > 0activitatea 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

Page 27: Paradigma algoritmilor “greedy”

Secventializarea optima a activitatilor: exemplu

o solutie posibila: (0, 3,1) cu profitul 20 + 25 + 35 = 80d(0) = 2 1, d(3) = 2 2, d(1) = 3 3

o alta solutie posibila: (2, 3,1) cu profitul 35 + 25 + 35 = 95d(2) = 1 1, d(3) = 2 2, d(1) = 3 3

exista vreo solutie mai buna?

i 0 1 2 3

d(i) 2 3 1 2

p(i) 20 35 35 25

Page 28: Paradigma algoritmilor “greedy”

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

i 0 1 2 3

d(i) 2 3 3 2

(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

Page 29: Paradigma algoritmilor “greedy”

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.

i 0 1 2 3

d(i) 2 3 1 2

p(i) 20 35 35 25

B = Ø B = {1} B = {1,2} B = {1,2,3} s = (2,3,1)

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.

Page 30: Paradigma algoritmilor “greedy”

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

Page 31: Paradigma algoritmilor “greedy”

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)

Page 32: Paradigma algoritmilor “greedy”

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} (*)

Page 33: Paradigma algoritmilor “greedy”

Algoritmi “greedy” – formulare matematica (continuare II)

procedure algGreedy(S, C, f, B)

begin

S1 SB while (B este extensibila) do

alege x din S1 conf. crit. (*)

S1 S1 – {x}B B {x}

end

Page 34: Paradigma algoritmilor “greedy”

Algoritmi “greedy” – formulare matematica (continuare III)

un caz cind alegerea “greedy” produce optim global:(S, C) este matroid:

• AA este inlocuita 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) este matroid ponderat:

• 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}

Page 35: Paradigma algoritmilor “greedy”

Algoritmi “greedy” – formulare matematica (continuare IV)

Teorema: Algoritmul “greedy” determina o submultime optima daca (S, C) este matroid ponderat.

Demonstratie:x de pondere maximaFapt: 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 optimaS’ = { 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’)

Page 36: Paradigma algoritmilor “greedy”

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