Anda di halaman 1dari 10

STUDI DAN IMPLEMENTASI PERSOALAN LINTASAN

TERPENDEK SUATU GRAF DENGAN ALGORITMA DIJKSTRA


DAN ALGORITMA BELLMAN-FORD
Bayu Aditya Pradhana – NIM : 13505124
Program Studi Teknik Informatika, Institut Teknologi Bandung
Jl. Ganesha 10, Bandung
E-mail : if15124@students.if.itb.ac.id

Abstrak

Makalah ini membahas tentang studi dan implementasi persoalan lintasan terpendek suatu graf dengan
algoritma dijkstra dan algoritma Bellman-Ford. Lintasan terpendek merupakan bagian dari teori graf. Jika
diberikan sebuah graf berbobot, masalah jarak terpendek adalah bagaimana kita mencari sebuah jalur pada
graf yang meminimalkan jumlah bobot sisi pembentuk jalur tersebut. Persoalan ini adalah persoalan
optimasi, dimana kita akan mencari beberapa alternatif solusi penyelesaian yang paling efektif dan
mangkus dari masalah penentuan lintasan terpendek pada suatu graf.

Saat ini banyak sekali algortima-algoritma yang dapat digunakan untuk menyelesaikan persoalan penentuan
lintasan terpendek (shortest path problem) dari suatu graf. Solusi yang didapat dari penelusuran algoritma
tersebut dapat diberi nama Pathing Algorithm. Ada dua algortima yang cukup terkenal yang bisa
digunakaan untuk menyelesaikan persoalan lintasan terpendek, yaitu Algoritma Dijkstra dan Algoritma
Bellman-Ford.

Algoritma Dijkstra merupakan salah satu algoritma yang digunakan untuk memecahkan permasalahan
lintasan terpendek yang terdapat pada suatu graf . Algoritma ini digunakan pada graf berbobot dengan
syarat bobot dari masing-masing sisi haruslah bernilai positif (>=0). Algoritma Bellman-Ford juga
merupakan salah satu algoritma yang digunakan untuk memecahkan permasalahan lintasan terpendek yang
terdapat pada suatu graf. Algoritma ini digunakan pada graf berbobot dengan bobot yang dapat bernilai
positif maupun bernilai negatif. Apabila kita hendak mencari lintasan terpendek dari suatu graf berbobot
yang terdapat sisi yang berbobot negatif kita dapat menggunakan algoritma Bellman-Ford, sedangkan
apabila kita menemui suatu graf berbobot yang setiap sisinya berbobot positif maka kita dapat
menggunakan algoritma Bellman-Ford atau algoritma dijkstra, beberapa analisa pun menunjukkan
beberapa keuntungan dan kelemahan dari kedua algoritma tersebut.

Kata kunci: graf, graf berbobot, lintasan, shortest pah problem, algoritma dijkstra, algoritma bellman-
ford, pathing algorithm.

1. Pendahuluan solusi yang sangat bagus terhadap beberapa


