Sunteți pe pagina 1din 14

11.

Grafuri ponderate ("Weighted Graphs")


Adeseori, modelarea problemelor practice presupune utilizarea unor grafuri n care
arcelor li se asociaz ponderi care pot fi greuti, costuri, valori, etc.

Astfel de grafuri se mai numesc i grafuri ponderate ("weighted graphs").


Spre exemplu, pe harta traseelor aeriene ale unei zone, arcele reprezint rute
de zbor iar ponderile distane sau preuri.

ntr-un circuit electric unde arcele reprezint legturi, lungimea sau costul
acestora sunt de regul utilizate ca ponderi.

ntr-o activitate de planificare n execuie a taskurilor, ponderea poate


reprezenta fie timpul, fie costul execuiei unui task, fie timpul de ateptare
pn la lansarea n execuie a taskului.

Este evident faptul c ntr-un asemenea context apar n mod natural probleme legate
de minimizarea costurilor.

n cadrul acestui paragraf vor fi prezentate mai n detaliu dou astfel de probleme
referitoare la grafurile ponderate:

(1) Gsirea drumului cu costul cel mai redus care conecteaz toate punctele
grafulu

(2) Gsirea drumului cu costul cel mai redus care leag dou puncte date.
Prima problem care este n mod evident util pentru grafuri reprezentnd circuite
electrice sau ceva analog, se numete problema arborelui de acoperire minim
(minimum spanning tree problem).

Cea de-a doua problem este util n grafurile reprezentnd hri de trasee (aeriene,
feroviare, turistice) i se numete problema drumului minim (shortest-path
problem).

Aceste probleme sunt tipice pentru o larg categorie de aspecte ce apar n prelucrarea
grafurilor ponderate.

Se impune o precizare.
De regul algoritmii utilizai presupun cutarea prin parcurgere a grafului,
motiv pentru care n mod intuitiv ponderile sunt asociate cu distanele.

Se spune de obicei cel mai apropiat nod cu sens ce poziionare a nodului.

De fapt acest mod de a concepe lucrurile este valabil n contextul problemei


drumului minim.

n general, este ns foarte important a se avea n vedere faptul, c nu este absolut


necesar ca ponderile s fie proporionale cu distanele i c ele pot reprezenta orice
altceva, ca spre exemplu timpi, costuri sau valori.

n situaiile n care ponderile reprezint ntr-adevr distane, ali algoritmi cu


caracter specific, pot fi mai potrivii dect cei care vor fi prezentai n
continuare.

n figura 11.a (a) apare o reprezentare grafic a unui graf neorientat ponderat.
1
1
6

1
2

4
5

4
3

3
3

5
4

2
5

(a)

(b)

Fig.11.a Reprezentarea unui graf ponderat i a unui arbore de acoperirie minim asociat

n ceea ce privete reprezentarea structurilor de date abstracte graf ponderat,


principial ele se reprezint ca i grafurile normale cu urmtoarele deosebiri.

(1) n cazul reprezentrii prin matrice de adiacene, matricea va conine


ponderi n locul valorilor booleene.

(2) n cazul reprezentrii prin structuri de adiacene, fiecrui element al listei i


se adug un cmp suplimentar pentru memorarea ponderii.

Se presupune faptul c ponderile sunt toate pozitive.


