(continuare) Algoritmul lui Johnson Arbori minimi de acoperire Proiectarea Algoritmilor 2010 Bibliografie [1] http://monalisa.cacr.caltech.edu/monalisa__Service_Applications_ _Monitoring_VRVS.html
[2] http://www.cobblestoneconcepts.com/ucgis2summer2002/guo/guo. html
[3] Giumale Introducere in Analiza Algoritmilor cap. 5.5
[4] R. Sedgewick, K Wayne curs de algoritmi Princeton 2007 www.cs.princeton.edu/~rs/AlgsDS07/ 01UnionFind si 14MST
Arbori minimi de acoperire: Definiie; Utilizare; Algoritmi.
Operaii cu mulimi disjuncte: Structuri de date pentru reprezentarea mulimilor disjuncte; Algoritmi pentru reuniune si cutare; Calcul de complexitate. Proiectarea Algoritmilor 2010 Reminder Dijkstra Dijkstra(G,s) Pentru fiecare (u e V) d[u] = ; p[u] = null; d[s] = 0; Q = construiete_coada(V) // coad cu prioriti Ct timp (Q != C) u = ExtrageMin(Q); // extrage din V elementul cu d[u] minim // Q = Q - {u} se execut n cadrul lui ExtrageMin Pentru fiecare (v e Q i v din succesorii lui u) Dac (d[v] > d[u] + w(u,v)) d[v] = d[u] + w(u,v) // actualizez distana p[v] = u // i printele Complexitate? Vectori - O(V 2 ) HB - O(E logV) HF - O(V log V+E) Proiectarea Algoritmilor 2010 Reminder Bellman-Ford BellmanFord(G,s) // G=(V,E),s=sursa Pentru fiecare v din V // iniializri d[v] = ; p[v] = null; d[s] = 0; // actualizare distan de la s la s Pentru i de la 1 la |V| -1 // pentru fiecare pas pornind din s // spre restul nodurilor se ncearc construcia unor drumuri // optime de dimensiune i Pentru fiecare (u,v) din E // pentru arcele ce pleac de la nodurile // deja considerate Dac d[v] > d[u] + w(u,v) atunci // se relaxeaz arcele corespunztoare d[v] = d[u] + w(u,v); p[v] = u; Pentru fiecare (u,v) din E Dac d[v] > d[u] + w(u,v) atunci Eroare (ciclu negativ); Complexitate? O(VE) Proiectarea Algoritmilor 2010 Reminder Roy-Floyd Algoritm prin care se calculeaz distanele minime ntre oricare 2 noduri dintr-un graf (drumuri optime multipunct-multipunct).
Exemplu clasic de programare dinamic.
Idee: la pasul k se calculeaz cel mai bun cost ntre u i v folosind cel mai bun cost u..k i cel mai bun cost k..v calculat pn n momentul respectiv.
Se aplic pentru grafuri ce nu conin cicluri de cost negativ. Proiectarea Algoritmilor 2010 Reminder Floyd-Warshall Floyd-Warshall2(G) Pentru i de la 1 la n Pentru j de la 1 la n // iniializri d(i,j) = w(i,j) Dac (w(i,j) == ) p(i,j) = null; Altfel p(i,j) = i; Pentru k de la 1 la n Pentru i de la 1 la n Pentru j de la 1 la n Dac (d(i,j) > d(i,k) + d(k,j)) // determinm minimul d(i,j) = d(i,k) + d(k,j) p(i,j) = p(k,j); // i actualizm printele Complexitate? O(V 3 ) Complexitate spaial? O(V 2 ) Proiectarea Algoritmilor 2010 Algoritmul lui Johnson Pentru grafuri rare.
Folosete liste de adiacen.
Bazat pe Dijkstra i Bellman-Ford.
Complexitate: O(V 2 logV + VE) Mai bun dect Floyd-Warshall pentru grafuri rare. Proiectarea Algoritmilor 2010 Idee algoritm Johnson Dac graful are numai arce pozitive: se aplic Dijkstra pentru fiecare nod cost V 2 logV + VE. Altfel se calculeaz costuri pozitive pentru fiecrui arc meninnd proprietile: w 1 (u,v) 0, (u,v) e E; p este drum minim utiliznd w p este drum minim utiliznd w 1 . Proiectarea Algoritmilor 2010 Construcie w 1 (I)
Idee 1: identificare arcul cu cel mai mic cost c; adunare la costul fiecrui arc valoarea c;
a b c d 5 3 8 -7 a b c d 12 10 15 0 cost(a..b..d) > cost(a,d) cost(a..b..d) < cost(a,d) Nu funcioneaz!!!! Proiectarea Algoritmilor 2010 Construcie w 1 (II)
Idee 2: w 1 (u,v) = w(u,v) + h(u) - h(v);
unde h : V 9;
se adaug un nod s;
se unete s cu toate nodurile grafului prin arce de cost 0;
se aplic BF pe acest graf => h(v) = (s,v);
w 1 (u,v) = w(u,v) + h(u) - h(v). Proiectarea Algoritmilor 2010 Algoritm Johnson Johnson(G) G = (V,E); V = V {s}; // adugm nodul s E = E (s,u), ueV; w(s,u) = 0; // i l legm de toate nodurile Dac BF(G) e fals // aplic BF pe G Eroare ciclu negativ Altfel Pentru fiecare v e V h(v) = (s,v); // calculat prin BF Pentru fiecare (u,v) e E w 1 (u,v) = w(u,v) + h(u) - h(v) // calculez noile costuri pozitive Pentru fiecare (u e V) Dijkstra(G,w 1 ,u) // aplic Dijkstra pentru fiecare nod Pentru fiecare (v e V) d(u,v) = 1 (u,v) + h(v) - h(u) // calculez costurile pe graful iniial Proiectarea Algoritmilor 2010 Exemplu (I) 1 2 3 4 5 3 8 4 1 2 7 -4 6 -5 Adaug s i aplic BF pe noul graf. 1 2 3 4 5 3 8 4 1 2 7 -4 6 -5 s 0 0 0 0 0 0 -4 0 -5 -1 0 BellmanFord(G,s) // G=(V,E),s=sursa Pentru fiecare v din V // iniializri d[v] = ; p[v] = null; d[s] = 0; // actualizare distan de la s la s Pentru i de la 1 la |V| -1 // se construiesc drumuri optime de dimensiune i Pentru fiecare (u,v) din E // pentru arcele ce pleac de la nodurile deja considerate Dac d[v] > d[u] + w(u,v) atunci // se relaxeaz arcele corespunztoare d[v] = d[u] + w(u,v); p[v] = u; Pentru fiecare (u,v) din E Dac d[v] > d[u] + w(u,v) atunci Eroare (ciclu negativ);
Funcioneaz pe grafuri cu arce ce au costuri negative (dar care nu au cicluri de cost negativ).
Floyd-Warshall e optim pentru grafuri dese.
Johnson e mai bun pentru grafuri rare. Proiectarea Algoritmilor 2010 Arbori minimi de acoperire Definiii Fie G = (V,E) graf neorientat i conex, iar w: E 9 o funcie de cost (w(u,v) = costul muchiei (u,v)).
Definiie: Un arbore liber al lui G este un graf neorientat conex i aciclic Arb = (V,E); V _ V, E _ E. Costul arborelui este: C(Arb) = w(e), e e E.
Definiie: Un arbore liber se numete arbore de acoperire dac V = V.
Definiie: Un arbore de acoperire (Arb) se numete arbore minim de acoperire (notm AMA ) dac Arb e ARB(G) a.. C(Arb) = min{C(Arb) | Arb e ARB(G)}. Proiectarea Algoritmilor 2010 Exemple Graf neorientat conex Arbore de acoperire: muchiile punctate nu fac parte din arbore Arbore minim de acoperire: muchiile punctate au fost eliminate din graf I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Utilizri Proiectarea reelelor: Electrice, calculatoare, drumuri.
Clustering.
Algoritmi de aproximare pentru probleme NP-complete.
Proiectarea Algoritmilor 2010 Exemple de utilizare MonALISA - Arborele minim de acoperire al conexiunilor si calitatea conexiunilor peer-to-peer pentru un set de relee VRVS (caltech) [1] Arbore minim de acoperire pentru cca 2850 de orae din USA [2] Proiectarea Algoritmilor 2010 AMA Definiii (II) Definiie: Fie A _ E o mulime de muchii ale unui graf G = (V,E) i (S,V-S) o partiionare a lui V. Partiionarea respect mulimea A dac e e A care taie frontiera dintre S i V-S ( (u,v) e A u,v e S sau u,v e V-S).
Definiie: Fie A _ E o mulime de muchii ale unui AMA Arb = (V,E) al grafului G = (V,E), iar e e E o muchie oarecare din G. Muchia e este sigur n raport cu A dac mulimea A {e} face parte dintr-un AMA al lui G.
Proiectarea Algoritmilor 2010 AMA Teorem Teorema 5.23: Fie A o mulime de muchii ale unui AMA al grafului G = (V,E). Fie (S,V-S) o partiionare care respect A, iar (u,v) e E o muchie care taie frontiera dintre S i V-S a.. w(u,v) = min{w(x,y) | (x,y) e E i (x e S, y e V-S) sau (x e V-S, y e S)} Muchia (u,v) este sigur in raport cu A.
Dem (Reducere la absurd): pp (u,v) nu e muchie sigur. (I) AMA Arb = (V,E), a.. A E. Pp (u,v) e Arb n Arb cale u..v (x,y) u..v care taie partiionarea i (x,y) Arb (x,y) eA, (u,v) e A pt. c partiionarea respect A, iar w(u,v) w(x,y) (I) Dac n Arb eliminm (x,y) i adugm (u,v) Arb = (V,E), E = E {(x,y)} + {(u,v)} C(Arb) C(Arb), Arb AMA C(Arb) = C(Arb) Arb AMA (u,v) muchie sigur. x u y v S V-S Proiectarea Algoritmilor 2010 Proprieti (I) Dem (Reducere la absurd): Pp e e Arb(G).
Eliminnd e din Arb(G) 2 mulimi de muchii: S 1 , S 2 .
e e E (ciclu) - e e E, w(e) > w(e) a.. un capt din e este n S 1 i celalalt n S 2 .
Arb(G) e + e = arbore de acoperire.
Cost(Arb(G) - w(e) + w(e) < Cost(Arb(G)) => Arb(G) nu este arbore minim.
G = (V,E), C = (V,E) ciclu n G; e e E a.. w(e) = max {w(e) | e e E} => e e Arb(G) unde Arb(G) = AMA n G.
I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Proprieti (II) Dem (Reducere la absurd): Pp e e Arb(G).
Arb = Arb(G) e + e (unde e o muchie similar cu e).
Arb= arbore de acoperire.
Cost(Arb) < Cost(Arb) Arb nu este arbore minim.
G = (V,E), S = (V,E), V c V; e = (u,v) a.. e e E i (u e V i v e V) sau (u e V i v e V) cu proprietatea c: w(u,v) = min{w(u,v)| (ueV i veV) sau (ueV i veV)} => (u,v) e AMA. I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 AMA Bazai pe ideea de muchie sigur se identific o muchie sigur i se adaug n AMA.
2 algoritmi de tip greedy: Prim: se pornete cu un nod i se extinde pe rnd cu muchiile cele mai ieftine care au un singur capt n mulimea de muchii deja format (Proprietatea 2). Algoritmul este asemntor algoritmului Dijkstra.
Kruskal: iniial toate nodurile formeaz cte o mulime i la fiecare pas se reunesc 2 mulimi printr-o muchie. Muchiile sunt considerate n ordinea costurilor i sunt adugate n arbore doar dac nu creeaz ciclu (Proprietatea 1). Proiectarea Algoritmilor 2010 Algoritmul lui Prim Prim(G,w,s) A = C // AMA Pentru fiecare (u e V) d[u] = ; p[u] = null // iniializm distana i printele d[s] = 0; // nodul de start are distana 0 Q = constrQ(V, d); // ordonat dup costul muchiei // care unete nodul de AMA deja creat Ct timp (Q != C) // ct timp mai sunt noduri neadugate u = ExtrageMin(Q); // extrag nodul aflat cel mai aproape A = A {(u,p[u])}; // adaug muchia n AMA Pentru fiecare (v e succs(u)) Dac d[v] > w(u,v) atunci d[v] = w(u,v); //+ d[u] // actualizm distanele i prinii nodurilor p[v] = u; // adiacente care nu sunt n AMA nc ntoarce A - {(s,p(s))} // prima muchie adugat Implementare n Java la [4] ! Proiectarea Algoritmilor 2010 Exemplu (I) Pornim din I I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Q: A(3), J(5), L(8), B(), C(), D(), E(), F(), G(), H(), K() A Proiectarea Algoritmilor 2010 Exemplu (II) Q: G(2), J(5), H(6), L(8), B(9), C(), D(), E(), F(), K() G I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (III) Q: H(4), J(5), L(8), B(8), C(), D(), E(), F(), K() H Q: G(2), J(5), H(6), L(8), B(9), C(), D(), E(), F(), K() G Proiectarea Algoritmilor 2010 Exemplu (IV) Q: J(5), L(8), B(8), C(), D(), E(), F(), K() J I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (V) Q: K(2), L(8), B(8), C(), D(), E(), F() K I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VI) Q: K(2), L(8), B(8), C(), D(), E(), F() K Q: L(7), B(8), C(), D(), E(), F() L I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VII) Q: B(8), C(), D(), E(), F() B I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VIII) Q: C(5), D(), E(), F() C I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (IX) Q: E(1), D(8), F() E I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (X) Q: F(2), D(8) F I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XI) Q: D(8) D I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XII) Q: I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Corectitudine (I) 1. Artm c muchiile pe care le adugm aparin Arb:
Dem prin inducie dup muchiile adugate n AMA:
P 1 : avem V = s, E = C. Adaug muchia (u,s), u = nod adiacent sursei aflat cel mai aproape de aceasta din Propr. 2 (u,s) e Arb.
P n P n+1 : S = (V,E) mulimea vrfurilor i muchiilor adugate deja n arbore nainte de a aduga (u,p[u]). p[u] e V, u e V; (u,p[u]) are cost minim dintre muchiile care au un capt n S (conform extrage minim) din Propr. 2 (u,p[u]) e Arb Proiectarea Algoritmilor 2010 Corectitudine (II) 2. artm c muchiile ignorate nu fac parte din Arb: d[v] scade tot timpul de-a lungul algoritmului pn cnd v este adugat n AMA. n momentul adugrii, s-a gsit muchia de cost minim ce conecteaz nodul v la AMA; Pp. (u,v) a.. Arb(u) = Arb(v) (u,v) creeaz un ciclu n Arb(u) (arborii sunt aciclici) fie ciclul format din u..x..v i (u,v). w(u,v) = max {w(u,v) | (u,v) e Arb(u)} DE CE? Nodul u i-a fost adiacent nodului v, dar nu a fost ales la niciunul din momentele ulterioare de timp, cnd au fost parcurse muchiile din u..x..v (u,v) are costul maxim din ciclu din Propr. 1 (u,v) e Arb Proiectarea Algoritmilor 2010 Algoritmul lui Prim Prim(G,w,s) A = C // AMA Pentru fiecare (u e V) d[u] = ; p[u] = null // iniializm distana i printele d[s] = 0; // nodul de start are distana 0 Q = constrQ(V, d); // ordonat dup costul muchiei // care unete nodul de AMA deja creat Ct timp (Q != C) // ct timp mai sunt noduri neadugate u = ExtrageMin(Q); // extrag nodul aflat cel mai aproape A = A {(u,p[u])}; // adaug muchia n AMA Pentru fiecare (v e succs(u)) Dac d[v] > w(u,v) atunci d[v] = w(u,v); //+ d[u] // actualizm distanele i prinii nodurilor p[v] = u; // adiacente care nu sunt n AMA nc ntoarce A - {(s,p(s))} // prima muchie adugat Complexitate? Proiectarea Algoritmilor 2010 Reminder Dijkstra (II) Dijkstra(G,s) Pentru fiecare (u V) d[u] = ; p[u] = null; d[s] = 0; Q = construiete_coada(V) // coad cu prioriti Ct timp (Q != C) u = ExtrageMin(Q); // extrage din V elementul cu d[u] minim // Q = Q - {u} se execut n cadrul lui ExtrageMin Pentru fiecare (v Q i v din succesorii lui u) Dac (d[v] > d[u] + w(u,v)) d[v] = d[u] + w(u,v) // actualizez distana p[v] = u // i printele Proiectarea Algoritmilor 2010 Complexitate Prim Depinde de implementare (vezi Dijkstra) Matrice de adiacen Heap binar Heap Fibonacci
Concluzii O(V 2 ) O(ElogV) O(VlogV+E) Grafuri dese Matrice de adiacen preferat Grafuri rare Heap binar sau Fibonacci Proiectarea Algoritmilor 2010 Algoritmul lui Kruskal Kruskal(G,w) A = C; // AMA Pentru fiecare (v V) Constr_Arb(v) // creeaz o mulime format din nodul respectiv // (un arbore cu un singur nod) Sorteaz_asc(E,w) // se sorteaz muchiile n funcie de // costul lor Pentru fiecare ((u,v) E) // muchiile se extrag n ordinea // costului Dac Arb(u) != Arb(v) atunci // verificm dac se creeaz ciclu Arb(u) = Arb(u) Arb(v) // se reunesc mulimile de noduri (arborii) A = A {(u,v)} // se adaug muchia sigur n AMA ntoarce A Implementare n Java la [4] ! Proiectarea Algoritmilor 2010 Exemplu (I) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (II) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (III) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (IV) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (V) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VI) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VII) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (VIII) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (IX) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (X) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XI) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XII) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XIII) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XIV) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Exemplu (XV) CE -1 EF -2 AG-2 JK-2 AI-3 GH-4 BC-5 IJ-5 AH-6 KL-7 BG-8 CD-8 IL-8 AB-9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Comparaie Prim - Kruskal I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Corectitudine (I) 1. artm c muchiile ignorate nu fac parte din Arb: Pp. (u,v) a.. Arb(u) = Arb(v) (u,v) creeaz un ciclu n Arb(u) (arborii sunt aciclici) w(u,v) = max {w(u,v) | (u,v) e Arb(u)} (din faptul c muchiile sunt sortate cresctor) din Propr. 1 (u,v) e Arb Proiectarea Algoritmilor 2010 Corectitudine (II) 2. artm c muchiile pe care le adugm aparin Arb:
Dem prin inducie dup muchiile adugate n AMA:
P 1 : Avem nodurile u i v, cu muchia (u,v) avnd proprietatea w(u,v) = min {w(u,v) | (u,v) e E} din Propr. 2 (u,v) e Arb.
P n P n+1 : Arb(u) != Arb(v) (u,v) muchie cu un capt n Arb(u) (u,v) are cel mai mic cost din muchiile cu un capt n u (din faptul c muchiile sunt sortate cresctor) din Propr. 2 (u,v) e Arb Proiectarea Algoritmilor 2010 Algoritmul lui Kruskal Kruskal(G,w) A = C; // AMA Pentru fiecare (v V) Constr_Arb(v) // creeaz o mulime format din nodul respectiv // (un arbore cu un singur nod) Sorteaz_asc(E,w) // se sorteaz muchiile n funcie de // costul lor Pentru fiecare ((u,v) E) // muchiile se extrag n ordinea // costului Dac Arb(u) != Arb(v) atunci // verificm dac se creeaz ciclu Arb(u) = Arb(u) Arb(v) // se reunesc mulimile de noduri (arborii) A = A {(u,v)} // se adaug muchia sigur n AMA ntoarce A Complexitate? Proiectarea Algoritmilor 2010 Complexitate Kruskal Elementele algoritmului: Sortarea muchiilor: O(ElogE) O(ElogV) Arb(u) = Arb(v) compararea a 2 mulimi disjuncte {1,2,3} {4,5,6} mai precis trebuie identificat dac 2 elemente sunt n aceeai mulime Arb(u) Arb(v) reuniunea a 2 mulimi disjuncte ntr-una singur
depinde de implementarea mulimilor disjuncte Proiectarea Algoritmilor 2010 Variante de implementare mulimi disjuncte (Var. 1) contraexemplu Mulimile implementate ca vectori (popular la laborator ) NERECOMANDAT Reuniune (M1, M2) Pentru i de la length(M 1 ) la length(M 1 ) + length(M 2 ) M 1 [i] = M 2 [i - length(M 1 )] ntoarce M 1
Complexitate: V Comparare (M 1 , M 2 ) Pentru fiecare (u M 1 ) Pentru fiecare (v M 2 ) Dac (u = v) ntoarce true ntoarce false
Complexitate: V 2 numrul de apelri E
Complexitate total: E*V 2 Proiectarea Algoritmilor 2010 Variante de implementare mulimi disjuncte (Var. 2) Regsire Rapid Mulimile - vectori Id - vector de id-uri coninnd id-ul primului nod din component
Arb(u) != Arb(v) Complexitate? Arb(u) = Arb(u) Arb(v) Complexitate? A B C D E F G H I J K L 0 1 2 3 4 5 6 7 8 9 10 11 0 1 1 1 1 1 1 1 0 0 0 0 Complexitate maxim? I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Regsire rapid (Complexitate) Compararea O(1) // Cutare n vector i verificare dac au acelai id Reuniunea O(V) // trebuie s modifice toate id-urile nodurilor din una din mulimi
Complexitate maxim O(V * E) // E = numrul de reuniuni
Inacceptabil pentru grafuri f mari Proiectarea Algoritmilor 2010 Variante de implementare mulimi disjuncte (Var. 3) Reuniune Rapid se folosete tot un vector auxiliar de id-uri
id[i] reprezint printele lui i
pentru rdcina arborelui id[i] = i
A B C D E F G H I J K L 0 1 2 3 4 5 6 7 8 9 10 11 8 1 1 2 2 4 1 6 8 8 9 10 I L A B C D E F G H J K 3 5 8 2 7 6 8 2 1 9 8 5 2 4 9 Proiectarea Algoritmilor 2010 Comparare (u, v) Verific dac 2 noduri au aceeai rdcin; Implic identificarea rdcinii:
Arb(u) // identificarea rdcinii unei componente Ct timp (i != id[i]) i = id[i]; ntoarce i
Comparare (u, v) ntoarce Arb(u) != Arb(v)
Reuniune (u,v) // implic identificarea rdcinii v = Arb(v) id[v] = u; Variante de implementare mulimi disjuncte reuniune rapid Complexitate? Proiectarea Algoritmilor 2010 Reuniune rapid (Complexitate) Compararea O(V) // n cel mai ru caz, am o lista i trebuie s trec din printe n printe.
Reuniunea O(V) // implic regsirea rdcinii pentru a ti unde se face modificarea Proiectarea Algoritmilor 2010 Optimizarea reuniunii rapide (1) Reuniune rapid balansat
Se menine numrul de noduri din fiecare subarbore.
Se adaug arborele mic la cel mare pentru a face mai puine cutri nlimea arborelui e mai mic i numrul de cutri scade de la V la lg V.
Complexitate: Compararea O(lg V) Reuniune O(lg V) Proiectarea Algoritmilor 2010 Optimizarea reuniunii rapide (2) Reuniune rapid balansat cu compresia cii:
Identificarea rdcinii: Arb(u) Ct timp (i != id[i]) id[i] = id[id[i]]; i = id[i]; ntoarce i
Menine o nlime redus a arborilor. Implementare n Java i exemplu la [4] I A J K L I A J K L Arborele de noduri Arborele de id-uri K: id[K] = id[J] = I L: id[L] = id[K] = I Proiectarea Algoritmilor 2010 Complexitate dup optimizri Orice secven de E operaii de cutare i reuniune asupra unui graf cu V noduri consum O(V + E*(V,E)).
de cte ori trebuie aplicat lg pentru a ajunge la 1. n practic este 5.
n practic O(E) Proiectarea Algoritmilor 2010 Complexitate Kruskal Max (complexitate sortare, complexitate operaii mulimi) = max(O(ElogV), O(E)) = O(ElogV)
Complexitatea algoritmului Kruskal este dat de complexitatea sortrii costurilor muchiilor. Proiectarea Algoritmilor 2010 Aplicaie practic K-clustering mprirea unui set de obiecte n grupuri astfel nct obiectele din cadrul unui grup s fie apropiate considernd o distan dat.
Utilizat n clasificare, cutare (web search de exemplu).
Dndu-se un ntreg K s se mpart grupul de obiecte n K grupuri astfel nct spaiul dintre grupuri s fie maximizat. Proiectarea Algoritmilor 2010 Exemplu Proiectarea Algoritmilor 2010 Algoritm Se formeaz V clustere (un cluster per obiect).
Gsete cele mai apropiate 2 obiecte din clustere diferite i unete cele 2 clustere.
Se oprete cnd au mai rmas k clustere.
chiar algoritmul Kruskal NTREBRI?
Proiectarea Algoritmilor 2010 79 Proiectarea Algoritmilor 2010 Bibliografie curs 10 [1] C. Giumale Introducere in Analiza Algoritmilor - cap. 5.6
[2] Cormen Introducere in algoritmi - cap. 27
[3] Wikipedia - http://en.wikipedia.org/wiki/Ford- Fulkerson_algorithm