Struktur Data graf: representasi & algoritma-algoritma
26 April 1999
Dalam aplikasinya problem ini misalnya
dalam contoh di atas sisi {E,D} bisa digantikan oleh sisi {I,J} yang membentuk MST lain dengan total panjang rentangan yang sama.
Pada setiap iterasi terdapat kondisi di mana himpunan verteks V terbagi dua dalam:
Dari contoh di atas misalnya dilakukan pencarian mulai dari verteks A
(ingat tidak harus selalu dari verteks A!). Maka algoritma ini
menghasilkan tahapan-tahapan iterasi pencarian sbb.:
No iterasi | W | V-W | Sisi-sisi yang dievaluasi | verteks berikutnya |
1 | {A} | {B, C, D, E, F, G, H, I, J, K, L, M} | {A,B}=24, {A,C}=43, {A.D}=33, {A,F}=31 | B karena {A,B} adalah minimum |
2 | {A, B} | {C, D, E, F, G, H, I, J, K, L, M} | {A,C}=43, {A.D}=33, {A,F}=31, {B,C}=18, {B,H}=45 | C karena {B,C} adalah minimum |
3 | {A, B, C} | {D, E, F, G, H, I, J, K, L, M} | {A.D}=33, {A,F}=31, {B,H}=45, {C,E}=16, {C,G}=22, {C,H}=35, {C,I}=15 | I karena {C,I} adalah minimum |
4 | {A, B, C, I} | {D, E, F, G, H, J, K, L, M} | {A.D}=33, {A,F}=31, {B,H}=45, {C,E}=16, {C,G}=22, {C,H}=35, {G, I}=21, {H,I}=25, {I,J}=19, {I,M}=35 | E karena {C,E} adalah minimum |
5 | {A, B, C, E, F, I} | {D, G, H, J, K, L, M} | {A.D}=33, {B,H}=45, {C,G}=22, {C,H}=35, {E.D}=19, {G, I}=21, {H,I}=25, {I,J}=19, {I,M}=35 | F karena {E,F} adalah minimum |
6 | {A, B, C, E, F, I} | {D, G, H, J, K, L, M} | {A.D}=33, {B,H}=45, {C,G}=22, {C,H}=35, {E.D}=19, {F,D}=22, {G, I}=21, {H,I}=25, {I,J}=19, {I,M}=35 | D karena {D,E} adalah minimum |
7 | {A, B, C, D, E, F, I} | {G, H, J, K, L, M} | {B,H}=45, {C,G}=22, {C,H}=35, {D,G}=39, {D,K}=13, {D,L}=27, {G, I}=21, {H,I}=25, {I,J}=19, {I,M}=35 | K karena {D,K} adalah minimum |
8 | {A, B, C, D, E, F, I, K} | {G, H, J, L, M} | {B,H}=45, {C,G}=22, {C,H}=35, {D,G}=39, {D,L}=27, {K,G}=13, {K,J}=10 ,{K,L}=19, {G, I}=21, {H,I}=25, {I,J}=19, {I,M}=35 | J karena {K,J} adalah minimum |
9 | {A, B, C, D, E, F, I, J, K} | {G, H, L, M} | {B,H}=45, {C,G}=22, {C,H}=35, {D,G}=39, {D,L}=27, {G,K}=13, {G, I}=21, {H,I}=25, {I,M}=35, {J,M}=15, {K,L}=19 | G karena {K,G} adalah minimum |
10 | {A, B, C, D, E, F, G, I, J, K} | {H, L, M} | {B,H}=45, {C,H}=35, {D,L}=27, {H,I}=25, {I,M}=35, {J,M}=15, {K,L}=19 | M karena {J,M} adalah minimum |
11 | {A, B, C, D, E, F, G, I, J, K, M} | {H, L} | {B,H}=45, {C,H}=35, {D,L}=27, {H,I}=25, {K,L}=19, {L,M}=25 | L karena {K,L} adalah minimum |
12 | {A, B, C, D, E, F, G, I, J, K, L, M} | {H} | {B,H}=45, {C,H}=35, {H,I}=25 | I karena {H,I} adalah minimum |
13 | {A, ..., M} | {} | selesai |
Cara lain yang lebih efisien adalah dengan menggunakan dua struktur linked list: linked list untuk W dan untuk (V-W), sehingga dapat mengurangi jumlah iterasi yang perlu dilakukan dalam memeriksa adjacency.
Salah satu pemecahaannya adalah dengan subsetting yaitu pembentukan subset-subset yang disjoint dan secara bertahap dilakukan penggabungan atas tiap dua subset yang berhubungan dengan suatu sisi dengan bobot terpendek. Algoritma lengkapnya:
Dari contoh di atas maka berturut-turut diperiksa sisi-sisi sbb.:
Cara lain yang lebih efisien adalah dengan linked-list; setiap subset adalah satu linked list.
Mengingat bahwa representasi matriks untuk graph berbobot menggunakan harga bilangan INFINITY maka proses akan berakhir jika bobot sisi yang diperiksa berbobot INFINITY atau memang sudah tidak ada lagi sisi yang lain.
Pada tahap inisialisasi indegree dari masing-masing vertex adalah:
Pada iterasi pertama A adalah satu-satunya yang memiliki indegree berharga 0. Setelah A "dimasukkan ke dalam L" maka inorder dari verteks-verteks adjacent dari A diupdate, menghasilkan.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Iterasi | A | B | C | D | E | F | G | H | I | J | K | L | M | "Masuk L" | |
1 | 0 | 0 | 0 | 0 | 2 | 2 | 2 | 1 | 2 | 1 | 4 | 1 | 3 | ||
2 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 0 | 1 | 1 | 4 | 1 | 3 | ||
3 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 3 | 0 | 3 | (dan seterusnya....) |
Solusi masalah ini adalah kombinatorik, berarti eksponensial (non polinomial), tepatnya masalah NP-complete. Untuk mencapai waktu polimnomial maka sejumlah algoritma tersedia namun hanya menghasilkan solusi aproksimasi (hasil yang diperoleh tidak minimal).
Masalah-masalah graph tersebut misalnya: k-colorability problem, pencarian k-clique, pencarian vertex-cover, pencarian hamiltonian circuit.