• Tidak ada hasil yang ditemukan

2.3 Lintasan Terpendek(Shortest Path)

2.3.1 Algoritma Dijkstra

Algoritma Dijkstra dinamai menurut penemunya Edsger W. Dijkstra, adalah sebuah algoritma rakus (greedy algorithm) yang dipakai dalam memecahkan permasalahan lintasan terpendek (shortest path problem) untuk sebuah graf berarah (directed graph) dengan bobot-bobot sisi (edge weight) yang bernilai tak-negatif, namun hal ini juga berlaku pada graf tak berarah. Prinsip greedy pada algoritma dijsktra menyatakan bahwa pada setiap langkah dipilih sisi yang berbobot minimum dan memasukkannya dalam himpunan solusi.

Input algoritma ini adalah sebuah graf berarah yang berbobot (weighted directed graph) G dan sebuah titik sumber s dalam G, dengan V adalah himpunan semua titik

dalam graf G. Setiap sisi dari graf ini adalah pasangan titik (u,v) yang melambangkan hubungan dari titik u ke titik v. Himpunan semua sisi disebut E. Bobot (weight) dari semua sisi dihitung dengan :

, ∞

w(u,v) merupakan jarak tak-negatif dari titik u ke titik v. Bobot (weight) dari sebuah sisi dapat dianggap sebagai jarak antara dua titik, yaitu panjang sisi dari dua titik.

Untuk sepasang titik s dan t dalam V, algoritma ini menghitung jarak terpendek dari s ke t.

Purwanto (2008) menjelaskan bahwa algoritma Dijkstra merupakan algoritma Greedy yang mirip dengan algoritma Prim. Algoritma Dijkstra untuk menyelesaikan permasalahan lintasan terpendek dengan sumber tunggal (the single source shortest path problem) apabila bobot semua titik tidak negatif.

Rinaldi (2005) menjelaskan langkah-langkah algoritmanya adalah sebagai berikut :

Selain matriks M, digunakan juga tabel S = [si] yang dalam hal ini, si = 1, jika titik i termasuk ke dalam lintasan terpendek si = 0, jika titik i tidak termasuk ke dalam lintasan terpendek

dan tabel D = [di] yang dalam hal ini, di = panjang lintasan dari titik awal a ke titik i

Algoritma Dijkstra dinyatakan dalam notasi pseudo-code sebagai berikut : Input m : matriks, a : titik awal

(mencari lintasan terpendek dari titik awal a ke semua titik lainnya)

Masukan : matriks ketetanggan (m) dari graf berbobot G dan titik lainnya.

Keluaran : lintasan terpendek dari a ke semua titik lainnya.

Deklarasi :

Penjelasan langkah-langkah algoritma adalah sebagai berikut :

1. Siapkan matriks ketetanggaan M = [mij], tabel S = [si], tabel D = [di] dan tentukan titik mana yang akan dijadikan titik awal (misalkan titik a),

2. Menginput nilai 0 untuk setiap titik i dalam tabel S, yang artinya tidak ada satupun titik pada tahap awal telah masuk sebagai lintasan terpendek, dan nilai tak hingga pada tabel D, yang artinya belum ditemukan lintasan terpendek dari titik awal a ke titik lain,

3. Lalu beri bobot jarak dari titik awal (titik a) ke setiap titik i yang terhubung nya dibandingkan dengan nilai yang tersimpan sebelumnya di dalam tabel D, maka nilai tersebutlah yang akan menjadi nilai berikutnya yang disimpan (dalam hal ini, untuk langkah awal, nilai yang tersimpan sebelumnya sudah pasti lebih besar karena di poin 2, nilainya adalah tak hingga).

4. Berikan nilai 1 pada tabel S untuk sa, yang artinya titik a telah masuk dalam lintasan terpendek,

5. Memilih titik selanjutnya yang akan menggantikan peran yang sebelumnya telah digunakan oleh titik awal a, yang menjadi perhatian dalam pemilihan titik ini adalah nilai yang terkecil yang terdapat di dalam tabel D, namun memiliki nilai 0 pada tabel S.

6. Cukup dengan mengulangi poin 3 dan seterusnya.

Penjelasan metode algoritma Dijkstra dengan contoh graf berarah adalah sebagai berikut :

Gambar 2.10 Graf Berarah (directed weakly connected graph)

1. Misalkan akan diselesaikan sebuah graf dengan n titik dan m sisi, pada gambar 2.10 maka n bernilai 6 dan m bernilai 6, maka yang perlu dilakukan adalah menset titik awal sebagai titik sumber, dalam hal ini titik awal (titik sumber) adalah titik v1, dan menginput nilai 1 pada tabel S, yang artinya titik v1 telah termasuk dalam lintasan terpendek,

v3

Tabel 2.1 Titik yang Telah Dikunjungi (Tabel S) Titik v1 v2 v3 v4 v5 v6

