Sunteți pe pagina 1din 19

Cursul 6

 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

 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

10 10

20 20
20 50 30 30
30

40 10 10
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
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  {{i,j}}  C(S) )
• {i,j} de cost minim peste muchiile care satisfac
proprietatea de mai sus
 proprietatea de substructura optima
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

10 10

20
20 50 30 20 30
30 50

40 10 40 10
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
Algoritmul lui Kruskal - 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 optima
Secventializarea optima a activitatilor: formulare

 Intrare:
 n activitati 0,1,2, …,n-1
 fiecare unitate 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

i 0 1 2 3
d(i) 2 3 1 2
p(i) 20 35 35 25

 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

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
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.
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:

 proprietatea de substructura optima:


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

S-ar putea să vă placă și