Exist ns algoritmi mult mai complicai care pot trata i ponderi negative.
Astfel de algoritmi sunt utilizai mai rar n activitatea practic.
11.1. Arbori de acoperire minimi ("Minimum-Cost Spanning
Trees")
Se presupune c G=(N,A) este un graf conex n care oricare arc (u,v) aparinnd
lui A are ataat un cost specific cost(u,v).

Un arbore de acoperire al lui G este un arbore liber care cuprinde toate nodurile din
N (fig.11.1.(b)).

Costul unui arbore de acoperire este suma costurilor tuturor arcelor cuprinse
n arbore.

Definiie: Un arbore de acoperire minim al unui graf ponderat este o selecie de


arce care conecteaz toate nodurile grafului, astfel nct costul su este cel puin la fel
de mic ca i costul oricrui alt arbore de acoperire al grafului.

O alt definiie este urmtoarea.


Dndu-se orice partiionare a mulimii nodurilor unui graf n dou submulimi,

arborele de acoperire minim conine arcele cu ponderea cea mai mic care
conecteaz un nod aparinnd unei submulimi cu un nod aparinnd celeilalte
[Se 88].

Se face precizarea c un arbore de acoperire minim nu este n mod necesar unic.


O aplicaie tipic a arborilor de acoperire minimi o reprezint proiectarea reelelor de
comunicaii.

Nodurile grafului reprezint oraele iar arcurile comunicaiile posibile dintre


ele.

Costul asociat unui arc reprezint de fapt costul seleciei acelei legturi a
reelei.

Un arbore de acoperire minim reprezint o reea care conecteaz cu un cost


minim toate oraele.

11.1.1. Proprietatea arborilor de acoperire minimi

Exist mai multe moduri de a construi arbori de acoperire minimi asociai unui graf
ponderat.

Marea lor majoritate se bazeaz pe urmtoarea proprietate, denumit i proprietatea


arborilor de acoperire minimi.

Fie G=(N,A) un graf conex i o funcie de cost definit pe arcele sale.


Fie U o submulime proprie a mulimii de noduri N.
Dac (u,v) este un arc cu costul cel mai sczut astfel nct uU iar vN-U,
atunci exist un arbore de acoperire minim care include pe (u,v) ca i arc.

Demonstraia acestei aseriuni nu este complicat i ea se realizeaz prin metoda


reducerii la absurd.

Se presupune dimpotriv c nu exist un arbore de acoperire minim al lui G


care include arcul (u,v).

Fie T oricare arbore de acoperire minim al lui G.

Adugarea arcului (u,v) arborelui T trebuie s conduc la apariia unui


ciclu, deoarece T este un arbore liber i conform proprietii (b) dac unui
arbore liber i se adaug un arc el devine un graf ciclic (& 10.1.).

Acest ciclu include arcul (u,v).


n consecin, n ciclul nou format, trebuie s existe un alt arc (u',v') al lui
T astfel nct u'N-U, dup cum rezult din figura 11.1.1.a.

Dac acest lucru nu ar fi adevrat, atunci n cadrul ciclului nu ar exista


o alt posibilitate de a ajunge de la nodul v la nodul u dect
reparcurgnd arcul (u,v).

u'

v'
U

N-U

Fig.11.1.1.a. Demonstrarea proprietii arborilor de acoperire minimi

Suprimnd arcul (u',v'), ciclul dispare i obinem arborele de acoperire


T' al crui cost nu este n siguran mai ridicat dect al lui T, deoarece s-a
presupus iniial c cost(u,v)cost(u',v').

Astfel existena lui T' contrazice presupunerea iniial i anume c nu exist


un arbore de acoperire minim care s includ arcul (u,v)i n consecin
proprietatea arborilor de acoperire minimi este demonstrat.

11.2. Determinarea arborilor de acoperirie minimi


Exist mai multe metode de determinare a unui arbore minim asociat unui graf ponderat,
metode care n general exploateaz proprietatea anterior enunat pentru aceti arbori.

Dintre acestea se remarc cu deosebire:


(1) Algoritmul lui Prim
(2) Metoda cutrii bazate pe prioritate
(3) Algoritmul lui Kruskal.
11.2.1. Algoritmul lui Prim

Fie G graful ponderat pentru care se dorete determinarea unui arbore de acoperire
minim

Fie N={1,2,3,,n} mulimea nodurilor grafului G


Fie U o mulime vid de noduri ale grafului.
Algoritmul lui Prim ncepe prin a introduce n mulimea U nodul de pornire, s zicem
nodul {1}.

n continuare, ntr-o manier ciclic, este construit pas cu pas arborele de


acoperire minim.

Astfel, n fiecare pas al algoritmului:


(1) Se selecteaz arcul cu cost minim (u,v) care conecteaz mulimea
U cu mulimea N-U

(2) Se adaug acest arc arborelui de acoperire minim


(3) Se adaug nodul v lui U.
Ciclul se repet pn cnd U=N. Schia algoritmului lui Prim apare n secvena
[11.2.1.a] .
-----------------------------------------------------------{Construcia unui arbore de acoperire minim T al unui graf
G}
procedure PRIM(G: TipGraf; var T: MultimeDeArce);
var U: MultimeDeNoduri;
u,v: TipNod;
begin
T:= ; U:= {nodul de pornire};
while U <> N do
[11.2.1.a]
begin
*fie (u,v) arcul cu costul cel mai redus care
satisface condiia (u IN U) AND (v IN N-U);
T:= T {(u,v)}; U:= U {v}
end
end; {PRIM}
-------------------------------------------------------------

n figura 11.2.1.a apare reprezentat pas cu pas secvena de construcie a arborelui de


acoperire minim pentru graful (0) din aceeai figur.

1
6

1
5

4
3
4

3
3

(0)

5
(2)

(1)

1
1

3
4

2
6

3
4

(3)

4
5

(4)

2
6

(5)

Fig.11.2.1.a. Construcia unui arbore de acoperire minim al unui graf pe baza


algoritmului lui Prim
11.2.1.1. Exemplu de implementare a algoritmului lui Prim

Se presupune un graf definit prin:


(1) Mulimea nodurilor sale {1,2,3,,n}
(2) Matricea COST care memoreaz costurile arcelor sale
O modalitate simpl de a afla arcul cu costul cel mai redus care conecteaz mulimile U
i N-U, este aceea de a utiliza dou tablouri.

Unul dintre tablouri, denumit APROPIAT memoreaz n locaia i acel nod din
mulimea U care este la momentul respectiv cel mai apropiat de nodul i din
mulimea N-U.

Acest tablou materializeaz de fapt mulimea N-U.


Cel de-al doilea tablou denumit COSTMIN, memoreaz n locaia i costul
arcului (i,APROPIAT[i]).

La fiecare pas al algoritmului se baleaz tabloul COSTMIN pentru a gsi acel nod, s-l
denumim k, aparinnd mulimii N-U, care este cel mai apropiat de nodurile mulimii
U, adic nodul pentru care valoarea COSTMIN[k] este minim.

Se tiprete arcul (k,APROPIAT[k]) ca i aparinnd arborelui de acoperire minim.


n continuare se actualizeaz tablourile COSTMIN i APROPIAT lund n considerare
faptul c nodul k a fost adugat mulimii U. n consecin:

(1) Pe de o parte apar noi posibiliti de conectare ntre cele dou mulimi
(2) Pe de alt parte costurile unor conexiuni existente se pot reduce prin
introducerea noului nod k n mulimea U.

O versiune Pascal a algoritmului lui Prim apare n secvena [11.2.1.1.a].


Se presupune c COST este un tablou de dimensiuni n,n astfel nct COST[i,j]
reprezint costul arcului (i,j).

Dac arcul (i,j)nu exist, COST[i,j] are o valoare mare specific.


Ori de cte ori se gsete un nod k pentru a fi introdus n arborele de acoperire
(mulimea U), se face COSTMIN[k] egal cu valoarea infinit.

Valoarea infinit reprezint o valoare mare convenit, astfel nct acest nod s nu
mai poat fi selectat n continuare spre a fi inclus n U.

Se face precizarea c valoarea infinit trebuie s fie mai mare dect costul
oricrui arc al grafului, respectiv mai mare dect costul asociat lipsei arcului.
-----------------------------------------------------------{Implementarea algoritmului lui Prim}
procedure Prim(COST: array[1..n,1..n] of real);
{afiseaz arcele arborelui de acoperire minim pentru un graf
avnd nodurile{1,2,...,n} i matricea COST pentru costurile
arcelor}
var COSTMIN: array[1..n] of real;
APROPIAT: array[1..n] of integer;
i,j,k,min: integer;
{i i j sunt indici. n timpul parcurgerii tabloului
COSTMIN, k este indicele celui mai apropiat nod gsit pna
la momentul curent, iar min=COSTMIN[k]}
begin
for i:= 2 to n do
begin {iniializeaz mulimea U numai cu nodul 1}
COSTMIN[i]:= COST[1,i];
APROPIAT[i]:= 1;
end;
[11.2.1.1.a]
for i := 2 to n do
begin {caut cel mai apropiat nod k din afara lui U,
fa de U}
min := COSTMIN[2];

k := 2;
for j := 3 to n do
if COSTMIN[j]< min then
begin
min:= COSTMIN[j]
k:= j
end;
writeln(k,APROPIAT[k]); {tiprete arcul}
COSTMIN[k]:= infinit; {k se adaug lui U}
for j:= 2 to n do {ajusteaz costurile lui U}
if(COST[k,j]<COSTMIN[j]and COSTMIN[j]<infinit)
then
begin
COSTMIN[j]:= COST[k,j];
APROPIAT[j]:= k
end
end
end; {Prim}
----------------------------------------------------------- n figura 11.2.1.1.b apare urma execuiei algoritmului lui Prim aplicat grafului din figura
11.2.1.1.a.(0).

(0) initializare

(1) se selecteaza nodul 3

Nod

1 2 3 4 5 6

Nod

1 2 3 4 5 6

Apropiat

1 1 1 1 1

Apropiat

CostMin

6 1 5

CostMin

U={1}
N-U={2,3,4,5,6}

3 -

1 3 3

5 6 4

U={1,3}
N-U={2,4,5,6}

(2) se selecteaza nodul 6

(3) se selecteaza nodul 4

Nod

1 2 3 4 5 6

Nod

1 2 3 4 5 6

Apropiat

6 3 -

Apropiat

CostMin

2 6

CostMin

3 -

U={1,3,6}
N-U={2,4,5}

3 -

(5) se selecteaza nodul 5

1 2 3 4 5 6
-

U={1,3,6,4}
N-U={2,5}

(4) se selecteaza nodul 2


Nod

3 -

Apropiat

CostMin

- 2 -

U={1,3,6,4,2}
N-U={5}

Nod

1 2 3 4 5 6

Apropiat

CostMin

- -

U={1,3,6,4,2,5}
N-U={ }

Fig.11.2.1.1.b. Exemplu de aplicare al algoritumului lui Prim

Complexitatea relativ la timpul de execuie a acestei implementri a algoritmului lui


Prim este O(n2), deoarece:

(1) Se fac n-1 iteraii n bucla exterioar for


(2) Fiecare iteraie necesit O(n) uniti de timp datorit celor dou bucle for
interioare succesive, prima care determin arcul minim i cea de-a doua care
ajusteaz costurile lui U.

Pentru valori mari ale lui n, performana algoritmului poate deveni nesatisfctoare.

11.2.2. Metoda cutrii "bazate pe prioritate" ("Priority-First Search")

Dup cum s-a precizat n &10.4.3, considernd nodurile unui graf divizate n trei clase,
arbore, vecintate i nentlnite, atunci metodele de traversare a grafului se
difereniaz dup maniera n care sunt alese nodurile care trec din clasa vecintate n
clasa arbore.

Astfel la traversarea n adncime se alege din vecintate nodul cel mai recent
ntnit (ultimul) ceea ce corespunde utilizrii unei stive n pstrarea nodurilor
clasei vecintate.

La traversarea prin cuprindere se alege nodul cel mai devreme ntnit


(primul) ceea ce corespunde unei structuri de date coad.

Determinarea arborelui de acoperire minim se poate asimila cu acea traversare a grafului


n care se alege din clasa vecintate nodul cu prioritatea maxim, adic acela la care
conduce arcul cu ponderea minim.

Structura de date care poate fi asociat acestei metode este coada bazat pe prioritate.
n secvena [11.2.2.a] se prezint o metod de determinare a arborelui minim bazat pe
considerentele mai sus precizate.

Tehnica utilizat se mai numete i cutare bazat pe prioritate (priority first


search) [Se 88].

Referitor la aceast secven se fac urmtoarele precizri:


1) Graful se consider reprezentat printr-o structur de adiacene, implementat cu
ajutorul listelor nlnuite simple (&10.3.2, Caz 1).
2) Structura unui nod al unei liste de adiacene se completeaz cu cmpul cost
utilizat pe post de prioritate.
3) Procedura Initializeaza i funciile Extrage i Vid implementeaz
operatorii respectivi n contextul cozilor bazate pe prioritate.
4)
Funcia
Actualizeaza(q:CoadaBazataPePrioritate,
k:
TipNod,p:TipPrioritate):boolean implementeaz un operator nou care are
menirea de a verifica dac nodul k precizat ca parametru apare n coada bazat pe prioritate
q, cu o prioritate cel puin egal cu prioritatea p precizat ca parametru.

