You are on page 1of 12

Algoritma Prim

Mata Kuliah :
[ CF-1333 Alpro 2 ]

Disusun oleh :

Khairu Rahman 5207 100 030

Jurusan Sistem Informasi


Fakultas Teknologi Informasi
Institut Teknologi Sepuluh Nopember
Surabaya

1
ALGORITMA PRIM

Algoritma Prim adalah sebuah algoritma dalam graph theory untuk mencari
pohon rentang minimum untuk sebuah graf terhubung berbobot [wikipedia]. Untuk
lebih jelas akan saya berikan contoh dengan gambar :

A F

B C

D E

Terdapat sebuah rangkaian seperti pada gambar di atas. Setiap titik disebut
dengan vertex. Terdapat 6 vertex yaitu A, B, C, D, E, dan F. Yang ingin dilakukan
di sini adalah menghubungkan semua vertex yang ada dengan melalui jalur
yang menghabiskan cost paling minimal. Dengan menggunakan algoritma prim
kita dapat menentukan jalur tersebut.

Adapun langkah-langkah penyelesainnya adalah sebagai berikut :

Cara I

1. tentukan titik start. Dalam kasus ini saya tentukan titik startnya adalah
vertex B.
2. kemudian buatlah dua buah himpunan. Misalkan himpunan T dan S.
Dimana elemen dari T adalah vertex-vertex yang sudah saling terhubung
dan elemen himpunan S adalah vertex-vertex yang belum terhubung.
Pada akhir proses, seluruh elemen F akan berpindah menjadi elemen T
dan F menjadi himpunan kosong.
3. pada awal proses elemen T hanyalah vertex yang menjadi titik start
(vertex B) dan himpunan F berisi vertex-vertex sisanya.

2
4. T={B} ; F={A,C,D,E,F}
B(- , -) : A(B,1) D(B,1) C(B,5) E(- ,  ) F(- , )
Tuliskan semua vertex yang memiliki kemungkinan terhubung dengan
vertex B secara langsung. Penulisan A(B,1) artinya titik A bisa
dihubungkan secara langsung dengan vertex B(titik start) dengan cost 1.
Pada langkah ini vertex E dan F tidak dapat terhubung secara langsung
sehingga kita menuliskannya dengan E(- ,  ) dan F(- , ). Kemudian
pilihlah jalur yang menghabiskan cost paling minimal. Pada langkah ini
terdapat 2 jalur yang memiliki cost paling minimum, pilih saja yang lebih
dulu yaitu A(B,1). Dan selanjutnya himpunan T dan F menjadi T={B,A} ;
F={ C,D,E,F} .

A F

B C

D E

5. T={B,A} ; F={C,D,E,F}
A(B , 1) : D(B,1) C(A,3) F(A , 3 ) E(- , )

Saat ini vertex B dan A telah terhubung. Kemudian tuliskan semua


kemungkinan vertex yang bisa dihubungkan secara langsung dengan
vertex – vertex yang telah saling terhubung (bisa vertex A atau B). Pada
langkah ini vertex E tidak memiliki kemungkinan dihubungkan secara
langsung maka dituliskan dengan E(- , ). Kemudian pilih jalur yang
menghabiskan cost paling kecil.

3
A F

B C

D E

proses selanjutnya dilakukan dengan cara yang sama. Lanjutkan hingga


seluruh vertex terhubung atau dengan kata lain sampai himpunan F
menjadi himpunan kosong.

6. T={B,A,D} ; F={C,E,F}
D(B,1): C(D,2) E(D , 4) F(A , 3 )

A F

B C

D E

7. T={B,A,D,C} ; F={E,F}
C(D,2) : E(C,1) F(A,3)

4
A F

B C

D E

8. T={B,A,D,C} ; F={C,D,E,F}
E(C,1): F(A,3)

A F

B C

D E

9. Selesai. Semua vertex telah terhubung dengan cost 8 (cost optimal).

