Anda di halaman 1dari 42

Implementasi Greedy 2 :

Minimum Spanning Tree


Definisi

Minimum Spanning Tree (MST) adalah salah satu


bentuk graph (bisa berarah maupun tidak) dengan
karakteristik :

 Menjangkau / menghubungkan semua nodes

 Total bobot graph minimal


Algoritma Kruskal dan Prim

Algoritma greedy yang dapat digunakan untuk


menghasilkan solusi pada MST adalah algoritma
Kruskal dan Prim.

 Hanya dapat diimplementasikan pada undirected


graph

 Dapat diimplementasikan pada graph berbobot


maupun tidak

 Menghasilkan solusi yang optimal


Solusi MST dengan Greedy
Graph (Undirected, Weighted) Array
2
K dv pv
3
F Vertex …. …. ….
10 C
Vertex …. …. ….
A 7
4
3
8
18
4
9
B D
10
H 25
2
3
G 7
E
Solusi MST dengan Greedy

K dv pv  Kv : Apakah vertex sudah


Vertex …. …. …. pernah dikunjungi.
Vertex …. …. …. Diisi dengan T atau F

 Dv : Bobot minimal menuju


vertex tersebut.

 Pv : Parent vertex
Penyelesaian dengan
Algoritma Kruskal
Algoritma Prim
2
Inisialisasi array
3
10
F C K dv pv
A 7 3 A F  
8 4
18 B F  
4
9
B D C F  
10
H 25 D F  
2
3 E F  
G 7
E F F  
G F  
H F  
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B
18
4
9
B D C
10
H 25 D T 0 
2
3 E
G 7
E F
G
H

Mulai dari sembarang node


Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B
18
4
9
B D C 3 D
10
H 25 D T 0 
2
3 E 25 D
G 7
E F 18 D
G 2 D
H

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B
18
4
9
B D C 3 D
10
H 25 D T 0 
2
3 E 25 D
G 7
E F 18 D
G T 2 D
H

Pilih bobot paling minimal


Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B
18
4
9
B D C 3 D
10
H 25 D T 0 
2
3 E 7 G
G 7
E F 18 D
G T 2 D
H 3 G

Update kembali bobot vertex-vertex yang


bertetangga dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E 7 G
G 7
E F 18 D
G T 2 D
H 3 G

Pilih bobot paling minimal


Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E 7 G
G 7
E F 3 C
G T 2 D
H 3 G

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E 7 G
G 7
E F T 3 C
G T 2 D
H 3 G

Pilih bobot paling minimal


Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A 10 F
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E 2 F
G 7
E F T 3 C
G T 2 D
H 3 G

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A 10 F
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H 3 G

Pilih bobot paling minimal


Algoritma Prim
2
Unchanged
3
10
F C K dv pv
A 7
4
3 A 10 F
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H 3 G

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A 10 F
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H T 3 G

Pilih bobot paling minimal


Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A 4 H
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H T 3 G

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A T 4 H
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H T 3 G

Pilih bobot paling minimal


Algoritma Prim
2
Unchanged
3
10
F C K dv pv
A 7
4
3 A T 4 H
8 B 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H T 3 G

Update bobot vertex-vertex yang bertetangga


dan belum pernah terpilih
Algoritma Prim
2

3
10
F C K dv pv
A 7
4
3 A T 4 H
8 B T 4 C
18
4
9
B D C T 3 D
10
H 25 D T 0 
2
3 E T 2 F
G 7
E F T 3 C
G T 2 D
H T 3 G

Pilih bobot paling minimal


Algoritma Prim
2 Bobot total MST =  dv =
21
3
F C K dv pv
A 4
3 A T 4 H
B T 4 C
4
B D C T 3 D
H D T 0 
2
3 E T 2 F
G E F T 3 C
G T 2 D
H T 3 G

SELESAI
Penyelesaian dengan
Algoritma Kruskal
Algoritma Kruskal

Prinsip kerja

 Menggunakan bobot pada edge

 Memilih |V| – 1 yang tidak mengakibatkan loop


Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1 (B,E) 4
8 4
6 (D,G) 2 (B,F) 4
5
4
B D (E,G) 3 (B,H) 4
4
H 1
(C,D) 3 (A,H) 5
2
3 (G,H) 3 (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Tuliskan semua edge dengan urutan menaik


Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
8 4
6 (D,G) 2 (B,F) 4
5
4
B D (E,G) 3 (B,H) 4
4
H 1
(C,D) 3 (A,H) 5
2
3 (G,H) 3 (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop


Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3 (B,H) 4
4
H 1
(C,D) 3 (A,H) 5
2
3 (G,H) 3 (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Edge (D,G) jika dipilih tidak mengakibatkan loop


Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3 (A,H) 5
2
3 (G,H) 3 (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (E,G) jika dipilih mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3 (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (C,D) jika dipilih tidak mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3 (A,B) 8
(B,C) 4 (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (G,H) jika dipilih tidak mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4 (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (C,F) jika dipilih tidak mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (B,C) jika dipilih tidak mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (B,E) jika dipilih mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4 
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (B,F) jika dipilih mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4 
5
4
B D (E,G) 3  (B,H) 4 
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (B,H) jika dipilih mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4 
5
4
B D (E,G) 3  (B,H) 4 
4
H 1
(C,D) 3  (A,H) 5 
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Pilih edge pertama yang tidak mengakibatkan loop.


Edge (A,H) jika dipilih tidak mengakibatkan loop
Algoritma Kruskal
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4 
5
4
B D (E,G) 3  (B,H) 4 
4
H 1
(C,D) 3  (A,H) 5 
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Sudah menjangkau semua vertex


Algoritma Kruskal
3
F C edge dv edge dv

A 3 (D,E) 1  (B,E) 4 
4
(D,G) 2  (B,F) 4 
5
B D (E,G) 3  (B,H) 4 
H 1
(C,D) 3  (A,H) 5 
2
 (D,F) 6

}
3 (G,H) 3
not
G E (C,F) 3  (A,B) 8 considered
(B,C) 4  (A,F) 10

Sudah menjangkau semua vertex Total Bobot =  dv = 21


Deteksi Loop/Cycle
3
10
F C edge dv
A 4 3 (D,E) 1 
4
8
6 (D,G) 2 
5
4
B D (E,G) 3 
4
H 1
(C,D) 3 
2
3 (G,H) 3 
G 3
E (C,F) 3 
(B,C) 4 

Salah metode yang digunakan adalah disjoint set.


Disjoint Set
3
10
F C edge dv
A 4 3 (D,E) 1 
4
8
6 (D,G) 2 
5
4
B D (E,G) 3 
4
H 1
(C,D) 3 
2
3 (G,H) 3 
G 3
E (C,F) 3 
(B,C) 4 

Findset (D)=D Findset (D)=D Findset (C)=C


Findset (E)=E Findset (G)=G Findset (C)=D
Union DE Union DEG Union DEGC
Disjoint Set
3
10
F C edge dv edge dv

A 4 3 (D,E) 1  (B,E) 4 
4
8
6 (D,G) 2  (B,F) 4
5
4
B D (E,G) 3  (B,H) 4
4
H 1
(C,D) 3  (A,H) 5
2
3 (G,H) 3  (D,F) 6
G 3
E (C,F) 3  (A,B) 8
(B,C) 4  (A,F) 10

Union DEGCHFB Findset (B)=B


Findset (E)=E
TIDAK BISA UNION

Anda mungkin juga menyukai