(1) Dac nodul k nu apare n coad el este inserat.

(2) Dac nodul k apare n coad ns are un cost mai mare (adic o prioritate
mai mic) dect cea precizat ca parametru se realizeaz schimbarea
prioritii sale la valoarea p.

(3) Dac se produce vreo modificare (inserie sau modificare de prioritate)


funcia Actualizeaza returneaz valoarea true. Aceasta permite
actualizarea corespunztoare a tablourilor marc i parinte.

-----------------------------------------------------------PROCEDURE ArboreMinim;
VAR id,k: integer;
marc: ARRAY[1..maxN] OF integer;
parinte: ARRAY[1..maxN] OF integer;
q: CoadaBazataPePrioritate;
PROCEDURE CautaPrioritar(k:integer);
VAR t: legatura;
BEGIN
[1] IF Actualizeaza(q,k,nevazut) THEN parinte[k]:= 0;
[2] REPEAT
[3]
id:= id + 1;
[4]
k:= Extrage(q);
[5]
marc[k]:= -marc[k]; {k trece n clasa "arbore"}
[6]
IF marc[k] = nevazut THEN marc[k]:= 0;
[7]
t := Stradj[k]
[8]
WHILE t <> nil DO
[11.2.2.a]
BEGIN
[9]
IF marc[t^.nume]<0 THEN {nevizitat sau in coada}
[10]
IF Actualizeaza(q,t^.nume,t^.cost) THEN
BEGIN
[11]
marc[t^.nume]:= -(t^.cost); {nodul t^.nume
trece n clasa "vecinatate"}
[12]
parinte[t^.nume]:= k
END;
[13]
t := t^.urm
END
[14] UNTIL Vid(q)
END; {CautaPrioritar}
BEGIN
id := 0;Initializeaza(q);
FOR k:= 1 TO N DO marc[k]:= -nevazut;
FOR k:= 1 TO N DO
IF marc[k] = -nevazut THEN CautaPrioritar(k)
END; {ArboreMinim}
------------------------------------------------------------