Begitulah cara kerja dari algoritma Prim. Cukup mudah dipahami bukan? Namun
jika kita ingin membuat program dari algoritma prim, menurut saya sangatlah sulit
membuat programnya jika kita berpatokan dengan cara I yang telah dijelaskan di
atas. Untuk membuat programnya lebih baik jika kita menggunakan cara II yang
akan saya jelaskan setelah ini. Cara II lebih mudah jika diimplementasikan ke dalam
bentuk program.

5
Cara II

1. langkah awal pada Cara II sama dengan langkah 1 sampai 3 pada Cara I.
2. kemudian buatlah sebuah tabel(array) yang menyimpan cost – cost antar
vertex dari persoalan yang diberikan (persoalan yang akan diselesaikan di
sini sama dengan persoalan yang diberikan pada Cara I). Jika terdapat

dua vertex yang tidak bisa terhubung secara langsung berikanlah nilai .
Tabel ini sebagai pengganti gambar.

Tabel data
Vertex A B C D E F
A 0 1 3   3

B 1 0 5 1  
C 3 5 0 2 1 
D  1 2 0 4 
E   1 4 0 5

3. buatlah tabel (Array) yang menyimpan nilai cost minimal yang ditempuh
dari vertex-vertex yang telah saling terhubung ke vertex yang belum
terhubung. Bingung? Tidak masalah , teruskan saja membaca dan
perhatikan dengan seksama. Insyaallah anda akan mengerti fungsi dari
tabel ini.

A B D E F
d[]

4. kemudian saya memebuat sebuah tabel lagi (tabel set) yang berisi data
bertipe boolean. Fungsi dari tabel ini adalah untuk mengenali suatu
vertex, apakah vertex tersebut masuk ke dalam himpunan T atau
himpunan F. Jika vertex tersebut masuk ke dalam T maka diberi nilai true

6
dan jika masuk ke dalam F diberi nilai false. Pada kondisi awal, semua isi
tabel set diberi nilai false kecuali pada vertex yang menjadi titik start.

A B D E F
set False True False False False

5. selanjutnya saya akan menjelaskan proses pencarian jalur paling optimal


dengan menggunakan cara II ini. Prosesnya sebagai berikut :
 step 1 :
T={B} ; F={A,C,D,E,F}
Maka tabel set;

A B C D E F
set False True False False False False

Dan tabel d ;
A B C D E F
d[] 1 0 5 1  

Ingat kembali fungsi tabel d ini yang telah dijelaskan


sebelumnya. Yaitu untuk menyimpan nilai cost minimal yang
ditempuh dari vertex-vertex yang telah saling terhubung ke
vertex yang belum terhubung. Isi d[A] berarti cost minimal
antara vertex-vertex yang telah saling terhubung ke vertex A.
Atau dengan kata lain jarak minimal antara salah satu vertex
yang terdapat dalam himpunana T menuju vertex A. Karena
himpunan T pada step ini hanya berisi B, maka isi dari d[A]
adalah cost dari jalur yang menghubungkan langsung vertex B
dan A. Nilai cost yang diperlukan tentu saja diambil dari tabel
data. Jika kedua vertex tidak dapat terhubung langsung beri nilai
tak hingga. Dan pada d[B] diberi nilai 0 karena tidak ada jarak.

7
Bagaimana jika himpunan T berisi lebih dari 1 vertex? Jika
demikian maka pilihlah satu vertex dalam himpunan T yang
dapat terhubung langsung dengan vertex-x yang terdapat dalam
himpunan F. Kemudian bagaimana jika vertex yang dapat
terhubung langsung lebih dari 1. Maka bandingkanlah vertex-
vertex yang dapat terhubung langsung tersebut, dan pilih yang
costnya paling minimal. Lanjutkanlah sampai semua tabel d
terisi.

Jika semua telah terisi, pilih salah satu vertex yang masih berada
dalam himpunan F yang costnya paling kecil. Jika terdapat lebih
dari 1 vertex yang memiliki cost sama dan paling minimal pilih
vertex yang lebih dulu . Kemudian pada step selanjutnya vertex
tersebut dipindahkan ke dalam himpunan T atau nilai pada tabel
set yang semula bernilai False diganti dengan True. Dan yang
perlu juga diperhatikan pada tiap step, jika suatu vertex telah
masuk ke dalam himpunan T, maka nilainya pada tabel d
tidak boleh diganti pada step-step selanjutnya.

