My first Magazine pemrograman-kompetitif-dasar | Page 146
11 Algoritma Graf
edge yang akan dicek, dan setiap pengecekan memerlukan waktu O(E), maka kompleksitasnya
adalah O(E 2 ).
Agar lebih efisien, kita dapat memanfaatkan struktur data disjoint set . Mula-mula, kita siap-
kan N buah set yang masing-masing berisi satu node pada graf. Suatu edge yang menghubungkan
node x dan y dapat diambil jika x dan y berada pada set yang berbeda. Jika kita mengambil
edge tersebut, kita gabungkan kedua set yang mengandung x dan y. Jika x dan y berada pada
set yang sama, artinya x dan y sudah tergabung pada tree yang sama. Dengan demikian, jika
kita mengambil edge baru yang menghubungkan x dan y, maka dijamin akan menghasilkan siklus.
Maka, kompleksitas akhir Kruskal adalah O(E log E).
implementasi
Algoritma 70 Implementasi algoritma Kruskal dengan optimisasi disjoint set .
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function K RUSKAL (edgeList)
INITIALIZE D ISJOINT S ET ()
SORT (edgeList)
for hu, vi ∈ edgeList do
if not CHECK (u, v) then
cost ← cost + w[u][v]
JOIN (u, v)
end if
end for
return cost
end function
. Urutkan berdasarkan bobotnya
Implementasi algoritma Kruskal cukup sederhana, dan dapat dilihat pada Algoritma 70.
136