Arborele de acoperire minim care n acest caz este un arbore de cutare bazat pe
prioritate, este pstrat n tabloul parinte n reprezentarea indicator spre printe.

Fiecare locaie a tabloului memoreaz printele nodului n cauz respectiv nodul care a
determinat mutarea respectivului nod din clasa vecintate n clasa arbore.

De altfel, pentru fiecare nod k al arborelui, marc[k] reprezint costul arcului care-l
leag pe k de printele su printe[k].

(1) Nodurile din clasa arbore sunt marcate cu valori pozitive n tabloul marc

(2) Nodurile din clasa "vecintate" sunt marcate cu valori negative (linia [11])

(3) Nodurile din clasa nentlnite sunt marcate cu nevzut i nu cu


valoarea zero.

Se face precizarea c "nevzut" reprezint o valoare mare pozitiv.

Se observ faptul c atta vreme ct nodurile se gsesc n coada bazat


pe prioritate ele sunt marcate n tabloul marc cu valoarea negativ a
costului (prioritii).

n momentul n care sunt trecute n clasa "arbore" li se inverseaz


valoarea n tabloul marc (linia [5]).

Utilizarea cutrii bazate pe prioritate n determinarea arborelui de acoperire minim


conduce la performana O((n+a) log n) pai de execuie.