Lanjutkan sampai semua vertex masuk ke dalam himpunan T.


Atau dengan kata lain semua vertex telah bernilai True pada
tabel set. atau bisa juga dikatakan proses dilanjutkan sampai
step ke-n (n=banyak vertex).

Cara kerja pada step-step selanjutnya sama. Sehingga saya tidak


perlu menjelaskan secara detail lagi.

 step 2 :
T={B, A} ; F={ C,D,E,F}
Maka tabel set;

A B C D E F
set True True False False False False

8
Dan tabel d ;
A B C D E F
d[] 1 0 3 1  3

 step 3 :

T={B, A,D} ; F={ C, E,F}


Maka tabel set;

A B C D E F
set True True False True False False

Dan tabel d ;
A B C D E F
d[] 1 0 2 1 4 3

 step 4 :

T={B, A, D, C} ; F={ E,F}


Maka tabel set;

A B C D E F
set True True True True False False

Dan tabel d ;
A B C D E F
d[] 1 0 2 1 1 3

9
 step 5 :
T={B, A, D, C,E} ; F={F}
Maka tabel set;

A B C D E F
set True True True True True False

Dan tabel d ;
A B C D E F
d[] 1 0 2 1 1 3

 step 6 :
T={B, A, D, C, E, F} ; F={ }
Maka tabel set;

A B C D E F
set True True True True True True

Dan tabel d ;
A B C D E F
d[] 1 0 2 1 1 3

6. setelah menyelesaikan step ke-6 ini artinya proses telah selesai. Dari isi
tabel d yang terakhir kita dapat dengan mudah menghitung cost paling
minimal yang diperlukan untuk menghubungkan semua vertex yang ada.
Caranya dengan menjumlahkan semua nilai yang ada pada tabel d. Kita
juga dapat menampilkan jarak antar vertex yang terhubung secara
langsung dan juga bisa menampilkan urutan vertex yang dihubungkan,
mulai dari vertex yang dijadikan titik start sampai vertex yang paling
terakhir dihubungkan.

10
Dari cara kedua ini , saya dapat membuat pseudocode untuk proses inti
Algoritma Prim. Proses yang dilakukan pada pseudocode ini adalah proses
pada cara II yang telah dijelaskan di atas. Yang perlu diperhatikan di sini
adalah, indeks terkecil yang saya pakai adalah 1, bukan 0. sehingga jika anda
ingin membuat programnya dalam bahasa java, perlu sedikit penyesuaian.
Tentunya bukanlah hal yang sulit untuk melakukan hal itu jika anda telah
benar-benar memahami prosesnya. Pseudocodenya adalah sebagai berikut :

PRIM(n,set,d,data)

1 for x  1 to n
2 do for i  1 to n
3 do if set[i] = False
4 then d[i] = COMPARE(i,n,set,d,data)
// mencari isi d[] yg paling minimal dan memilih vertex yg
dilalui selanjutnya

5 b  
6 for i  to n
7 do if d[i] < b && d[i]  0 && cek[i] = False
8 then b  d[i]
9 min = i
10 cek[min]  True

COMPARE(j,n,set,d,data)

1 b  
2 for i  1 to n
3 do if cek[i] = True
4 then if data[i][j] < b
5 then b = m[i][j]
6 min = b
7 return min

Bagaimana membuat programnya?? Silakan anda lakukan sendiri =).


Tentunya anda akan merasa lebih puas jika membuat dapat programnya
sendiri. Memahami proses yang dilakukan dalam Algoritma Prim ditambah
lagi pseudocode yang diberikan, itu merupakan modal yang lebih dari cukup
untuk dapat membuat programnya. Atau jika anda ingin lebih menantang,
anda tidak perlu memperhatikan pseudocode yang saya tuliskan di atas, anda

11
cukup pahami proses Algoritma Prim dan buat pseudocodenya sendiri.. =).
Jika anda dapat menyelesaikannya pasti anda akan jauh merasa lebih puas.

SELAMAT MENCOBA !!!

12