My first Magazine pemrograman-kompetitif-dasar | Page 142
11 Algoritma Graf
akan masuk ke dalam tree . Dengan demikian, akan ada tepat O(V ) pemilihan node . Jika pemilihan
diimplementasikan secara naif dengan mencari node tersebut secara linear, maka kompleksitas
total pemilihan node adalah O(V 2 ). Pada setiap pemilihan node , terjadi proses relax . Secara
total, setiap edge akan mengalami relax sebanyak 2 kali, sehingga kompleksitas akhir algoritma
Prim adalah O(V 2 + E).
Serupa dengan Dijkstra, kita dapat melakukan optimasi pemilihan edge dengan memanfaat-
kan struktur data heap , sehingga setiap operasi pemilihan edge memiliki kompleksitas O(logV ).
Dengan demikian, kompleksitas total algoritma Prim adalah O((V + E) logV ).
Implementasi
Algoritma 68 Implementasi algoritma Prim dengan optimisasi heap .
1:
2:
3:
4:
5:
6:
7:
8:
function P RIM (s)
cost ← 0
dist ← new integer[V + 1]
visited ← new boolean[V + 1]
pred ← new integer[V + 1]
FILL A RRAY (dist, ∞)
FILL A RRAY (visited, f alse)
FILL A RRAY (pred, −1)
INITIALIZE H EAP ()
9:
. Buat sebuah min-heap
. Masukkan node s dengan jarak tempuh 0 ke dalam heap
10: PUSH (h0, si)
11: dist[s] ← 0
while not IS E MPTY H EAP () do
hcurDist, ui ← POP ()
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
if not visited[u] then
visited[u] ← true
cost ← cost + dist[u]
. Dapatkan node yang dapat digabungkan ke
tree solusi dengan bobot edge terkecil
. Hanya proses apabila u belum termasuk pada tree solusi
. Tambahkan bobot edge yang menghubungkan
tree solusi terhadap u ke dalam solusi
for v ∈ ad j(u) do
. Lakukan relax untuk semua tetangga u
if (dist[v] > w[u][v]) ∧ (not visited[v]) then
dist[v] = w[u][v]
pred[v] = u
PUSH (hdist[v], vi)
. Masukkan bobot edge dan node yang
end if
diperbaharui ke heap
end for
end if
end while
return cost
end function
Secara implementasi, Algoritma Prim sangat serupa dengan algoritma Dijkstra. Perbedaan
mendasarnya adalah pada setiap pengunjungan node , kita tidak menghitung jarak total dari node
awal, melainkan hanya bobot pada edge -nya saja. Algoritma 69 merupakan prosedur untuk
mencetak edge -edge solusi.
132