Sunteți pe pagina 1din 11

ALGORITMUL LUI KRUSKAL

CUPRINS

 Descrierea algoritmului

 Mecanismul algoritmului

 Exemplu

 Cod C++
DESCRIEREA ALGORITMULUI

 Algoritmul lui Kruskal, scris de Joseph Kruskal în 1956, este un algoritm în


teoria grafurilor care găseşte arborele parţial de cost minim pentru un graf
conex ponderat (graf in care fiecare muchie are asociat un cost). Cu alte
cuvinte, găseşte submulţimea muchiilor care formează un arbore care
include toate vârfurile şi care este minimizat din punct de vedere al
costului. Dacă graful nu este conex, atunci algoritmul găseşte un arbore
parţial de cost minim pentru fiecare componentă conexă. Algoritmul lui
Kruskal este un exemplu de algoritm greedy. Este preferabil sa reprezentam
graful ca o lista de muchii cu costul asociat lor, astfel incat sa putem ordona
aceasta lista in functie de cost.

Cuprins
MECANISMUL ALGORITMULUI
 date de intrare: un graf neorientat conex
 date de iesire:un arbore de cost minim
 pentru a forma arborele trebuie alese n-1 muchii(n fiind numarul de
noduri al grafului)
 creează o mulţime de arbori, unde fiecare vârf din graf este un arbore
separat
 creează o mulţime U’ care conţine toate muchiile din graf
 atât timp cât U’ este nevidă si nu s-au ales cele n-1 muchii:
 elimină o muchie de cost minim din U’ cu extremitatile nemarcate
sau marcate diferit
 dacă acea muchie unifica doi arbori distincţi, atunci adaugă muchia,
unificand cei doi arbori într-unul singur
 la sfarsit, vom avea o singura componenta conexa, care este arborele
partial de cost minim al grafului.

Cuprins
EXEMPLU

Cuprins
Algoritmul lui Kruskal aplicat pentru graful anterior:

 Initial: viz:
Costul=0

Cuprins
 Se alege muchia [2,4]
viz:
Costul=0+1→costul=1;

 Se alege muchia [5,6]


viz:
Costul=1+1→costul=2

Cuprins
 Se alege muchia [7,8]
viz:
Costul=2+1→costul=3

 Se alege muchia [2,6]


viz:
Costul=3+2→costul=5

 Se alege muchia [3,8]


viz:
Costul=5+2→costul=7
Cuprins
 Se alege muchia [4,8]
viz:
Costul=7+2→costul=9

 Se alege muchia [1,2]


viz:
Costul=9+3→costul=12

Cuprins
 Arborele rezultat este:

Cuprins
COD C++
void kruskal()
{int i,j,k;
i=1;
for(k=1;k<=n-1;k++)
{while(viz[v[i].x]==viz[v[i].y]&&viz[v[i].x]!=0)
i++;
c+=v[i].cost;
cout<<v[i].x<<" "<<v[i].y<<endl;
if(viz[v[i].x]+viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=v[i].x;
else
if(viz[v[i].x]*viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=viz[v[i].x]+viz[v[i].y];
else
{for(j=1;j<=n;j++)
if(viz[j]==viz[v[i].x]&&j!=v[i].x)
viz[j]=viz[v[i].y];
viz[v[i].x]=viz[v[i].y];
}
i++;
}
Cuprins
cout<<c;
}

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