Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

dokumen-dokumen yang mirip
Studi Algoritma Optimasi dalam Graf Berbobot

Aplikasi Algoritma Dijkstra dalam Pencarian Lintasan Terpendek Graf

Penggunaan Algoritma Dijkstra dalam Penentuan Lintasan Terpendek Graf

Algoritma Greedy (lanjutan)

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Algoritma Greedy (lanjutan)

Implementasi Graf dalam Penentuan Rute Terpendek pada Moving Object

ALGORITMA MENCARI LINTASAN TERPENDEK

Perbandingan Algoritma Dijkstra dan Algoritma Floyd-Warshall dalam Penentuan Lintasan Terpendek (Single Pair Shortest Path)

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Penerapan Algoritma Djikstra untuk Pemilihan Rute Jalan Terpendek pada Permainan Harvest Moon: Back to Nature

METODE BRANCH AND BOUND UNTUK MENEMUKAN SHORTEST PATH

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

Algoritma Greedy (Bagian 2) IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

BAB 2 LANDASAN TEORI

Penerapan Algoritma Greedy untuk Memecahkan Masalah Pohon Merentang Minimum

Pembahasan Pencarian Lintasan Terpendek Menggunakan Algoritma Dijkstra dan A*

Aplikasi Algoritma Greedy pada Optimasi Pelaksanaan Misi dalam Permainan Assassins Creed : Revelations

Design and Analysis Algorithm

Pengaplikasian Graf dan Algoritma Dijkstra dalam Masalah Penentuan Pengemudi Ojek Daring

Penerapan Teori Graf Pada Algoritma Routing

Permodelan Pohon Merentang Minimum Dengan Menggunakan Algoritma Prim dan Algoritma Kruskal

Pencarian Jalur Terpendek dengan Menggunakan Graf dan Greedy dalam Kehidupan Sehari-hari

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Aplikasi Graf dalam Rute Pengiriman Barang

LINTASAN TERPENDEK DALAM GLOBAL POSITIONING SYSTEM

Penerapan Pohon dengan Algoritma Branch and Bound dalam Menyelesaikan N-Queen Problem

Pemanfaatan Algoritma BFS pada Graf Tak Berbobot untuk Mencari Jalur Terpendek

PENERAPAN ALGORITMA GREEDY UNTUK PENENTUAN JALUR DISTRIBUSI BANTUAN PASCA BENCANA ALAM

STUDI DAN IMPLEMENTASI ALGORITMA DIJKSTRA, BELLMAN-FORD DAN FLOYD-WARSHALL DALAM MENANGANI MASALAH LINTASAN TERPENDEK DALAM GRAF

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

ALGORITMA BELLMAN-FORD DALAM DISTANCE VECTOR ROUTING PROTOCOL

Pencarian Jalur Terpendek dengan Algoritma Dijkstra

Aplikasi Shortest Path dengan Menggunakan Graf dalam Kehidupan Sehari-hari

Algoritma Branch & Bound untuk Optimasi Pengiriman Surat antar Himpunan di ITB

Pengaplikasian Graf dalam Menentukan Rute Angkutan Kota Tercepat

PENGAPLIKASIAN GRAF DALAM KEHIDUPAN SEHARI-HARI

Penggunaan Algoritma Greedy dalam Membangun Pohon Merentang Minimum

Aplikasi Teori Graf dalam Pencarian Jalan Tol Paling Efisien

Pemodelan Sistem Lalu Lintas dengan Graf Ganda Berarah Berbobot

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Penerapan Algoritma Greedy dan Algoritma BFS untuk AI pada Permainan Greedy Spiders

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Penghematan BBM pada Bisnis Antar-Jemput dengan Algoritma Branch and Bound

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

Aplikasi Graf pada Penentuan Jadwal dan Jalur Penerbangan

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Optimisasi Penjadwalan Proses Pada Central Processing Unit Dengan Menggunakan Algoritma Greedy

Aplikasi Branch and Bound Pada Pencarian Jalan Pada Software Navigasi

Analisis Penerapan Algoritma Kruskal dalam Pembuatan Jaringan Distribusi Listrik

