Anda di halaman 1dari 6

Menangani Masalah Lintasan Terpendek

Menggunakan Algoritma Bellman-Ford


Fransiska Melathi Cahyaningtyas1, Intan Cahyaningtyas2
Program Studi Teknik Elektro,
1,2

Fakultas Teknik Elektronika dan Komputer,


Universitas Kristen Satya Wacana, Salatiga
1612015032@student.uksw.edu, 2612015008@student.uksw.edu

Ringkasan
Makalah ini membahas tentang studi dan implementasi algoritma Bellman-Ford dalam
menangani masalah lintasan terpendek (shortest path) pada suatu graf. Lintasan terpendek
merupakan salah satu dari masalah yang dapat diselesaikan dengan graf. Jika diberikan
sebuah graf berbobot, penanganan masalah lintasan terpendek adalah bagaimana kita
mencari sebuah jalur pada graf yang meminimalkan jumlah bobot pembentuk jalur tersebut.
Algoritma Bellman-Ford memiliki spesifikasi penyelesaian masalah, kompleksitas waktu
algoritma, serta jenis masalah, kelemahannya, dan kelebihannya sendiri.

Kata kunci: Algoritma Bellman-Ford, jalur terpendek (shortest path), kompleksitas waktu
algoritma (running time).

1. Pendahuluan
Graf adalah kumpulan dari titik (node) dan garis dimana pasangan-pasangan titik (node)
tersebut dihubungkan oleh segmen garis. Node ini biasa disebut simpul (verteks) dan
segmen garis disebut ruas/sisi (edge).
Simpul dan ruas dalam graf dapat diperluas dengan penambahan informasi. Sebagai
contoh, simpul bisa diberi nomor atau label dan ruas dapat diberi nilai juga. Perluasan
dengan pemberian informasi ini sangat berguna dalam penggunaan graf untuk banyak
aplikasi komputer. Contoh, graf dengan kota sebagai simpul (vertex/node) dan jalan yang
menghubungkan setiap kotanya sebagai sisi (edge) dan bobotnya (weight)
merepresentasikan jarak yang ditempuh diantara kota-kota tersebut (atau biaya yang
dikeluarkan dalam perjalanan tersebut). Dalam beberapa model persoalan dimungkinkan
bahwa bobot dari suatu ruas/sisi bernilai negatif. Misalkan simpul merepesentasikan
bandara, sisi mereprentasikan penerbangan yang memungkinkan, dan bobot dari setiap
sisi adalah biaya yang dikeluarkan dalam penerbangan tersebut. Untuk suatu kasus
dimana seseorang akan dibayar untuk menempuh rute tertentu oleh suatu biro
penerbangan, maka bobotnya akan bernilai negatif.
Dalam kehidupan sehari-hari maupun dalam bidang akademis banyak persoalan yang
dimodelkan dengan graf. Graf dipakai untuk membantu pemecahan masalah. Dari model
graf yang dibuat, suatu masalah dapat dipahami menjadi lebih mudah. Untuk kemudian
diturunkan metode pemecahannya.
Lintasan terpendek merupakan salah satu dari masalah yang dapat diselesaikan
dengan graf. Jika diberikan sebuah graf berbobot, masalah lintasan terpendek adalah

1
Menangani Masalah Lintasan Terpendek Menggunakan Algoritma Bellman-Ford
Agustus 2016

bagaimana kita mencari sebuah jalur pada graf yang meminimalkan jumlah bobot sisi
pembentuk jalur tersebut.

2. Algoritma Bellman-Ford
Algoritma Bellman-Ford menghitung jarak terpendek (dari satu sumber) pada sebuah
graf berbobot. Maksudnya dari satu sumber ialah bahwa ia menghitung semua jarak
terpendek yang berawal dari satu titik (node). Algoritma Dijkstra dapat lebih cepat mencari
hal yang sama dengan syarat tidak ada sisi (edge) yang berbobot negatif. Maka algoritma
Bellman-Ford hanya digunakan jika ada sisi berbobot negatif. Munculnya algoritma ini
cukup membantu jika bobot dari suatu graf bernilai negatif.