Motivaia este simpl:


o n procesul construciei arborelui sunt parcurse toate nodurile i toate arcele.
o Fiecare nod conduce la o inserie i fiecare arc la o modificare de prioritate n
cadrul cozii bazate pe prioritate utilizate.
o Presupunnd c implementarea cozii bazate pe prioritate s-a realizat cu
ajutorul ansamblelor, atunci att inseria ct i modificarea se realizeaz n
O(log n) pai.
o n consecin performana total va fi O((n+a) log n).

11.2.2.1. Consideraii referitoare la metoda cutrii "bazate pe


prioritate"

Metoda cutrii bazate pe prioritate are un pronunat caracter de generalitate.

Astfel, dup cum se va vedea n continuare, pornind de la aceast metod se poate


dezvolta un algoritm care rezolv problema drumului minim.

De asemenea, pornind tot de la aceeai metod va fi dezvoltat un algoritm care


rezolv aceleai probleme n cazul grafurilor dense cu un efort de calcul proporional
cu O (n2).

Istoric lucrrile au evoluat ns altfel.


o n anul 1957 Prim public algoritmul pentru determinarea arborelui de
acoperire minim
o n anul 1959 Dijkstra public algoritmul referitor la determinarea drumului
minim.
o Pentru clarificare, se accept ca n cazul grafurilor dense cele dou soluii s
fie numite:

Algoritmul lui Prim pentru determinarea arborelui de acoperire


minim al unui graf

Algoritmul lui Dijkstra pentru determinarea drumului minim ntrun graf

Algoritm de cutare bazat pe prioriti n cazul grafurilor rare.

Dup cum se va vedea, de fapt soluiile propuse se ntreptrund i ele nu sunt dect
cazuri particulare ale unui algoritm generalizat de cutare bazat pe prioriti.

Este evident faptul c metoda "cutrii bazate pe prioritate este aplicabil cu


preponderen n cazul grafurilor ponderate considernd ponderile drept prioriti.

