Documente Academic
Documente Profesional
Documente Cultură
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
i 0 1 2 3
d(i) 2 3 3 2
S = multimea activitatilor
C(S): X C(S) daca X este solutie acceptabila (admite o
secventializare acceptabila)
proprietatea de alegere locala:
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)
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)
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’)