2.1. Penjelasan Langkah Algoritma


Anggap Г = (V,A) adalah graf berarah dan ℓ : A R adalah fungsi jarak pada sisi Г.
Ibaratkan kita mencari jarak terpendek, w.r.t.ℓ, path langsung dari vєV ke semua verteks Г.
Kita definisikan dk(u) menjadi panjang minimal dari seluruh k-sisi dari v ke uєV.
Tentunya, do(v)=0 (karena graf tidak boleh memiliki siklus negatif) dan do(v)=∞
untuk semua v≠uєV.
Kemudian dengan menggunakan induksi, dk(u) = min(dk-1(u), ℓ(w,u): (w,u) є A). Hal
ini baik, tapi apakah k dapat tumbuh tiba-tiba? Jika kita mengunjungi verteks lebih dari
sekali, ini berarti graf mengandung siklik, kecuali bila siklik tersebut mengandung bobot
negatif, kita dapat menghilangkannya, dan tidak menambah panjang jalan. Jadi, tanpa
kehilangan secara umumnya, sebuah jalan terpendek ke u memiliki hampir semua verteks
|V|, dan juga dn(u) adalah jarak dari v ke u. Maka pada hampir semua O(|V|·|E|) operasi, kita
akan menemukan jarak dari v ke setiap verteks dari Г.

2.2. Langkah Algoritma


Algoritma ini, seperti Algoritma Dijkstra menggunakan tepi relaksasi tetapi tidak
memakai metode greedy. Bahkan, algoritma ini menggunakan d[u] sebagai batas atas pada
jarak d[u,v] dari u ke v. Algortima ini secara berkala mengurangi perkiraan d[v] pada
bobot dari jalan terpendek dari sumber verteks s ke tiap verteks v pada V hingga
memperoleh jalan terpendek. Berikut ini penulis melampirkan langkah-langkah
penyusunan algoritmanya yang akan mengembalikan nilai TRUE jika pada graf tidak
terdapat siklus yang negatif dan akan mengembalikan nilai FALSE jika sebaliknya.

BELLMAN-FORD (G, w, s)
1. INITIALIZE-SINGLE-SOURCE (G, s)
2. for each vertex i = 1 to V[G] - 1 do
3. for each edge (u, v) in E[G] do
4. RELAX (u, v, w)
5. For each edge (u, v) in E[G] do
6. if d[u] + w(u, v) < d[v] then
7. return FALSE
8. return TRUE

2
Menangani Masalah Lintasan Terpendek Menggunakan Algoritma Bellman-Ford
Fransiska Melathi Cahyaningtyas

Inisialisasi pada line 1 memerlukan waktu O(V). Untuk loop dari line 2-4 memerlukan
waktu O(E) dan untuk line 5-7 memerlukan waktu O(E) pula. Jadi, algoritma Bellman-Ford
berjalan dalam kompleksitas waktu O(E).

2.3. Pseudocode Algoritma Bellman-Ford

Gambar 1. Pseudocode menurut Wikipedia