kasus tertentu. Banyak sekali aplikasi yang
Graf adalah himpunan simpul yang dihubungkan
menggunakan dengan graf sebagai alat untuk
dengan busur-busur. Setiap busur diasosiasikan
merepresentasikan atau memodelkan persoalan
dengan tepat dua simpul. Dalam kehidupan
sehinggan persoalan itu dapat diselesaikan
sehari-hari banyak sekali persoalan yang
dengan baik. Aplikasi-aplikasi tersebut misalnya
diimplementasikan dengan graf. Bidang-bidang
menentukan lintasan terpendek (the Shortest
yang menggunakan penerapan graf antara lain
Path Problem), persoalan pedagang keliling
Switching network, Coding theory, Electrical
(travelling salesperson problem), persoalan
analysis, Operation research, Aljabar, Computer
tukang pos Cina (chinese postman problem),
science, dan Kimia.
pewarnaan graf (graph colouring), Pembuatan
system jalan raya satu arah (Making a Road
Graf merupakan model matematika yang sangat
System One-way), menentukan peringkat peserta
kompleks dan rumit, tapi bisa juga menjadi
sebuah turnamen (Rangking the Participants in a
tournament), dan masih banyak lagi. Di dalam pada peta, menentukan tata letak jalur
makalah ini penulis mencoba mengulas tentang transportasi, pengaturan jaringan komunikasi
salah satu aplikasi graph yaitu tentang persoalan atau jaringan internet dan masih banyak lagi.
menentukan lintasan terpendek. Selain peta, masih banyak hal lain dalam dunia
nyata yang merupakan representasi visual dari
Menurut teori Graf, persoalan lintasan terpendek graf.
adalah merupakan suatu persoalan untuk mencari
lintasan antara dua buah simpul pada graf
berbobot yang memiliki gabungan nilai jumlah
bobot pada sisi graf yang dilalui dengan jumlah
yang paling minimum. Persoalan lintasan
terpendek ini pun banyak sekali dijumpai di
kehidupan sehari-hari. Aplikasi yang paling
sering ditemui adalah pada bidang transportasi
dan komunikasi, seperti pada pencarian rute
Gambar 1 Graf yang merupakan yang
terbaik untuk menempuh dua kota atau untuk
menggambarkan peta beberapa negara
mengetahui dan menelusuri proses pengiriman
bagian di Amerika Serikat
paket data komunikasi dalam suatu jaringan
komunikasi agar dihasilkan suatu proses yang
paling cepat.
Secara matematis, graf didefinisikan sebagai
berikut [1] :
Solusi untuk persoalan lintasan terpendek ini
sering disebut juga pathing algorithm. Banyak
Graf G didefinisikan sebagai pasangan
sekali algortima yang dapat digunakan untuk
himpunan (V,E) yang dalam hal ini :
menyelesaikan persoalan ini seperti algoritma
djikstra (djikstra' algorithm) dan algoritma
V = himpunan tidak kosong dari simpul
bellman-Ford (bellman-Ford algorithm). Dalam
- simpul (vertices atau node):
menyelesaikan persoalan lintasan terpendek
{v1,v2,…,vn}
kedua algoritma tersebut memiliki beberapa
E = himpunan sisi (edges atau arcs)
kelebihan dan kekurangan yang akan dibahas
yang menghubungkan sepasang
lebih lanjut di dalam makalah ini.
simpul: {e1,e2,…,en}
Makalah ini bertujuan untuk membandingkan
atau dapat ditulis singkat notasi G = (V,E)
keunggulan dan kekurangan algoritma dijkstra
(dijkstra' algorithm) dan algoritma bellman-ford
2.1 Jenis-Jenis Graf
(bellman-ford algorithm) dalam menyelesaikan
persoalan menentukan lintasan terpendek. Berdasarkan ada tidaknya gelang atau sisi ganda
Sehingga dengan makalah ini diharapkan kita bisa pada suatu graf, maka secara umum graf dapat
mengambil kesimpulan algoritma mana yang lebih digolongkan menjadi dua jenis :
efisien untuk digunakan, algoritma dijkstra atau 1. Graf sederhana ( simple graph ).
algoritma bellman-ford. Graf yang tidak memiliki gelang
maupun sisi-ganda.
2. Dasar Teori 2. Graf tak-sederhana ( unsimple-graph ).
Teori graf merupakan pokok bahasan yang sudah Graf yang memiliki gelang maupun sisi-
tua usianya namun memiliki banyak terapan ganda. Ada dua macam graf tak-
dalam kehidupan sehari-hari sampai saat ini. sederhana, yaitu graf ganda (multigraph)
Graf digunakan untuk merepresentasikan objek- dan graf semu (pseudograph). Graf
objek diskrit dan hubungan antara objek-objek ganda adalah graf yang memiliki sisi
tersebut. Banyak persoalan pada dunia nyata ganda, sedangkan graf semu adalah graf
yang sebenarnya merupakan representasi visual yang memiliki gelang.
dari graf. Contoh salah satu representasi visual
dari graf adalah peta. Banyak hal yang dapat Berdasarkan jumlah simpul pada suatu graf,
digali dari representasi tersebut, diantaranya maka secara umum graf dapat digolongkan
adalah menentukan jalur terpendek dari satu menjadi dua jenis:
tempat ke tempat lain, menggambarkan 2 kota 1. Graf berhingga ( limited graph ).
yang bertetangga dengan warna yang berbeda 2. Graf tak-berhingga ( unlimited graph ).
1 1 1
e1 e4 e1 e4
e3 e3
e2 e2
2 3 2 3 2 e8
e6 e6 3
e5 e5
e7 e7
4 4 4
(a) (b) (c)
Gambar 2 Beberapa Graf a) graf sederhana b) graf ganda c) graf semu