Penerapan Algoritma Branch and Bound untuk Optimasi Rute Penempelan Poster di Papan Mading ITB

BAB II LANDASAN TEORI

MEMBANDINGKAN KEMANGKUSAN ALGORITMA PRIM DAN ALGORITMA KRUSKAL DALAM PEMECAHAN MASALAH POHON MERENTANG MINIMUM

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

NASKAH UJIAN UTAMA. JENJANG/PROG. STUDI : DIPLOMA TIGA / MANAJEMEN INFORMATIKA HARI / TANGGAL : Kamis / 18 FEBRUARI 2016

PENGGUNAAN ALGORITMA GREEDY PADA MESIN PENCARI

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

Penerapan Algoritma Branch and Bound pada Penentuan Staffing Organisasi dan Kepanitiaan

Pemanfaatan Algoritma Sequential Search dalam Pewarnaan Graf untuk Alokasi Memori Komputer

Algoritma Brute-Force dan Greedy dalam Pemrosesan Graf

ANALISIS ALGORITMA PEMBANGUN POHON EKSPRESI DARI NOTASI PREFIKS DAN POSTFIKS

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

BAB 2 LANDASAN TEORI

BAB 1 PENDAHULUAN. 1.1 Latar Belakang

Penerapan Graf dalam Optimasi Jalur Penerbangan Komersial dengan Floyd-Warshall Algorithm

Aplikasi Teori Graf dalam Manajemen Sistem Basis Data Tersebar

Aplikasi Algoritma Greedy yang Dimodifikasi dalam Pencarian Lintasan Terpendek

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

Penerapan Algoritma Backtracking pada Pewarnaan Graf

BAB 2 LANDASAN TEORI

Penerapan Algoritma A* dalam Penentuan Lintasan Terpendek

BAB IV ANALISIS PEMILIHAN ALGORITMA LINTASAN TERPENDEK DAN PENYELESAIAN KASUS RUTE PENERBANGAN DOMESTIK

Penggunaan Metode Branch And Bound With Search Tree

Implementasi Algoritma Greedy pada Permainan Ludo

UNIVERSITAS GUNADARMA

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

Pengaplikasian Algoritma Dijkstra Dalam Pembuatan Agenda Penerbangan

BAB III ANALISIS DAN DESAIN SISTEM

Penerapan Algoritma Greedy dalam Optimasi Keuntungan Perusahaan Pengiriman Barang

Menentukan Titik Evakuasi Selanjutnya bagi Sekelompok Regu Tim SAR dengan Algoritma Branch and Bound

Algorima Greedy Pada Self Serve Gas Station

VARIASI PENGGUNAAN FUNGSI HEURISTIK DALAM PENGAPLIKASIAN ALGORITMA A*

Penentuan Keputusan dalam Permainan Gomoku dengan Program Dinamis dan Algoritma Greedy

Penerapan Search Tree pada Penyelesaian Masalah Penentuan Jalur Kota Terpendek.

PENCARIAN JALUR TERPENDEK ANTAR KOTA DI JAWA TENGAH DAN D.I. YOGYAKARTA DENGAN ALGORITMA DIJKSTRA VIA SMS GATEWAY

Penerapan Algoritma Greedy untuk Permainan Halma

Program Dinamis (Dynamic Programming)

Algoritma Bellman-Ford dalam Distance Vector Routing Protocol

Aplikasi Pohon dan Graf dalam Kaderisasi

Penentuan Lokasi Pemasaran Produk dengan Media Periklanan Menggunakan Algoritma Greedy

Penerapan Algoritma Brute force dan Greedy pada Penjadwalan Disk

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Branch and Bound untuk Rute Terpendek Tur Pengenalan Labtek V Gedung Benny Subianto Chita Najmi Nabila /

Elvira Firdausi Nuzula, Purwanto, dan Lucky Tri Oktoviana Universitas Negeri Malang

BAB 2 LANDASAN TEORI

BAB 2 LANDASAN TEORI

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