Untuk kasus yang induktif, pertama-tama kita membuktikan bagian yang pertama.
Pertimbangkan waktu ketika suatu jarak simpul diperbaharui oleh v.distance: = u.distance +
uv.weight. Dengan asumsi induktif, u.distance adalah panjang lintasan dari sumber sampai
u. Kemudian u.distance + uv.weight adalah panjang lintasan dari sumber sampai v yang
mengikuti lintasan dari sumber hingga u dan kemudian dilanjutkan ke v.
Untuk bagian yang kedua, pertimbangkan lintasan yang paling pendek dari sumber
sampai u dengan sisi i. Biarkan V menjadi simpul yang terakhir sebelum u pada lintasan
ini. Kemudian, bagian dari lintasan dari sumber sampai v adalah lintasan yang paling
pendek dari sumber sampai v dengan sisi i-1. Dengan asumsi induktif, v.distance setelah i-1
siklus adalah pada panjang 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 akan
dibandingkan dengan uv.weight + v.distance, dan akan dibuat sama jika uv.weight +
v.distance bernilai lebih kecil. Oleh karena itu, setelah i berputar, u.distance adalah lintasan
yang paling pendek dari sumber sampai u yang menggunakan sisi i.
Ketika i setara dengan banyaknya simpul di dalam graf, masing-masing lintasan akan
menjadi lintasan yang paling pendek secara keseluruhan, kecuali jika ada siklus berbobot
negatif. Jika suatu siklus berbobot negatif ada dan dapat diakses dari sumber, kemudian
tersedia jalan manapun yang lebih pendek, maka tidak ada jalan yang paling pendek. Cara
lainnya adalah rute terpendek tidak akan meliputi siklus manapun (sebab mengelilingi
suatu siklus akan membuat perjalanan lebih pendek), maka masing-masing lintasan paling
pendek mengunjungi simpul masing-masing paling tidak sekali, dan jumlah dari sisinya
lebih sedikit dari banyaknya simpul di dalam graf itu.

3
Menangani Masalah Lintasan Terpendek Menggunakan Algoritma Bellman-Ford
Agustus 2016

Skema Pencarian Lintasan Terpendek dengan Algoritma Bellman-Ford :

Gambar 2. Contoh graf berbobot negatif

Gambar 3. Penyelesaian Algoritma Bellman-Ford tahap pertama

Gambar 4. Penyelesaian Algoritma Bellman-Ford tahap kedua

Gambar 5. Penyelesaian Algoritma Bellman-Ford tahap ketiga

4
Menangani Masalah Lintasan Terpendek Menggunakan Algoritma Bellman-Ford
Fransiska Melathi Cahyaningtyas

Gambar 6. Penyelesaian Algoritma Bellman-Ford tahap keempat

Gambar 7. Penyelesaian Algoritma Bellman-Ford tahap kelima

Gambar 8. Lintasan terpendek untuk penyelesaian Algoritma Bellman-Ford pada graf gambar 2 sebesar -1

2.4. Kompleksitas waktu algoritma (Running time)


Algoritma Bellman-Ford menggunakan waktu sebesar O(V.E), dimana V adalah
banyaknya sisi (vertex) dan E adalah banyaknya titik (edge).

Inisialisasi: O(V)

Loop utama: O(V.E)

Pengecekan loop negatif: O(E)

Total: O(V.E)

3. Kesimpulan
Algoritma Bellman-Ford 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

5
Menangani Masalah Lintasan Terpendek Menggunakan Algoritma Bellman-Ford
Agustus 2016

bernilai negatif. Algoritma Bellman-Ford sangat tepat untuk menangani masalah Single-
source Shortest Path.
Meskipun pada algoritma Bellman-Ford dapat mengangani bobot bernilai negatif
namun algoritma Dijkstra lebih sering digunakan karena membutuhkan waktu yang lebih
sedikit daripada algoritma Bellman-Ford, jadi persoalan dapat diselesaikan dengan lebih
ringkas.

Daftar Pustaka
[1] WORDPRESS, Graph dan Analisis Algoritma [Online],
http://proxymous.wordpress.com/2010/08/03/graph-dan-analisis-
algoritma/, diakses tanggal 7 Agustus 2016.
[2] BLOGSPOT, Belajar Routing Internet: Algoritma Bellman-Ford [Online],
http://belajar-routing.blogspot.co.id/2011/05/algoritma-bellman-
ford.html, diakses tanggal 7 Agustus 2016.
[3] WIKIPEDIA, Bellman-Ford algorithm [Online],
http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm,
diakses tanggal 2 Agustus 2016.
[4] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein,
“Introduction to Algorithms,” The MIT Press, Third Edition, h. 651-654, 2009.

Anda mungkin juga menyukai