Berdasarkan orientasi arah pada sisi, maka secara 1. Bertetangga ( Adjacent )


umum graf dapat digolongkan menjadi dua jenis: Dua bua simpul pada graf tak-berarah G
1. Graf berarah ( directed graph ). dikatakan bertetangga bila keduanya
Graf yang setiap sisinya diberikan terhubung langsung dengan sebuah sisi.
orientasi arah. Pada graf berarah, ( vj, vk ) Dengan kata lain, vj bertetangga dengan
dan ( vk , vj ) menyatakan dua busur yang vk jika (vj , vk ) adalah sebuah sisi pada
berbeda, dengan kata lain graf G.
( vj ,vk ) ≠ ( vk ,vj )
2. Bersisian ( Incident )
Untuk busur ( vj ,vk ), simpul vj disebut Untuk sembarang sisi e = (vj , vk ), sisi e
simpul asal ( initial vertex ) dan untuk dikatakan bersisian dengan simpul vj
simpul vk disebut simpul terminal dan simpul vk .
( terminal vertex ).
2. Graf tak-berarah ( undirected graph ). 3. Simpul Terpencil ( Isolated Vertex )
Graf yang sisinya tidak memiliki Simpul yang tidak mempunyai sisi yang
orientasi arah. Pada graf tek-berarah, bersisian dengannya. Atau, dapat juga
urutan pasangan simpul yang dinyatakan bahwa simpul terpencil
dihubungkan oleh sisi tidak adalah simpul yang tidak satupun
diperhatikan, dengan kata lain: bertetangga dengan simpul-simpul
( vj ,vk ) = ( vk ,vj ) lainnya.
1
1 1
5

2 3 2 3 3
2 4
Gambar 4 Simpul 5 simpul terpencil
4 4

(a) (b) 4. Graf Kosong ( Null atau Empty Graph )


Gambar 3 Graf berarah (directed graph) Graf yang himpunan sisinya merupakan
himpunan kosong, ditulis sebagai Nn,
yang dalam hal ini n adalah jumlah
2.2 Terminologi Dasar simpul.
Terdapat beberapa istilah penting yang berkaitan
dengan graf. Berikut ini didefinisikan beberapa
terminologi yang sering digunakan:
2 2
1 1 1
3 3
3
6 6
4 5 2 5 5
(a) Graf G1 (b) Sebuah upagraf (c) komplemen dari upagraf (b)

Gambar 5
8. Terhubung ( Connected )
5. Derajat ( Degree ) Graf tak-berarah G disebut graf
Derajat suatu simpul pada graf tak terhubung ( connected graph ) jika
berarah adalah jumlah sisi yang untuk setiap pasang simpul vi dan vj di
bersisian dengan simpul tersebut. dalam himpunan V terdapat lintasan
Pada graf berarah, derajat simpul v dari vi ke vj ( yang juga harus berarti ada
dinyatakan dengan din(v) dan dout(v), lintasan dari vi ke vj ). Jika tidak, maka
yang dalam hal ini: G disebut graf tak-terhubung.
din(v) = derajat masuk (in-degree) ( disconnected graph ).
= jumlah simpul yang masuk Graf berarah G dikatakan terhubung
ke simpul v jika graf tak-berarahnya terhubung
(graf tak-berarah dari G diperoleh
dout(v) = derajat masuk (in-degree) dengan menghilangkan arahnya ).
= jumlah simpul yang keluar
dari simpul v 9. Upagraf ( Subgraph )
dan Misalkan G = (V,E) adalah sebuah graf.
d(v) = din(v) + dout(v). G1 = (V1 , E1) adalah upagraf dari G jika
V1 C V dan E1 C E
Notasi: d(v) menyatakan derajat simpul.
10. Komplemen Upagraf
6. Lintasan ( Path ) Komplemen dari upagaraf G1 terhadap
Lintasan yang panjangnya n dari simpul graf G adalah graf G2 = (V2 , E2)
awal v0 ke simpul tujuan vn di dalam sedemikian sehingga E2 = E – E1 dan
graf G ialah barisan berselang-seling V2 adalah himpunan simpul yang
simpul-simpul dan sisi-sisi yang anggota - anggota E2 bersisian
berbentuk v0 , e1 , v1 , e2 , v2 ,…,vn-1 ,en ,vn dengannya.
sedemikian sehingga e1 = ( v0 , v1 ) ,
e2 = ( v1 , v2 ) , … , en = ( vn-1 , vn ) 11. Upagraf Merentang
adalah sisi-sisi dari graf G. (Spanning Subgraph )
Upagraf G1 = (V1 , E1) dari G = (V, E)
7. Siklus ( Cycle ) atau Sirkuit ( Circuit ) dikatakan upagraf merentang jika V1 =
Lintasan yang berawal dan berakhir V ( yaitu G1 mengandung semua simpul
pada simpul yang sama dari G ).
1
1