Penerapan Algoritma Greedy dalam Penyetokan Barang

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Transkripsi:

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra Adriansyah Ekaputra 13503021 Program Studi Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung Abstraksi Makalah ini membahas tentang aplikasi graf pada persoalan shortest path atau lintasan terpendek. Persoalan lintasan terpendek yaitu menemukan lintasan terpendek antara dua atau beberapa simpul lebih yang berhubungan. Persoalan mencari lintasan terpendek di dalam graf merupakan salah satu persoalan optimasi. Persoalan ini biasanya direpresentasikan dalam bentuk graf. Graf yang digunakan dalam pencarian lintasan terpendek atau shortest path adalah graf berbobot (weighted graph), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat menyatakan jarak antar kota, waktu pengiriman pesan, ongkos pembangunan, dan sebagainya. Algoritma yang dipakai pada persoalan lintasan terpendek ada beberapa yaitu Algoritma Dijkstra, algoritma A*, algoritma Floyd-Warshal, dan beberapa algortima lainnya. Akan tetapi, algoritma yang paling populer digunakan yaitu algoritma Dijkstra. 1. Pendahuluan Persoalan lintasan terpendek yaitu menemukan lintasan terpendek antara dua atau beberapa simpul lebih yang berhubungan. Persoalan mencari lintasan terpendek di dalam graf merupakan salah satu persoalan optimasi. Persoalan ini biasanya direpresentasikan dalam bentuk graf. Graf yang digunakan dalam pencarian lintasan terpendek atau shortest path adalah graf berbobot (weighted graph), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat menyatakan jarak antar kota, waktu pengiriman pesan, ongkos pembangunan, dan sebagainya. Graf yang digunakan dalam pencarian lintasan terpendek adalah graf berbobot (weighted graph), yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Bobot pada sisi graf dapat menyatakan jarak antar kota, waktu pengiriman pesan, ongkos pembangunan, dan sebagainya. Asumsi yang kita gunakan di sini adalah bahwa semua bobot bernilai positif. Kata terpendek jangan selalu diartikan secara fisik sebagai panjang minimum, sebab kata terpendek berbeda-beda makanya bergantung pada tipikal perasoalan yang akan diselesaikan. Namun, secara umum terpendek berarti meminimalisasi bobot pada suatu lintasan di dalam graf. Contoh-contoh terapan pencarian lintasan terpendek misalnya: 1. Misalkan simpul pada graf dapat merupakan kota, sedangkan sisi menyatakan jalan yang menghubungkan dua buah kota. Bobot sisi graf dapat menyatakan jarak antara dua buah kota atau rata-rata waktu tempuh antara dua buah kota. Apabila terdapat lebih dari satu lintasan dari kota A ke kota B, maka persoalan lintasan terpendek di sini adalah menentukan jarak terpendek atau waktu tersingkat dari kota A ke kota B. 2. Misalkan simpul pada graf dapat merupakan terminal komputer atau simpul komunikasi dalam suatu jaringan, sedangkan sisi menyatakan saluran komunikasi yang menghubungkan dua buah terminal. Bobot pada graf dapat menyatakan biaya pemakaian saluran komunikasi antara dua buah terminal, jarak antara dua buah terminal, atau waktu pengiriman pesan (message) antara dua buah terminal. Persoalan lintasan terpendek di sini adalah menentukan jalur komunikasi terpenek antara dua buah terminal komputer. Lintasan

