1 / 12

Algoritmul lui Kruskal

Algoritmul lui Kruskal. Cuprins. Descrierea algoritmului Mecanismul algoritmului Exemplu Cod C++. Descrierea algoritmului.

kayo
Download Presentation

Algoritmul lui Kruskal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmul lui Kruskal

  2. Cuprins • Descrierea algoritmului • Mecanismul algoritmului • Exemplu • Cod C++

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

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

  5. Exemplu Cuprins

  6. Algoritmul lui Kruskal aplicat pentru graful anterior: • Initial: viz: Costul=0 Cuprins

  7. Se alege muchia [2,4] viz: Costul=0+1→costul=1; • Se alege muchia [5,6] viz: Costul=1+1→costul=2 Cuprins

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

  9. Se alege muchia [4,8] viz: Costul=7+2→costul=9 • Se alege muchia [1,2] viz: Costul=9+3→costul=12 Cuprins

  10. Arborele rezultat este: Cuprins

  11. 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++; } cout<<c; } Cuprins

  12. Realizatori: Lupes Paula Pascaru Georgiana

More Related