2 3 2 3
2
3
4 5 4 5
(a) (b)
4 Gambar 7 a) Graf G
Gambar 6 Sirkuit 1-2-3-1 b) Upagraf merentang dari G
12. Cut-set
Cut-set dari graf terhubung G adalah
himpunan sisi yang bila dibuang dari G
menyebabkan G tidak terhubung. Jadi,
cut-set selalu menghasilkan dua buah
komponen terhubung.
K5 K6
1 5 Gambar 10 contoh graf lengkap

4 6 2. Graf Lingkaran
Graf sederhana yang setiap simpulnya
berderajat dua. Graf lingkaran dengan n
(a) simpul dilambangkan dengan Cn.

1 5

4 6

Gambar 11 contoh graf lingkaran


2 3
(b)
3. Graf Teratur ( Regular Graphs )
Gambar 8 {(1,2),(1,5),(3,5),(3,4)} Graf yang setiap simpulnya mempunyai
adalah cut-set derajat yang sama. Apabila derajat
setiap simpunya adalah r, maka graf
tersebut disebut juga graf teratur derajat
13. Graf Berbobot ( Weighted Graph ) r.
Graf yang setiap sisinya diberi harga
(bobot).
a

10 12
8
e b
Gambar 12 contoh graf teratur
15 9
11
4. Graf Bipartit ( Bipartite Graph )
d 14 c Graf G yang himpunan simpulnya dapat
Gambar 9 contoh graf berbobot dipisah menjadi dua himpunan bagian
V1 dan V2, sedemikian sehingga setiap
3.2 Beberapa Graf Khusus sisi pada G menghubungkan sebuah
simpul di V1 ke sebuah simpul di V2.
Terdapat beberapa jenis graf sederhana khusus. Dapat juga dinyatakan sebagai
Berikut ini didefinisikan beberapa graf khusus G(V1,V2).
yang sering ditemui:

1. Graf Lengkap ( Complete Graph ) H1 H2 H3


Graf sederhana yang setiap simpulnya
mempunyai sisi ke semua simpul
lainnya. Graf lengkap dengan n buah
simpil dilambangkan dengan Kn. Setiap
G
simpul pada Kn berderajat n-1. Jumlah W E

sisi pada graf lengkap yang terdiri dari n Gambar 13 contoh graf bipartit
buah simpul adalah n(n - 1)/2.
5. Graf Isomorfik ( Isomorphic Graph ) 3. The Shortest Path Problem
Dua bua graf, G1 dan G2 dikatakan
Menurut teori Graf, persoalan lintasan terpendek
isomorfik jika terdapat korespondensi
(The Shortest Path Problem) adalah merupakan
satu-satu antara simpul-simpul
suatu persoalan untuk mencari lintasan antara
keduanya dan antara sisi-sisi keduanya
dua buah simpul pada graf berbobot yang
sedemikian sehingga jika sisi e bersisian
memiliki gabungan nilai jumlah bobot pada sisi
dengan simpul u dan v di G1 , maka sisi
graf yang dilalui dengan jumlah yang paling
e’ yang berkorespon di G2 juga harus
minimum atau dapat dinyatakan juga sebagai
bersisian dengan simpul u’ dan v’ di G2.
berikut :
3 d c diberikan sebuah graf berbobot ( dengan
himpunan simpul V, himpunan sisi E,
dan fungsi bobot bernilai bilangan riil
4 yang dapat ditulis dengan f : E → R ),
dan diberikan elamen v dari V ,
1 2 a b sehingga dapat dicari sebuah lintasan P
dari v ke setiap v’ dari V, sehingga
Gambar 14 dua buah graf yang
saling isomorfik