terpendek akan menghemat waktu pengiriman pesan dan biaya komunikasi. Ada beberapa macam persoalan lintasan terpendek, antara lain: a. Lintasan terpendek antara dua buah simpul tertentu (a pair shortest path). b. Lintasan terpendek antara semua pasangan simpul (all pairs shortest path). c. Lintasan terpendek dari simpul tertentu ke semua simpul yang lain (singlesource shortest path). d. Lintasan terpendekan antara dua buah simpul yang melalui beberapa simpul tertentu (intermediate shortest path). 2. Contoh-contoh Algoritma Persoalan Lintasan Terpendek Algoritma yang dipakai pada persoalan lintasan terpendek ada beberapa yaitu Algoritma Dijkstra, algoritma A*, algoritma Floyd-Warshal, dan beberapa algortima lainnya. Akan tetapi, algoritma yang paling populer digunakan yaitu algoritma Dijkstra. 2.1 Persoalan Lintasan Terpendek dengan Algoritma Greedy Persoalan yang diambil di sini yaitu singlesource shortest path atau lintasan terpendek dari simpul tertentu ke semua simpul yang lain lintasan dibentuk satu per satu. Lintasan berikutnya yang dibentuk ialah lintasan yang meminimumkan jumlah jaraknya. Algoritma greedy untuk mencari lintasan terpendek dirumuskan sebagai berikut: 1. Periksa semua sisi yang langsung bersisian (incident) dengan simpul a. Pilih sisi yang bobotnya terkecil. Sisi ini menjadi lintasan terpendek pertama. Sebut lintasan itu L 1. 2. Tentukan lintasan terpendek kedua dengan cara berikut: (i) hitung: d 1 = Panjang (L 1 ) + bobot sisi dari simpul akhir L 1 ke simpul i yang lain (simpul i yang lain adalah simpul i yang belum termasuk di dalam L 1 ) (ii) pilih d 1 yang terkecil bandingkan d 1 dengan bobot sisi (a, i). Jika bobot (a, i) lebih kecil daripada d 1, maka lintasan terpendek kedua adalah L 2 = (a, i), jika tidak, maka L 2 = L 1 u (sisi dari simpul akhir L 1 ke simpul i) 3. Dengan cara yang sama, ulangi langkah 2 untuk menentukan lintasan terpendek berikutnya. Contoh: Tinjau sebuah graf berarah di bawah ini. Bobot pada setiap sisi dapat menyatakan jarak, ongkos, waktu, dan sebagainya. 45 Persoalan: diberikan graf berbobot G(V, E). Tentukan lintasan terpendek dari sebuah simpul asal, a, ke setiap simpul lainnya di G. Asumsi yang kita buat adalah bahwa semua sisi berbobot positif. 1 50 2 10 40 15 35 20 10 20 30 5 Strategi greedy untuk mencari lintasan terpendek adalah sebagai berikut: Karena kita harus meminimumkan panjang lintasan, maka sebagai ukuran optimasi dapat digunakan total jarak pada lintasan yang baru dibentuk. Dalam hal ini, 3 15 4 3 6

