Lompat ke konten utama
←

Riset Operasi Dasar

Pelajaran 13 dari 20

Jaringan, antrean, dan keputusan

Jalur terpendek: algoritma Dijkstra dengan heapq

Setelah pelajaran ini kamu bisa menulis algoritma Dijkstra dengan antrean prioritas heapq untuk menghitung jarak terpendek dari satu simpul ke semua simpul lain.

±14 menitDiperiksa 28 Sep 2026

Materi

Masalah jalur terpendek mencari lintasan berbobot total terkecil dari satu simpul ke simpul lain di sebuah graf. Kamus algoritma NIST mendefinisikan algoritma Dijkstra sebagai algoritma yang mencari jalur terpendek dari satu simpul sumber ke semua simpul lain pada graf berarah berbobot, dengan syarat semua bobot nonnegatif. Introduction to Computer Science (§3.5) menjelaskan cara kerjanya: algoritma menyimpan antrean prioritas simpul yang diurutkan menurut jarak dari simpul awal, lalu berulang kali mengambil simpul dengan jarak terkecil dan memperluas jalur darinya.

Di Python, antrean prioritas itu tersedia sebagai modul heapq. heapq.heappush(heap, item) memasukkan butir, dan heapq.heappop(heap) mengeluarkan butir terkecil sambil menjaga sifat heap. Dokumentasinya menyarankan tuple (prioritas, tugas) sebagai butir, karena tuple dibandingkan mulai dari elemen pertama. Untuk Dijkstra, butirnya (jarak, simpul).

Langkahnya: jarak awal 0 di simpul sumber, masukkan (0, sumber) ke heap; selama heap berisi, ambil butir terkecil; lewati bila jaraknya sudah usang; untuk setiap tetangga, bila jarak lewat simpul ini lebih kecil daripada jarak yang tercatat, perbarui jaraknya dan masukkan ke heap. Rute lengkapnya disusun dengan mencatat simpul pendahulu, seperti dijelaskan NIST pada entri shortest path.

import heapq
h = []
heapq.heappush(h, (7, "Bogor"))
heapq.heappush(h, (3, "Depok"))
heapq.heappush(h, (5, "Bekasi"))
print(heapq.heappop(h))   # (3, 'Depok'): jarak terkecil keluar lebih dulu

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 2 dari 3

Jaringan gudang: S→A 6 km, S→B 2 km, B→A 3 km, A→T 1 km, B→T 7 km (semua searah). Berapa jarak terpendek dari S ke T?

Latihan 3 dari 3

Seorang analis memberi bobot −4 pada satu ruas karena ruas itu memberi potongan biaya, lalu menjalankan Dijkstra. Apa yang tepat?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke