0 evaluări0% au considerat acest document util (0 voturi)
17 vizualizări7 pagini
INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014
INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014
INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014INFO Laborator 4 AG 2014
1. Implementai eficient algoritmul lui Prim pentru determinarea unui arbore parial de cost minim (economic) al unui graf simplu, conex, ponderat cu n vrfuri i m muchii (O(m log n)). Se vor da la intrare numrul de vrfuri ale grafului, numrul de muchii i fiecare muchie a grafului cu costul su. (4p) http://www.infoarena.ro/problema/apm
2. Implementai eficient algoritmul lui Kruskal pentru determinarea unui arbore parial de cost minim (economic) al unui graf simplu, conex, ponderat cu n vrfuri i m muchii (O(m log n)). Se vor da la intrare numrul de vrfuri ale grafului, numrul de muchii i fiecare muchie a grafului cu costul su. (4p) http://www.infoarena.ro/problema/apm
3. Second best minimum spanning tree Implementai un algoritm eficient pentru determinarea primilor doi arbori parial cu cele mai mici costuri, pentru un graf simplu, conex, ponderat cu n vrfuri i m muchii, n ipoteza c muchiile au costuri distincte (O(n 2 )). Se vor da la intrare numrul de vrfuri ale grafului, numrul de muchii i fiecare muchie a grafului cu costul su. Pentru determinarea arborelui parial de cost minim (primul) se va folosi un algoritm de complexitate O(m log n) (9p)
6. http://www.infoarena.ro/problema/online (9p implementarea optim a algoritmului pentru arbori pariali de cost minim ales)
7. Orice alt problem care se reduce la determinarea de arbori pariali de cost minim Bibliografie T.H. Cormen, C.E. Leiserson, R.L. Rivest Introduction to algorithms, MIT Press, Cambridge, 1990/2001 FMI Algoritmica grafurilor, anul 1, Laborator 4 Algoritmul lui Kruskal
Pe parcursul algoritmului lui Kruskal muchiile selectate formeaz o pdure. Iniial mulimea muchiilor selectate este vid, fiecare vrf al grafului constituind un arbore. La fiecare pas este selectat o muchie de cost minim cu extremitile n arbori diferii din pdurea deja construit (altfel spus, o muchie de cost minim care nu formeaz cicluri cu muchiile deja existente). Pentru a simplifica alegerea unei muchii de cost minim muchiile sunt sortate iniial n ordinea cresctoare a costurilor i vor fi prelucrate de algoritm n aceast ordine. Mai trebuie gsit o metod eficient de a testa dac o muchie unete doi arbori din pdurea deja construit sau are extremitile n acelai arbore (deci formeaz ciclu cu muchiile deja selectate). Este suficient s gsim o modalitate de a memora vrfurile arborilor. Pentru aceasta se folosesc structuri de date pentru mulimi disjuncte (mulimile vrfurilor arborilor sunt mulimi disjuncte). Fiecrei mulimi i se asociaz un reprezentatnt. Operaiile principale cu mulimi disjuncte sunt: MakeSet(u) formeaz o mulime cu un singur element u FindSet(u) returneaz reprezentantul mulimii care conine pe u Unoin(u,v) reunete mulimea care conine elementul u cu cea care conine elementul v.
Cu aceste operaii algoritmul lui Kruskal este urmtorul: A= for (v V(G)) MakeSet(v) //iniial fiecare vrf este un arbore Sort(E(G),w) //sorteaz muchiile grafului cresctor dup cost for(uv E(G) n ordinea costurilor) if(FindSet(u)!=FindSet(v){ A=A{uv} Union(u,v) if(|A|==n-1) break } return A
Un mod simplu de a reprezenta mulimile disjuncte este folosirea unui vector de reprezentani r cu n elemente cu semnificaia r[u] = reprezentantul mulimii creia aparine u. Astfel, MakeSet(u) se reduce la atribuirea r[u]=u, iar FindSet(u) la a returna r[u]. Operaia Unoin(u,v) presupune ns schimbarea peste tot n vectorul r a valorii r[u] cu valoarea r[v] (reprezentantul mulimii care l conine pe u devine reprezentantul mulimii care l conine pe v), deci are complexitatea O(n).
Pentru o implementare mai rapid a mulimilor disjuncte, reprezentm o mulime printr-un arbore avnd ca rdcin reprezentantul mulimii, pentru fiecare element al mulimii fiind memorat tatl acestuia n arbore. FMI Algoritmica grafurilor, anul 1, Laborator 4 Operaia FindSet(u) presupune urmrirea legturii de tip tata din vrful u pn n rdcin. Nodurile de pe acest lan de la vrful u la rdcin constituie drumul de cutare. Operaia Unoin(u,v) va avea ca efect faptul c rdcina unui arbore va avea ca tat rdcina celuilalt arbore. Pentru ca operaiile s fie ct mai eficiente trebuie ca nlimea arborilor reprezentnd mulimile disjuncte s fie ct mai mic. Pentru aceasta la reuniune rdcina arborelui cu nlime mai mic va arta (va avea ca tat) rdcina arborelui cu nlime mai mare reuniune ponderat. n plus, n timpul operaiei FindSet(u) putem modifica legtura de tip tata a vrfurilor de pe drumul de cutare de la u la rdcin, astfel nct aceasta s arate direct ctre rdcin (astfel, la o viitoare cutare, reprezentantul acestor vrfuri va fi chiar tatl lor, nu va mai fi necesar o urcare n arbore) compresie de cale. 1 4 3 2 7 5 FindSet(7) 8 9 1 4 3 2 7 5 8 9 6 6 1 4 3 2 5 6 Union(1,5) 1 4 3 2 5 6
Dac pentru fiecare vrf u reinem n h[u] o margine superioar a nlimii lui u (numrul de muchii ale celui mai lung lan de la u la o frunz descendent) i n p[u] tatl vrfului u, pseudocodul pentru cele trei operaii este urmtorul: MakeSet(u) p[u]=0 h[u]=0
FindSet(u) if (p[u]==0) return u p[u]=FindSet(p[u]) //tatal lui u devine radacina return p[u]
Union(u,v) u=FindSet(u) v=FindSet(v) if (h[u]>h[v]) p[v]=u else p[u]=v if(h[u]==h[v]) h[v]=h[v]+1 FMI Algoritmica grafurilor, anul 1, Laborator 4 n practic se poate considera c un ansamblu de q operaii cu mulimi disjuncte implementate astfel are complexitatea O(q).
Complexitatea algoritmului Kruskal
T(n, m) ncomplexitate(MakeSet)+complexitate(sort)+ +2mcomplexitate(FindSet) + (n-1)complexitate(Union)
Pentru reprezentarea mulimilor disjuncte folosind vectori de reprezentani obinem complexitatea O(n 2 +m log n). Dac folosim ns arbori (cu reuniune ponderat i compresie de cale) obinem O(m log n).
Algoritmul lui Prim
Pe parcursul algoritmului lui Prim muchiile selectate formeaz ntotdeauna un singur arbore. Arborele pornete de la un vrf arbitrar r si crete pn acoper toate vrfurile din V. La fiecare pas se adaug arborelui o muchie de lungime minim care unete un vrf al arborelui A cu un vrf neselectat pn la acel pas. Cheia implementrii eficiente a algoritmului lui Prim este s procedm astfel nct sa fie uor s selectm o nou muchie de cost minim ntre un vrf selectat i un vrf neselectat pentru a fi adugat la arbore. Pentru aceasta, asociem fiecrui vrf neselectat o cheie reprezentnd costul minim al unei muchii care l unete de un vrf deja selectat. La fiecare selectare a unui nou vrf pentru a fi adugat n arbore, se actualizeaz cheile vrfurilor adiacente cu el rmase neselectate.
n pseudocodul de mai jos graful conex G si rdcina r sunt date de intrare. Pentru fiecare vrf v, cheie[v] este minimul costurilor muchiilor care unesc pe v cu vrfurile selectate (din arborele A). Vrful din arbore pentru care se realizeaz acest minim se reine n p[v]. Astfel, la fiecare pas, muchia (v, p[v]) va fi muchia de cost minim care unete pe v de un vrf selectat, iar lungimea acestei muchii este cheie[v] i reprezint distana minim de la v la arborele A. Cnd un vrf u aflat la distana minim de A este adugat la arbore, p[u] va reprezenta printele lui n arbore. Prin convenie cheie[v]= dac nu exist nici o muchie care s uneasc pe v de un vrf selectat. n timpul execuiei algoritmului toate vrfurile care nu sunt n arbore se afl ntr-o structur Q (care poate fi de exemplu un ansamblu bazat pe cmpul cheie). Funcia extrageMinim (Q) extrage din Q vrful cu cheie minim i l returneaz. n timpul algoritmului mulimea A din algoritmul generic este pstrat implicit ca A={(v, p[v]), vV-{r}-Q} Algoritmul se termin cnd Q este vid. Arborele parial de cost minim A al lui G este astfel A={(v, p[v]), vV-{r}}
FMI Algoritmica grafurilor, anul 1, Laborator 4
procedure APCM_PRIM(G, w, r) creare(Q, V[G]) pentru fiecare uQ executa cheie[u] = cheie[r] = 0 p[r] = null cat timp Q executa u = extrageMinim(Q) pentru fiecare vAdj[u] executa daca vQ si w(u, v)<cheie[v] atunci p[v] = u cheie[v] = w(u, v) /*actualizare(Q)-daca structura pentru Q necesita reactualizare, cum este n cazul ansamblului*/
n liniile 1-4 se iniializeaz Q astfel nct s conin toate vrfurile i se iniializeaz cheia fiecrui vrf cu , excepie fcnd rdcina r a crei cheie este iniializat cu 0. p[r] se iniializeaz cu null deoarece rdcina r nu are nici un printe. Pe parcursul algoritmului Q va conine vrfurile neselectate, iar mulimea V-Q conine vrfurile arborelui curent (cele selectate). Vrful care va fi selectat la fiecare pas este, conform algoritmului lui Prim, elementul u cu cheie minim din Q. Muchia (u, p[u]) are costul cheie[u], deci aceasta este o muchie de cost minim care unete un vrf neselectat cu unul selectat. Elementul u selectat va fi eliminat din mulimea vrfurilor neselectate Q. Primul vrf extras din Q va fi r. Dup selectarea lui u se actualizeaz cmpurile cheie si p ale fiecrui vrf v adiacent lui u, dar care nu a fost nc selectat. Vechea cheie a lui v (reprezentnd costul minim al unei muchii care l unete pe v cu un vrf anterior selectat) este comparat cu lungimea muchiei care l unete pe v de noul vrf selectat u, pentru a vedea dac prin adugarea vrfului u distana de la v la arborele construit nu s-a micorat. n cazul cnd aceast distan s-a micorat, se actualizeaz corespunztor cheia i printele lui v.
Complexitatea algoritmului Prim
T(n, m) complexitate(creare(Q, V[G]))+ + ncomplexitate(extrageMinim(Q))+ + mcomplexitate(actualizare(Q))
Complexitatea difer n funcie de structura aleas pentru Q. Folosind chiar vectorul de chei pe post de Q obinem complexitatea O(n 2 ). Folosind ansamblu (heap) obinem O(m log n).
FMI Algoritmica grafurilor, anul 1, Laborator 4 Exemplu
Algoritmul va selecta muchia (5, 6), apoi (2, 5), nu va selecta muchia (2, 6) deoarece formeaz cicluri cu cele deja selectate (are extremitile n acelai arbore), va selecta apoi (3, 4), (3, 6), (1, 3) i se va opri deoarece muchiile selectate formeaz un arbore. Obinem urmtorul arbore de cost minim 8 1 0 2 3 9 . 1 3 2 4 5 6
FMI Algoritmica grafurilor, anul 1, Laborator 4
Prim: 2 0 1 5 8 1 1 1 0 2 3 5 9 . 1 3 2 4 5 6
Vrf de pornire 1 Marcm cu * vrful selectat la pasul curent
Dup ce au fost selectate toate vrfurile, muchiile se pot reconstitui innd cont de printele p la momentul selectrii. Astfel, muchiile vor fi (5, 2) - deoarece p[2] = 5 (1, 3) - deoarece p[3] = 1 (3, 4) - deoarece p[4] = 3 (6, 5) - deoarece p[5] = 6 (3, 6) - deoarece p[6] = 3 Obinem arborele urmtor. 8 1 0 2 3 9 . 1 3 2 4 5 6
Tema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de DecizieTema 1 - Masina Turing Si Probleme de Decizie