Lintasan terpendek dari simpul 1 ke semua simpul lain yang diberikan pada tabel di bawah ini dihasilkan dengan mengunakan strategi greedy di atas: Simpul asal Simpul tujuantujuan Lintasan terpendek Jarak 1 3 1 3 10 1 4 1 3 4 25 1 2 1 3 4 2 45 1 5 1 5 45 1 6 tidak ada - 2.1.1 Algoritma Dijkstra Sampai saat ini, sudah banyak algoritma mencari lintasan terpendek yang pernah ditulis orang. Algoritma lintasan terpendek yang paling terkenal adalah algoritma Dijkstra (sesuai dengan nama penemunya, Edsger Wybe Dijkstra). Dari naskah aslitnya, algoritma Dijkstra diterapkan untuk mencari lintasan terpednek pada graf berarah. Namun, algoritma ini tetap benar untuk graf tak-berarah. Edsger Wybe Dijkstra adalah seorang ilmuwan komputer dan ahli matematika Jerman yang telah memberikan banyak kontribusi pada ilmu komputer. Di antara banyak algoritma yang telah ia temukan, algoritma lintasan terpendek yang dijelaskan di sini merupakan yang terbaik yang pernah diketahui. Analisis dasar di balik algoritma tersebut adalah sebagai berikut: Seperti BFS, algoritma ini secara bertahap membentuk sebuah pohon dari simpulsimpul dan beberapa sisi dalam graf. Akar dari pohon ini adalah source dari pencarian, simpul s, seperti yang telah ditentukan pada awal algoritma. Maka untuk setiap simpul u, dipertahankan sebuah parent pointer p[u] dan sebuah distance field d[u] (jaraknya diukur dari source) Seperti BFS, algoritma ini mempertahankan sebuah queue di mana simpul yang belum diperiksa disimpan. Akan tetapi, ini adalah queue yang diprioritaskan, bukan queue first-in-first-out yang sederhana. Queue yang diprioritaskan ini diurutkan menggunakan field d[] dari simpulsimpulnya (yang akan berubah selama masa eksekusi). Tidak seperti BFS, algoritma Dijkstra mempertahankan sebuah set solusi S yang memuat semua simpul yang telah diperiksa, yang jarak minimum terhadap sourcenya sudah ditentukan. Set ini berkembang bersamaan dengan algoritma yang terus bekerja dan memeriksa lebih banyak simpul. Di awalnya, semua parent pointer diatur menjadi NIL dan semua distance fields menjadi tak hingga, kecuali yang dimiliki source, yang diset menjadi nol. Set solusi pun diatur menjadi kosong. Ini berarti kita tidak mengakumulasi informasi tentang simpul-simpul tersebut. Di sisi lain, queue yang diprioritaskan diisi oleh setiap simpul dalam graf sejak tidak satu pun telah diperiksa. Akan tetapi, sejak semua field d[] adalah tak hingga, mereka tidak akan tersusun dengan urutan tertentu, kecuali sourcenya, yang akan memiliki urutan pertama untuk diekstrak. Setiap simpul dalam queue yang diprioritaskan diekstrak dalam sebuah urutan (berdasarkan field d[] dari simpul-simpul). Simpul yang telah diekstrak, simpul u, ditambahkan ke set solusi as is. Untuk setiap simpul tetangga v dari simpul baru ini, field d[] dicoba diketatkan, untuk membuat perkiraan lebih baik dari yang telah ada. Ini dilakukan dengan cara mengambil perkiraan yang telah ada, dan membandingkannya dengan jumlah dari jarak u dari akar (d[u] dan beban dari sisi antara u dan v (w[u, v])). Apabila jumlahnya kurang dari perkiraan yang telah ada, maka perkiraan yang telah ada diganti oleh jumlah tersebut. Proses ini disebut relaxing sisi yang menghubungkan dua simpul.

Hasilnya adalah pada waktu apapun saat eksekusi, field d[] dari simpul-simpul dalam set solusi terkunci secara permanen dan mewakilkan panjang lintasan terpendek dari simpul tersebut pada source. Unutk simpul yang berada di luar set solusi (kecuali yang diset menjadi tak hingga, berada di tempat paling bawah dari queue yang diprioritaskan), field d[] adalah worst-case guess, sebuah panjang lintasan yang telah diketahui dapat dicapai, dengan mengikuti sisi-sisi yang mengarah pada salah satu dari tetangganya dalam set solusi. Mungkin ada lintasan lebih pendek yang tidak mengarah secara langsung pada set solusi, yang dalam hal ini dapat ditemukan pada beberapa saat lain saat semua node yang lain yang berada pada lintasan yang lebih baik tersebut telah dikerjakan. Apabila jarak v benar berubah, maka diperlukan pengaturan posisinya dalam queue yang diprioritaskan dengan bubbling up, pada dasarnya mekanisme yang sama yang digunakan dalam memasukkan item pada queue yang diprioritaskan. Teknik dalam pemasangan balls & strings mungkin digunakan untuk mengatur ulang tumpukan setelah setiap event. Set solusi dapat digambarkan sebagai sebuah kepulauan yang terus berkembang, secara bertahap menyerap lebih banyak simpul yang mengambang di sekitarnya. Pada setiap iterasi dari loopnya, harus dibuat sebuah jembatan dari pulau-pulau ke salah satu simpul yang ada. Aturan yang digunakan dalam memilih simpul yang dihubungkan pada jembatan ini berdasarkan sebuah sistem dalam algoritma ini: pada saat sebuah simpul dalam queue yang diprioritaskan mencapai posisi teratas, jembatan terbaiknya adalah yang menuju simpul yang berada di atas pulau dengan lintasan terpendek ke source. Apabila kita tidak ingin mengeksplorasi seluruh grafnya, tetapi ingin mengukur jarak ke tujuan tertentu, yang harus dilakukan hanyalah berhenti saat simpul tujuan memasuki S dan mengikuti parent pointer kembali ke source. Bila kita tidak ingin mengeksplorasi seluruh grafnya, kita akan mendapatkan lintasan terpendek ke setiap titik dari satu source. Secara garis besar, pseudo-code algoritma Dijkstra adalah sebagai berikut: Function Dijkstra (input M : matriks, a : simpul awal) tabel ( Mencari lintasan terpendek dari simpul awal a ke semua simpul lainnya Masukan: matriks ketetanggaan (M) dari graf berbobot G dan simpul awal a Keluaran: tabel D yang berisi panjang lintasan terpendek dari a ke semua simpul lainnya } Deklarasi D, S : tabel I : integer

