An2 Derivat - Ro Proiectarea-Algoritmilor PA 22

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

Sunteți pe pagina 1din 36

Platform de e-learning i curricul e-content pentru nvmntul superior tehnic

Proiectarea Algoritmilor

22. Algoritmul lui Kruskal

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

[5] http://www.pui.ch/phred/automated_tag_clustering/ [6] Cormen Introducere n Algoritmi cap. 24


Proiectarea Algoritmilor 2010

Algoritmul lui Kruskal

Kruskal(G,w)

Implementare n Java la [4] !

A = ; // 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
Proiectarea Algoritmilor 2010

Exemplu (I)
I 3 A 9 B 8 5 C 2 6 G 5

2
4

8 K
H E 7 L F

8 D
9

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

Proiectarea Algoritmilor 2010

Exemplu (II)
I 3 A 9 B 8 5 C 2 6 G 5

2
4

8 K
H E 7 L F

8 D
9

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 3 A 9 B 8 5 C 2 6 G 5

2
4

8 K
H E 7 L F

8 D
9

Proiectarea Algoritmilor 2010

Exemplu (III)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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 3 A 9 B 8 5 C 2 6 G 5

2
4

8 K
H E 7 L F

8 D
9

Proiectarea Algoritmilor 2010

Exemplu (IV)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (V)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (VI)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (VII)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (VIII)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (IX)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (X)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (XI)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (XII)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (XIII)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (XIV)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Exemplu (XV)
I
3 A 9 B 2 5 J

G
2 6 C

8 5
8

8 K

H E

7 L F

D 9 2

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
3 A 9 B 2 5 J

G
2 6 C

8
5 8

8 K H 7 L F

D 9 2

Proiectarea Algoritmilor 2010

Comparaie Prim - Kruskal


I
3 A 9 B 2 5 J A 2 9 K B 8 5 C 6 3 G I 5

G
2 6 C

8 5
8

2
4

8
K H E 7 L F

H E

8
L F 2 D

D 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) Arb(u)} (din faptul c muchiile sunt sortate cresctor) din Propr. 1 (u,v) Arb

Proiectarea Algoritmilor 2010

Corectitudine (II)

2. artm c muchiile pe care le adugm aparin Arb: Dem prin inducie dup muchiile adugate n AMA:
P1: Avem nodurile u i v, cu muchia (u,v) avnd proprietatea w(u,v) = min {w(u,v) | (u,v) E} din Propr. 2 (u,v) Arb.

PnPn+1:

Arb(u) != Arb(v) (u,v) muchie cu un capt in 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) Arb

Proiectarea Algoritmilor 2010

Complexitate Kruskal

Kruskal(G,w)

A = ; // AMA Pentru fiecare (v V)

Complexitate?

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

Comparare (M1, M2)

Reuniune (M1, M2)

Pentru fiecare (u M1)

Pentru fiecare (v M2)

Pentru i de la length(M1) la length(M1) + length(M2)

Dac (u = v) ntoarce true

M1[i] = M2[i - length(M1)]

ntoarce false

ntoarce M1

Complexitate: V2

Complexitate: V

numrul de apelri E Complexitate total: E*V2


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

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
I 3 A 9 B 8 5 C 8 D 9 2 1 H 7 2 6 G 2 5 J

8 K

E F

Arb(u) != Arb(v) Complexitate? Arb(u) = Arb(u) Arb(v) Complexitate?


Proiectarea Algoritmilor 2010

Complexitate maxim?

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


B

3
A 9 8 5 C 2 6 G

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

2 4 H E 9 2 F L

8 K 7

id[i] reprezint printele lui i pentru rdcina arborelui id[i] = i


Proiectarea Algoritmilor 2010

Variante de implementare mulimi disjuncte reuniune rapid

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)

Complexitate?

Arb(u) != Arb(v)

Reuniune (u,v) // implic identificarea rdcinii


v = Arb(v) id[v] = u;

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)

I A J K L A

I J K L

Arborele de noduri

Arborele de id-uri

Ct timp (i != id[i])

id[i] = id[id[i]]; i = id[i];

K: id[K] = id[J] = I L: id[L] = id[K] = I

ntoarce i

Menine o nlime redus a arborilor.


Proiectarea Algoritmilor 2010

Implementare n Java i exemplu la [4]

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 cate 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
Proiectarea Algoritmilor 2010

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