Keduanya dapat diimplementasikan menggunakan algoritma generik yang sama persis sebagai berikut:
Inputs:
G: Graph
s: Starting vertex (any for Prim, source for Dijkstra)
f: a function that takes vertices u and v, returns a number
Generic(G, s, f)
Q = Enqueue all V with key = infinity, parent = null
s.key = 0
While Q is not empty
u = dequeue Q
For each v in adj(u)
if v is in Q and v.key > f(u,v)
v.key = f(u,v)
v.parent = u
Untuk Prim, operan f = w(u, v)
dan oper Dijkstra f = u.key + w(u, v)
.
Hal menarik lainnya adalah Generic di atas juga dapat mengimplementasikan Breadth First Search (BFS) meskipun akan berlebihan karena antrian prioritas yang mahal tidak terlalu dibutuhkan. Untuk mengubah algoritma Generik di atas ke BFS, lewati f = u.key + 1
yang sama dengan memaksakan semua bobot ke 1 (yaitu BFS memberikan jumlah minimum edge yang diperlukan untuk melintasi dari titik A ke B).
Intuisi
Berikut satu cara yang baik untuk berpikir tentang algoritme umum di atas: Kita mulai dengan dua kelompok A dan B. Awalnya, letakkan semua simpul Anda di B sehingga keranjang A kosong. Kemudian kita pindahkan satu simpul dari B ke A. Sekarang lihat semua sisi dari simpul di A yang memotong ke simpul di B. Kita memilih satu sisi menggunakan beberapa kriteria dari tepi yang saling silang ini dan memindahkan simpul yang sesuai dari B ke A. Ulangi proses ini sampai B kosong.
Cara brute force untuk mengimplementasikan ide ini adalah dengan mempertahankan antrian prioritas dari edge untuk simpul di A yang memotong ke B. Jelas itu akan merepotkan jika grafik tidak jarang. Jadi pertanyaannya adalah bisakah kita mempertahankan antrian prioritas simpul? Ini sebenarnya kita bisa karena keputusan kita akhirnya adalah simpul mana yang harus dipilih dari B.
Konteks Sejarah
Sangat menarik bahwa versi generik dari teknik di balik kedua algoritme secara konseptual sudah berusia 1930 bahkan ketika komputer elektronik tidak ada.
Cerita dimulai dengan Otakar Borůvka yang membutuhkan algoritme untuk teman keluarga yang mencoba mencari cara untuk menghubungkan kota-kota di negara Moravia (sekarang bagian dari Republik Ceko) dengan saluran listrik berbiaya rendah. Dia menerbitkan algoritmanya pada tahun 1926 dalam jurnal yang berhubungan dengan matematika, karena Ilmu Komputer belum ada saat itu. Hal ini menjadi perhatian Vojtěch Jarník yang memikirkan perbaikan pada algoritme Borůvka dan menerbitkannya pada tahun 1930. Ia sebenarnya menemukan algoritme yang sama yang sekarang kita kenal sebagai algoritme Prim yang menemukannya kembali pada tahun 1957.
Terlepas dari semua ini, pada tahun 1956 Dijkstra perlu menulis program untuk mendemonstrasikan kemampuan komputer baru yang dikembangkan institutnya. Dia pikir akan menyenangkan memiliki komputer yang menemukan koneksi untuk bepergian antara dua kota di Belanda. Dia merancang algoritme dalam 20 menit. Dia membuat grafik 64 kota dengan beberapa penyederhanaan (karena komputernya 6-bit) dan menulis kode untuk komputer tahun 1956 ini. Namun dia tidak mempublikasikan algoritmanya karena pada dasarnya tidak ada jurnal ilmu komputer dan dia pikir ini mungkin tidak terlalu penting. Tahun berikutnya dia belajar tentang masalah menghubungkan terminal komputer baru sehingga panjang kabel diminimalkan. Dia memikirkan masalah ini dan menemukan kembali Jarník / Prim ' algoritma yang sekali lagi menggunakan teknik yang sama dengan algoritma jalur terpendek yang dia temukan setahun sebelumnya. Diamenyebutkan bahwa kedua algoritmanya dirancang tanpa menggunakan pena atau kertas. Pada tahun 1959 ia menerbitkan kedua algoritma tersebut dalam sebuah makalah yang panjangnya hanya 2 setengah halaman.