Nilai 1 0 0 0 0 0

2. Setelah titik awal (titik sumber) disepakati, maka langkah selanjutnya adalah mengidentifikasi titik-titik yang adjacent dengan titik tersebut, informasi yang dibutuhkan dari tahap ini adalah panjang sisi (bobot sisi) dari titik sumber tersebut menuju titik-titik yang terhubung langsung dengannya, dalam hal ini dibutuhkan sebuah tabel dengan banyak baris 2 dan banyak kolom 6. Tabel ini berisikan nilai-nilai jarak terpendek menuju titik terkait, dengan nilai awal diset untuk titik sumber dan ∞ (tak hingga) untuk titik lain, ini untuk menandakan bahwa nilai jarak terpendek dari titik sumber menuju titik lain belum diketahui, atau bernilai sangat besar, yang mana ini menjadi keperluan praktis dalam algoritma Dijkstra, yang akan selalu mengambil nilai yang terkecil, misalnya dalam hal ini, tabelnya adalah sebagai berikut :

Tabel 2.2 Jarak Terpendek Menuju Sebuah Titik dari Titik Sumber (Tabel D) Titik v1 v2 v3 v4 v5 v6 Jarak terpendek 0 ∞ ∞ ∞ ∞ ∞

setelah melakukan tahap 2, didapatkan bahwa v1 adjacent dengan v2 dan v4

sehingga tabel tersebut menjadi :

Tabel 2.3 Memperbaharui Nilai Tabel D Titik v1 v2 v3 v4 v5 v6

Jarak terpendek 0 e1 ∞ e2 ∞ ∞

Perhatikan bahwa, nilai-nilai pada tabel di atas adalah nilai yang didapatkan setelah nilai sebelumnya yaitu ∞ dibandingkan dengan nilai penjumlahan panjang dari nilai sisi yang incident dengan titik tersebut dan jarak terpendek menuju titik terminal (titik tinjau), misalnya saja pada v4, nilai e2 merupakan perbandingan dari nilai ∞ dan nilai penjumlahan dari e2 (nilai sisi yang incident dengan v4) + 0 (nilai jarak terpendek menuju titik terminal v1),

e2 + 0 = e2,

e2 ≤ ∞ (terpilih e2)

pada tahap ini juga, dibutuhkan sebuah tabel lain, yang akan menyimpan nilai titik yang terdekat menuju ke titik yang bersangkutan, dalam hal ini titik v1 menjadi titik terdekat menuju titik v4, perlu diperhatikan, bahwa saat sebuah titik menjadi titik tinjau (titik terminal) maka titik tersebut telah diketahui lintasan terpendeknya, sehingga tabelnya adalah sebagai berikut :

Tabel 2.4 Titik Terdekat Menuju ke Sebuah Titik dalam Graf G Titik v1 v2 v3 v4 v5 v6

Titik terdekat v1 v1 - v1 - -

3. Pada tahap ini akan ditentukan titik tinjau berikutnya, maksudnya adalah, sebelumnya titik tinjau adalah titik awal (titik sumber), setelah semua informasi diperoleh dengan meninjau titik tersebut, maka persoalan yang melibatkan titik sumber telah selesai, sehingga pada langkah ini akan ditentukan titik tinjau baru. Adapun dalam menentukan titik tinjau adalah memperhatikan tabel 2.3 (tabel D), akan ditinjau nilai jarak terpendek yang terkecil, namun dengan melewatkan kolom yang nilai titiknya telah terdaftar (bernilai 1) di tabel 2.1 (tabel S). Dengan melewatkan nilai v1, maka yang akan dibandingkan adalah nilai e1 dan e2. Ambil nilai terkecil dari perbandingan nilai-nilai tersebut, jika didapatkan dua atau lebih nilai terkecil dengan nilai yang sama, maka pilihlah sembarang nilai yang akan ditinjau, hal itu tidak dipermasalahkan, selama nilai yang terambil adalah nilai yang terkecil dari perbandingan yang ada. Dalam contoh yang digunakan adalah variabel yang masih belum memiliki nilai eksak, atau nilai terbuka, namun dimisalkan saja e1 menjadi pilihan terbaik (jarak terpendek) yang akan ditinjau selanjutnya. Dengan pengambilan e1, maka akan ditentukan titik tinjau selanjutnya adalah titik yang incident dengan e1 yang telah terdaftar pada tabel D, yaitu v2.

4. Langkah selanjutnya, hanyalah melakukan perulangan langkah dari langkah 1 lagi, dengan titik tinjau saat ini adalah v2, usahakan lakukan dengan teliti dalam mengisi, memilih, dan membandingkan nilai-nilai yang terdapat pada tabel-tabel pembantu, begitu seterusnya hingga didapatkan ke titik tujuan akhir.

Dokumen terkait