Cu toate acestea, aceast metod poate fi aplicat i grafurilor neponderate.

ntr-un astfel de context, ea poate generaliza tehnicile de traversare bazate pe


cutarea n adncime respectiv pe cutarea prin cuprindere prin atribuirea
corespunztoare de prioriti nodurilor grafului.
o Se reamintete faptul c id este o variabil a crei valoare se incrementeaz
de la 1 la n pe msur ce sunt procesate nodurile grafului n timpul execuiei
procedurii CautaPrioritar din secvena [11.2.2.a]
o Variabila id poate fi utilizat n atribuirea de prioriti nodurilor examinate,
n baza conveniei "minim = prioritar".
o Astfel, dac n procesul de cutare bazat pe prioritate:

(1) Se consider prioritatea unui nod egal cu n-id se obine


cutarea n adncime

(2) Dac se consider prioritatea unui nod se consider egal chiar cu


id, se obine cutarea prin cuprindere.

o n primul caz nodurile nou ntlnite au cea mai mare prioritate


o n cel de-al doilea caz nodurile cele mai vechi adic cel mai devreme
ntlnite, au cea mai mare prioritate.
o De fapt aceste atribuiri de prioriti determin structura coad bazat pe
prioritate s se comporte ca o stiv respectiv ca i o coad normal,
structuri specifice celor dou tipuri de parcurgeri.

11.2.3. Algoritmul lui Kruskal

Fie graful conex G=(N,A)cu N={1,2,...,n} i cu funcia de cost c definit pe


mulimea arcelor A.

O alt metod de construcie a unui arbore de acoperire minim, este algoritmul lui
Kruskal

Algoritmul lui Kruskal pornete de la un graf T=(N,) care const doar din
cele n noduri ale grafului original G, dar care nu are nici un arc.

n aceast situaie fiecare nod este de fapt o component conex a


grafului care const chiar din nodul respectiv

n continuare pornind de la mulimea curent a componentelor conexe,


algoritmul selecteaz pe rnd cte un arc de cost minim pe care l adaug
componentelor conexe care cresc n dimensiune dar al cror numr se reduce.

n final rezult o singur component conex care este chiar arborele de


acoperire minim.

Pentru a construi componente din ce n ce mai mari se examineaz arcele din mulimea
A n ordinea cresctoare a costului lor.

Dac arcul selectat conecteaz dou noduri aparinnd unor componente conexe
distincte, arcul respectiv este adugat grafului T.

Dac arcul selectat conecteaz dou noduri aparinnd unei aceleeai


componente conexe, arcul este neglijat ntruct introducerea sa ar conduce la
apariia unui ciclu n respectiva component i n final la un ciclu n arborele de
acoperire, lucru nepermis prin definiie.

Aplicnd n manier repetitiv acest procedeu, la momentul la care toate nodurile


grafului aparin unei singure componente conexe, algoritmul se termin i T
reprezint arborele de acoperire minim al grafului G.

Cu alte cuvinte algoritmul lui Kruskal pornete de la o pdure cu n arbori.


n fiecare din cei n-1 pai, algoritmul combin doi arbori ntr-unul singur,
utiliznd ca legtur arcul cu costul cel mai redus curent.

Procedeul continu pn n momentul n care rmne un singur arbore.


Acesta este arborele de acoperire minim.
Spre exemplu considernd graful ponderat din fig.11.2.3.a (0), n succesiunea (1)-(5) din
cadrul aceleai figuri se prezint maniera de determinare a unui arbore de acoperire
minim al grafului n baza acestui algoritm.

Ordinea n care se adaug arcele rezult din figur.


Iniial se adaug arcele cu costurile 1,2,3 i 4, toate acceptate, ntruct nici
unul dintre ele nu genereaz vreun ciclu.

Arcele (1,4) i (3,4) de cost 5 nu pot fi acceptate deoarece conecteaz


noduri aparinnd unei aceleeai componente (fig.11.2.3.a (d)) i conduc la
cicluri.

n consecin se accept arcul (2,3) de cost 5 care nu produce nici un ciclu


ncheind astfel construcia arborelui de acoperire minim.

1
6

1
5

4
3
2

(0)

(1)

4
3
2
6
(3)

1
1

6
(2)

1
1

3
3

3
4

6
(4)

4
4

2
6

(5)

Fig.11.2.3.a. Construcia unui arbore de acoperire minim pe baza algoritmului lui Kruskal

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