Syarat-syarat dua buah graf dapat


dikatakan graf isomorfik :
a. Mempunyai jumlah simpul yang adalah nilai minimal dari semua lintasan
sama. yang menghubungkan v ke v’.
b. Mempunyai jumlah sisi yang sama.
c. Mempunyai jumlah simpul yang Persoalan lintasan terpendek merupakan salah
sama berderajat tertentu. satu persoalan optimasi yang menggunakan graf
berbobot, dimana bobot pada setiap sisi graf
6. Graf Planar ( Planar Graph ) tersebut dapat kita gunakan untuk menyatakan
Graf G yang dapat digambarkan pada jarak antar kota, waktu pengiriman pesan,
bidang datar dengan sisi-sisi yang tidak ongkos pembangunan, dan sebagainya.
saling memotong (bersilangan).
Graf planar yang digambarkan dengan INPUT OUPUT
sisi-sisi yang tidak saling berpotongan
dinamakan graf bidang (plane graph).

Gambar 17 Shortest Path Problem


Gambar 15 dua graf yang saling planar
7. Pohon ( Tree ) 3.1 Aplikasi dari Shortest Path Problem
Graf tak-berarah terhubung yang tidak Ada beberapa macam persoalan lintasan
mengandung sirkuit. terpendek, antara lain [1] :
a b a b a. Lintasan terpendek anatara dua buah
simpul tertentu.
b. Lintasan terpendek antara semua
c d c d pasangan simpul.
c. Lintasan terpendek dari simpul tertentu
ke semua simpul yang lain.
e f e f

Gambar 16 dua buah pohon


d. Lintasan terpendek antara dua buah graf tersebut harus lah bernilai bilangan positif
simpul yang melalui beberapa simpul (bobot >=0).
tertentu.
Properti algoritma Dijkstra:
Aplikasi persoalan penentuan lintasan terpendek
ini banyak sekali kita jumpai dalam kehidupan 1. Matriks ketetanggaan M[mij]
sehari-hari:
a. Menentukan rute atau jalur terbaik yang mij = bobot sisi (i, j)
harus ditempuh dari suatu kota untuk (pada graf tak-berarah mij = mji )
menuju ke kota lain. mii = 0
b. Menentukan jalur komunikasi dua buah mij = ∞, jika tidak ada sisi dari simpul i ke
terminal komputer. simpul j
c. Menentukan jalur penerbangan dunia
yang paling efektif untuk dilakukan. 2. Larik S = [si] yang dalam hal ini,

si = 1, jika simpul i termasuk ke dalam


lintasan terpendek
si = 0, jika simpul i tidak termasuk ke
dalam lintasan terpendek

3. Larik/tabel D = [di] yang dalam hal ini,

di = panjang lintasan dari simpul awal s ke


simpul i

Algoritma Lintasan Terpendek Dijkstra :


(Mencari lintasan terpendek dari simpul a ke
semua simpul lain}

Gambar 18 aplikasi rute beberapa kota