Algoritma: { Langkah 0 (inisialisasi: ) For i l to n do S[i] 0 D[i] m[a,i] Endfor { Langkah 1: } S[a] 1 {karena simpul a adalah simpul asal lintasan terpendek, jadi simpul a sudah pasti terpilih dalam lintasan terpendek } D[a] {tidak ada lintasan terpendek dari simpul a ke a } { Langkah 2, 3,..., n-1: } for i 2 to n l do Cari j sedemikian sehingga S[j] = 0 dan D[j] = Minimum{D[1], D[2],..., D[n]} S[j] l { simpul j sudah terpilih ke dalam lintasan Terpendek } Hitung D[i] yang baru dari a ke simpul i S dengan cara sebagai berikut: D[i] Minimum{D[i], (D[j] + M[j,i])} endfor return D

Kode algoritma Dijkstra selengkapnya adalah sebagai berikut : (a) Deklarasi struktur data const n =...; { jumlah simpul di dalam graf } type matriks = array[1..n, 1..n] of integer type tabel = array [1..n] of integer (b) Algoritma Dijkstra function Dijkstra (input M : matriks, a : integer) tabel { Mencari lintasan terpendek dari simpul awal a ke semua smpul lainnya } Masukan : matriks ketetanggaan (M) dari graf berbobot G dan simpul awal a Keluaran : tabel D yang berisi panjang lintasan terpendek dari a ke semua simpul lainnya Deklarasi D, S : array[1..n] of integer I, j, k min : integer Algoritma { Langkah 0 (inisialisais: ) for i 1 to n do S[i] 0

Endfor D[i] M[a, i] { Langkah 1: } S[a] 1 { masukkan simpul awal ke dalam S } D[a] { jarak dari simpul awal ke simpul awal diberi nilai tak hingga } { Langkah 2, 3,..., n-1 : } for k 2 to n 1 do { cari simpul j sedemikian sehingga S[j] = 0 Dan D[j] = Minimum{D[1], D[2],..., D[n]} min D[1] j l for i 2 to n do if (S[i] = 0) and (D[i] < min) then min D[i] j i endif endfor S[j] l { simpul j sudah terpilih ke dalam lintasan terpendek } {hitung D[i] yang baru dari a ke simpul i S } for i l to n do if S[i] = 0 then if D[i] > (D[j] + jarak[j,]) then D[i] D[j] + jarak[j,l] endif endif

endfor endfor return D Kompleksitas waktu algoritma Dijkstra adalah O(n 2 ). Hal ini dijelaskan sebagai berikut : (a) Instruksi di dalam kalang for pertama : For i 1 to n do... Endfor dikerjakan sebanyak n kali, sehingga waktu kompleksitasnya adalah O(n). (b) kalang bersarang (i) kalang for terluar : For k 2 to n 1 do... Endfor Dilakukan sebanyak n -2 kali (ii) kalang for terdalam untuk menentukan D[i] minimum : For i 2 to n do... Endfor... Endfor Membutuhkan waktu dalam O(n). Dengan demikian, total waktu yang dibutuhkan adalah : T(n) = O(n) + (n 2)[O(n)+O(n)] = O(n) + O((n 2)(n)) = O(n) + O(n 2 ) = O(n 2 ) Sebagai contoh ilustrasi, tinjau kembali graf berarah pada contoh dengan matriks ketetanggaan M sebagai berikut: j=1 2 3 4 5 6 i = 1 0 50 10 40 45 2 0 15 10 3 20 0 15 4 20 0 35 5 30 0 6 3 0 Membutuhkan waktu dalam O(n). (iii) kalang for berikutnya untuk memperbarui nilai D[1..n] For i 1 to n do Perhitungan lintasan terpendek dari simpul awal a = 1 ke semua simpul lainnya ditabulasikan sebagai berikut (termasuk nilai-nilai tabel S dan D):

Lelaran Simpul yang Lintasan S D dipilih 1 2 3 4 5 6 1 2 3 4 5 6 Inisial - - 0 0 0 0 0 0 0 50 10 40 45 (1,2) (1,3) (1,4) (1,5) (1,6) 1 1 1 1 0 0 0 0 0 50 10 40 45 (1,2) (1,3) (1,4) (1,5) (1,6) 2 3 1, 3 1 0 1 0 0 0 50 10 25 45 (1,2) (1,3) (1,3,4) (1,5) (1,6) 3 4 1, 3, 4 1 0 1 1 0 0 45 10 25 45 (1,3,4,2)(1,3) (1,3,4) (1,4) (1,6) 4 2 1, 3, 4, 2 1 1 1 1 0 0 45 10 25 45 (1,3,4,2) (1,3) (1,3,4) (1,4) (1,6) 5 5 1, 5 1 1 1 1 1 0 45 10 25 45 Jadi, lintasan terpendek dari: 1 ke 3 adalah 1, 3 dengan panjang = 10 1 ke 4 adalah 1, 3, 4 dengan jarak = 25 1 ke 2 adalah 1, 3, 4, 2 dengan jarak = 45 1 ke 5 adalah 1, 5 dengan jarak = 45 1 ke 6 tidak ada 3. Kesimpulan Kesimpulan yang dapat diambil dari pembahasan tentang Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra adalah : 1. Persoalan Lintasan Terpendek dapat direpresentasikan dalam bentuk graf berbobot (weighted graph). 2. Ada beberapa macam persoalan lintasan terpendek, antara lain: a. Lintasan terpendek antara dua buah simpul tertentu (a pair shortest path). d. Lintasan terpendekan antara dua buah simpul yang melalui beberapa simpul tertentu (intermediate shortest path). 3. Algoritma lintasan terpendek yang paling terkenal adalah algoritma Dijkstra untuk persoalan lintasan terpendek dari simpul tertentu ke semua simpul yang lain (single-source shortest path). 4. Algoritma Dijkstra mempertahankan sebuah set solusi S yang memuat semua simpul yang telah diperiksa, yang jarak minimum terhadap sourcenya sudah ditentukan. Set ini berkembang bersamaan dengan algoritma yang terus bekerja dan memeriksa lebih banyak simpul. 5. Kompleksitas waktu algoritma Dijkstra adalah O(n 2 ). b. Lintasan terpendek antara semua pasangan simpul (all pairs shortest path). c. Lintasan terpendek dari simpul tertentu ke semua simpul yang lain (single-source shortest path).

DAFTAR PUSTAKA [1] Munir, Rinaldi. (2003). Matematika Diskrit. Bandung : Penerbit Informatika [2]. (2005). Diktat Kuliah IF2251 Strategi Algoritmik. Departemen Teknik Informatika, Institut Teknologi Bandung. [3] Shortest Path Problem Wikipedia, the free encyclopedia. (2006). url : http://en.wikipedia.org/wiki/shortest_path_ problem. Tanggal akses: 31 Desember 2006 pukul 16.30. [4] Dijkstra s Algorithm Wikipedia, the free encyclopedia. (2006). url : http://en.wikipedia.org/wiki/dijkstra%27s_ algorithm. Tanggal akses: 31 Desember 2006 pukul 16.30. [5] CS251B -- Topic #29: Shortest path algorithms. (2006). url : http://www.cs.mcgill.ca/~cs251/oldcourse s/1997/topic29/. Tanggal akses: 31 Desember 2006 pukul 16.30