OKJEK21 > Algoritma Dijkstra Lintasan Terpendek Bobot Sisi Node Tujuan
OKJEK21 menyediakan penjelasan lengkap tentang Algoritma Dijkstra Lintasan Terpendek Bobot Sisi Node Tujuan bagi siapa saja yang ingin memahami cara kerja pencarian jalur optimal pada graf berarah maupun tak berarah.
Apa itu Algoritma Dijkstra?
Algoritma Dijkstra, yang dikembangkan oleh Edsger W. Dijkstra pada tahun 1956, merupakan metode klasik untuk menemukan lintasan terpendek dari satu node (atau titik) ke semua node lain dalam sebuah graf yang memiliki bobot sisi non‑negatif. Pada dasarnya, algoritma ini menelusuri graf secara bertahap, memperbarui jarak terpendek yang diketahui, hingga tidak ada lagi perbaikan yang dapat dilakukan.
Komponen utama yang perlu dipahami
- Node (simpul): Titik atau vertex dalam graf yang menjadi titik awal atau tujuan.
- Sisi (edge): Hubungan antar‑node yang memiliki nilai bobot (weight) menandakan biaya atau jarak tempuh.
- Bobot sisi: Nilai numerik yang tidak boleh negatif; semakin kecil bobot, semakin “dekat” dua node.
- Node tujuan: Node yang ingin dicapai dengan jarak total paling pendek dari node sumber.
Cara kerja Algoritma Dijkstra langkah demi langkah
Berikut rangkaian proses yang biasanya diikuti:
- Inisialisasi: Tetapkan jarak ke node sumber = 0, semua node lain = ∞. Simpan node yang belum diproses dalam struktur data prioritas (biasanya heap).
- Pilih node dengan jarak terpendek yang belum diproses.
- Untuk setiap sisi yang keluar dari node terpilih, hitung jarak baru = jarak node terpilih + bobot sisi. Jika jarak baru lebih kecil dari nilai yang tersimpan, perbarui jarak tersebut.
- Mark node terpilih sebagai sudah diproses sehingga tidak dipertimbangkan lagi.
- Ulangi langkah 2‑4 sampai semua node telah diproses atau sampai node tujuan sudah dipastikan memiliki jarak terpendek.
Setelah selesai, setiap node memiliki nilai jarak terpendek dari sumber, dan jejak (predecessor) dapat di‑rekonstruksi untuk mengetahui lintasan spesifik ke node tujuan.
Implementasi praktis pada kasus game online
Dalam konteks game online, terutama yang melibatkan peta atau jaringan level, Algoritma Dijkstra dapat dipakai untuk:
- Menentukan rute tercepat bagi karakter AI menuju target.
- Mengoptimalkan jalur pengiriman barang dalam game ekonomi.
- Memberikan rekomendasi jalur terpendek kepada pemain berdasarkan kondisi medan (misalnya, bobot sisi berubah karena cuaca atau rintangan).
Karena semua bobot sisi bersifat non‑negatif, algoritma ini tetap akurat meski bobot berubah secara dinamis selama permainan, asalkan pembaruan dilakukan sebelum perhitungan ulang.
Keunggulan dan keterbatasan
Keunggulan utama Dijkstra adalah jaminan menemukan lintasan terpendek bila semua bobot sisi positif. Algoritma ini relatif mudah diimplementasikan dan dapat dioptimalkan dengan struktur heap untuk menurunkan kompleksitas menjadi O((V+E) log V), di mana V adalah jumlah node dan E adalah jumlah sisi.
Keterbatasan muncul ketika graf mengandung sisi dengan bobot negatif; dalam kasus tersebut algoritma Bellman‑Ford lebih tepat. Selain itu, Dijkstra menghitung jarak ke semua node, sehingga bila hanya satu node tujuan yang dibutuhkan, algoritma A* (A‑star) dengan heuristik yang tepat biasanya lebih efisien.
Penerapan kode sederhana (Python)
Berikut contoh singkat yang menunjukkan cara menghitung lintasan terpendek dari node source ke target menggunakan pustaka heapq:
import heapq
def dijkstra(graph, source, target):
dist = {node: float('inf') for node in graph}
prev = {}
dist[source] = 0
heap = [(0, source)]
while heap:
cur_dist, u = heapq.heappop(heap)
if u == target:
break
if cur_dist > dist[u]:
continue
for v, weight in graph[u]:
alt = cur_dist + weight
if alt < dist[v]:
dist[v] = alt
prev[v] = u
heapq.heappush(heap, (alt, v))
# Rekonstruksi lintasan
path = []
node = target
while node in prev:
path.append(node)
node = prev[node]
path.append(source)
return list(reversed(path)), dist[target]
Kode di atas menerima graph dalam bentuk dictionary, dimana setiap key adalah node dan value‑nya adalah list tuple (neighbor, weight). Fungsi mengembalikan lintasan terpendek serta total bobotnya.
Pertanyaan yang Sering Diajukan
Apakah Algoritma Dijkstra dapat dipakai pada graf berarah?
Ya. Algoritma Dijkstra bekerja baik pada graf berarah maupun tak berarah, asalkan semua bobot sisi tidak negatif.
Bagaimana cara menangani perubahan bobot sisi secara real‑time dalam game?
Jika bobot berubah, cukup jalankan kembali Dijkstra dari node sumber yang relevan atau gunakan teknik incremental update yang hanya memperbarui bagian graf yang terpengaruh.
Apakah Dijkstra lebih cepat daripada A*?
Kecepatan tergantung pada tujuan. Jika hanya satu node tujuan yang dicari dan tersedia heuristik yang baik, A* biasanya lebih cepat karena tidak mengeksplorasi seluruh graf. Dijkstra tetap lebih sederhana bila tidak ada heuristik yang tersedia.
Dengan memahami Algoritma Dijkstra Lintasan Terpendek Bobot Sisi Node Tujuan, Anda dapat mengoptimalkan navigasi dalam aplikasi atau game online secara efektif. Untuk contoh implementasi lebih lanjut atau diskusi teknik pemrograman, kunjungi OKJEK21 dan temukan sumber daya yang relevan.