Langkah 0 (inisialisasi):
- inisialisasi si = 0 dan di = mai untuk i =
3.2 Pathing Algorhitm 1, 2, ..., n
Pathing Algorithm adalah sebuah algoritma yang
digunakan untuk mencari suatu solusi dalam Langkah 1:
menentukan lintasan terpendek dari suatu graf. - isi sa dengan 1 (karena simpul a
Saat ini terdapat banyak sekali algoritma yang adalah simpul asal lintasan terpendek,
digunakan untuk menyelesaikan persoalan jadi sudah pasti terpilih)
lintasan terpendek diantaranya Algoritma - isi da dengan ∞ (tidak ada lintasan
Djikstra ( djikstra algorithm ) dan Algoritma terpendek dari simpul a ke a)
Bellman-Ford ( bellman-ford algorithm ).
Langkah 2, 3, ... , n-1:
3.2.1 Algoritma Dijkstra
Edsger Wybe Dijksrta, menemukan suatu - cari j sedemikian sehingga sj = 0 dan dj
algoritma untuk mencari lintasan terpendek pada = min{d1, d2, ..., dn}
suatu graf. Algoritma Dijksstra pada awalnya - isi sj dengan 1
diterapkan pada graf berarah, tetapi ternyata - perbarui di, untuk i = 1, 2, 3, …, n
algoritma ini juga benar untuk algoritma graf dengan:
tak-berarah. Algoritma ini menggunakan prinsip di (baru) = min{di (lama), dj + mji }.
greedy yang digunakan untuk menyatakan bahwa
pada setiap langkah kita memilih sisi yang 3.2.2 Algoritma Bellman-Ford
berbobot minimum dan memasukkannya ke
Algoritma Bellman-Ford menghitung jarak
dalam himpunan solusi. Akan tetapi bobot dari
terpendek (dari satu sumber) pada sebuah digraf
berbobot. Maksudnya dari satu sumber ialah
bahwa ia menghitung semua jarak terpendek yang mengacu ke arah simpul itu ( d[v]=∞ untuk
yang berawal dari satu titik node. Algoritma tiap-tiap v di dalam V, kecuali s). Ketika
Dijkstra dapat lebih cepat mencari hal yang sama algoritma berhenti, d[v] akan menyatakan nilai
dengan syarat tidak ada sisi (edge) yang berbobot lintasan yang paling pendek dari s sampai v atau
negatif. Maka Algoritma Bellman-Ford hanya bernilai takberhingga, jika lintasan tersebut tidak
digunakan jika ada sisi berbobot negatif. ada.

Algoritma Bellman-Ford menggunakan waktu Operasi dasar dari Algoritma Dijkstra adalah
sebesar O(V.E), di mana V dan E adalah relaksasi sisi: jika ada suatu sisi dari u ke v,
menyatakan banyaknya sisi dan titik. Dalam kemudian diketahui lintasan yang paling pendek
konteks ini, bobot ekivalen dengan jarak dalam dari s ke u (d[u]) dapat diperluas menjadi
sebuah sisi. lintasan dari s ke v dengan menambahkan sisi
(u,v) pada bagian akhir. Lintasan ini akan
4. Analisa mempunyai panjang d[u]+w(u,v). Jika nilai ini
adalah kurang dari d[v] yang sekarang, kita dapat
4.1 Analisa Algoritma Dijkstra menggantikan nilai d[v] yang sekarang dengan
Input algoritma ini adalah sebuah weighted nilai yang baru itu. Relaksasi sisi diterapkan
directed graph G dan sebuah source vertex s sampai semua nilai-nilai d[v] menggembalikan
dalam G. V adalah himpunan semua vertices nilai lintasan yang paling pendek dari s ke v.
dalam graph G. Setiap edge dari graph ini adalah Algoritma ini diorganisir sedemikian sehingga
pasangan vertices (u,v) yang melambangkan masing-masing sisi (u,v) direlaksasi hanya
hubungan dari vertex u ke vertex v. Himpunan sekali, ketikad[u] telah mencapai nilai akhir nya.
semua edge disebut E. Weights dari edges
dihitung dengan fungsi w: E → [0, ∞); jadi Ide relaksasi ini datang dari suatu analogi antara
w(u,v) adalah jarak non-negatif dari vertex u ke perkiraan lintasan yang paling pendek dan
vertex v. Cost dari sebuah edge dapat dianggap panjang suatu pegas seperti bentuk sekerup yang
sebagai jarak antara dua vertex, yaitu jumlah bukan dirancang untuk tekanan. Pada awalnya,
jarak semua edge dalam path tersebut. Untuk nilai lintasan yang paling pendek adalah suatu
sepasang vertex s dan t dalam V, algoritma ini optimasi, yang dianalogikan dengan pegas.
menghitung jarak terpendek dari s ke t. Ketika lintasan lebih pendek ditemukan, nilai
yang telah diperkirakan diturunkan, dan pegas
diperlonggar. Ketika lintasan yang paling pendek
1 function Dijkstra(G, w, s) ada dan telah ditemukan maka pegas
2 for each vertex v in V[G] diperlonggar ke nya panjang normalnya.
3 d[v] := infinity
4 previous[v] := undefined Algoritma memelihara dua himpunan simpul S
5 d[s] := 0 dan Q. Himpunan S berisi semua simpul yang
6 S := empty set telah kita ketahui bahwa nilai d[v] adalah sudah
7 Q := V[G] merupakan nilai lintasan terpendek dan
8 while Q is not an empty set himpunan Q berisi semua simpul lainnya. Pada
9 u := Extract_Min(Q) awalnya himpunan S kosong, dan pada setiap
10 S := S union {u} langkah satu simpul dipindahkan dari Q ke S.
11 for each edge(u,v) Simpul ini dipilih sebagai simpul dengan nilai
outgoing from u d[u] paling rendah. Ketika suatu simpul u
12 if d[u] + w(u,v) < d[v] dipindahkan ke S, algoritma ini merelaksasi
13 d[v] := d[u] + w(u,v) setiap sisi ( u,v).
14 previous[v] := u
Gambar 19 Pseudo-code Algoritma Dijkstra Kita dapat menyatakan lamanya waktu untuk
menjalankan Algoritma Dijkstra's pada suatu
Algoritma ini bekerja dengan cara menyimpan graf dengan E (himpunan sisi) dan V (himpunan
setiap simpul v, dengan d[v] menyatakan simpul) sebagai fungsi |E| dan |V| menggunakan
lintasan terpendek yang telah ditemukan antara s notasi Big-O.
dan v. Pada awalnya, nilai ini adalah 0 untuk
sumber simpul s (d[s]=0), dan ketidakterbatasan Implementasi yang paling sederhana dari
untuk semua simpul lain, yang menyatakan fakta Algoritma Dijkstra menyimpan simpul dari
bahwa kita tidak mengetahui lintasan manapun himpunan Q ke dalam suatu array atau list
berkait, dan operasi Extract-Min(Q) adalah suatu error "Graph mengandung
pencarian linier di seluruh simpul di Q. Dalam siklus berbobot total
hal ini, waktu untuk menjalankan adalah O(V2). negatif"

Untuk sparse graph, yaitu graf dengan sisi lebih Gambar 20 Pseudo-code Algoritma Bellman-
sedikit dibanding sisi V2, Algoritma Dijkstra Ford
dapat diterapkan secara lebih mangkus dengan
mengubah graf itu dalam wujud senarai Untuk kasus yang induktif, kita pertama
ketetanggaan dan penggunaan suatu tumpukan membuktikan bagian yang pertama.
biner atau tumpukan Fibonacci sebagai antrian Pertimbangkan waktu ketika suatu jarak simpul
prioritas untuk menerapkan fungsi Extract-Min. diperbaharui oleh v.distance:= u.distance +
Dengan suatu tumpukan biner, algoritma akan uv.weight. Dengan asumsi induktif, u.distance
memerlukan O((E+V)Logv) Waktu, dan adalah panjang lintasan dari sumber sampai u.
Fibonacci Tumpukan meningkatkannya menjadi Kemudian u.distance + uv.weight adalah panjang
O(E + Vlogv). lintasan dari sumber sampai v yang mengikuti
lintasan dari sumber hingga u dan kemudian
4.2 Analisa Algoritma Bellman-Ford dilanjutkan ke v.

// Definisi tipe data graf


Untuk bagian yang kedua , pertimbangkan
record titik { lintasan yang paling pendek dari sumber samapi
list sisi2 u dengan sisi i. Biarkan V menjadi simpul yang
real jarak ter]akhir sebelum u pada lintasan ini. Kemudian,
titik sebelum bagian dari lintasan dari sumber sampai v adalah
} lintasan yang paling pendek dari sumber sampai
record sisi { v dengan sisi i-1. Dengan asumsi induktif,
titik dari v.distance setelah i-1 siklus adalah pada panjang
titik ke
real bobot
terjauh lintasan ini. Oleh karena itu, uv.weight+
} v.distance adalah panjang lintasan paling jauh
dari s sampai u. Di dalam ith siklus, u.distance
function BellmanFord akan dibandingkan dengan uv.weight+
(list semuatitik, list v.distance, dan akan dibuat sama jika uv.weight+
semuasisi, titik dari) v.distance bernilai lebih kecil. Oleh karena itu,
setelah i berputar, u.distance adalah lintasan
// Persiapan
yang paling pendek dari sumber sampai u yang
for each titik v in semuatitik:
if v is dari then v.jarak = 0 menggunakan sisi i.
else v.jarak := tak-hingga
v.sebelum := null Ketika i setara dengan banyaknya simpul di
dalam graf, masing-masing lintasan akan
// Perulangan relaksasi sisi menjadi lintasan yang paling pendek secara
for i from 1 to size(semuatitik):
keseluruhan, kecuali jika ada siklus berbobot
for each sisi uv in
semuasisi: negatif. Jika suatu siklus berbobot negatif ada
u := uv.dari dan dapat diakses dari sumber, kemudian
v := uv.ke tersedia jalan manapun yang lebih pendek, maka
if v.jarak > u.jarak + tidak ada jalan yang paling pendek. Cara lainnya
uv.bobot adalah rute terpendek tidak akan meliputi siklus
v.jarak := u.jarak + manapun ( sebab mengelilingi suatu siklus akan
uv.bobot membuat perjalanan lebih pendek), maka
v.sebelum := u
masing-masing lintasan paling pendek
// Cari sirkuit berbobot negatif mengunjungi simpul masing-masing paling
for each sisi uv in semuasisi: banyak sekali, dan jumlah dari sisi nya kurang
u := uv.dari dari banyaknya simpul di dalam grafik itu.
v := uv.ke
if v.jarak > u.jarak +
uv.bobot
5. Kesimpulan dan Saran Pengembangan DAFTAR PUSTAKA
5.1 Kesimpulan
[1] Munir, Rinaldi. (2006). Diktat Kuliah IF2153
Persoalan menentukan lintasan terpendek adalah Matematika Diskrit Edisi Keempat.
salah satu bentuk aplikasi dari penggunaan teori Departemen Teknik Informatika, Institut
graf. Persoalan ini adalah merupakan suatu Teknologi Bandung
persoalan optimasi, sehingga semakin mangkus
algoritma penyelesaiannya maka akan semakin [2] Murty, U.S.R. & J.A. Bondy. (1982) . Graph
baik. theory with applications. North-Holland.
New York
Algoritma Dijkstra merupakan salah satu
algoritma yang digunakan untuk memecahkan [3] Dobson, Simon. (2006). Weighted graphs
permasalahan lintasan terpendek yang terdapat and shortest paths. UCD School of
pada suatu graf . Algoritma ini digunakan pada Computer Science and Informatics.Dublin
graf berbobot dengan syarat bobot dari masing-
masing sisi haruslah bernilai positif (>=0). [4] Wikipedia. (2007),
Shortest Path Problem,
Algoritma Bellman-Ford merupakan salah satu http://en.wikipedia.org/wiki/Shortest_path
algoritma yang digunakan untuk memecahkan _problem.htm, Tanggal Akses: 26
permasalahan lintasan terpendek yang terdapat Desember 2006 pukul 10.32
pada suatu graf. Algoritma ini digunakan pada
graf berbobot dengan bobot yang dapat bernilai [5] NUS.(2006),
positif maupun bernilai negatif. http://www.comp.nus.edu.sg/%7Estevenha
/programming/prog_graph2.html,
Meskipun pada algoritma Bellman-Ford dapat Tanggal Akses: 26 Desember 2006 10:43.
mengangani bobot bernilai negatif namun
algoritma Dijkstra lebih sering digunakan karena [6] Shortest Path.(1997),
membutuhkan waktu yang lebih sedikit daripada http://www2.toki.or.id/book/AlgDesignMa
algoritma Bellman-Ford, jadi persoalan dapat nual/BOOK/BOOK4/NODE161.HTM,
diselesaikan dengan lebih mangkus. Tanggal Akses: 26 Desember 2006 10:36

5.2 Saran Pengembangan


Apabila kita hendak mencari lintasan terpendek
dari suatu graf berbobot yang terdapat sisi yang
berbobot negatif kita dapat menggunakan
algoritma Bellman-Ford, sedangkan apabila kita
menemui suatu graf berbobot yang setiap sisinya
berbobot positif maka kita dapat menggunakan
algoritma Bellman-Ford atau algoritma dijkstra,
namun disarankan untuk menggunakan algoritma
dijksta karena algoritma tersebut bisa dikatakan
lebih mangkus.

Anda mungkin juga menyukai