Menu
CoddyTech

Algoritma Prim

Terakhir diperbarui

Algoritma Prim adalah algoritma untuk membangun minimum spanning tree (MST), yaitu himpunan edge termurah yang menghubungkan setiap node tanpa siklus, dengan menumbuhkan satu pohon ke luar dari sebuah node awal. Di setiap langkah, algoritma ini memeriksa setiap edge yang menyeberang dari pohon ke node di luarnya, lalu menambahkan yang termurah. Tekan Putar di atas untuk melihat pohon meluas, selalu mengambil edge berbobot terendah yang mencapai node baru.

Karena selalu memilih edge penyeberang yang minimum, setiap penambahan dijamin aman (pasti menjadi bagian dari suatu MST). Dengan priority queue berbasis binary heap yang diurutkan berdasarkan edge termurah ke setiap node di luar pohon, Prim berjalan dalam O(E log V). Ini berbeda dengan Kruskal, yang mengurutkan semua edge secara global alih-alih menumbuhkan satu pohon yang terhubung.

Kompleksitas waktu dan ruang

ImplementasiKompleksitasCatatan
Binary heapO(E log V)Priority queue berisi edge penyeberang
Adjacency matrixO(V²)Lebih sederhana; bagus untuk graf padat
RuangO(V + E)Keanggotaan pohon + priority queue
Paling cocok untukGraf padatTumbuh dari satu node awal

Langkah demi langkah

LangkahApa yang terjadi
1Mulai pohon dengan satu node mana pun.
2Periksa semua edge yang menyeberang dari pohon ke node di luarnya.
3Pilih edge penyeberang dengan bobot terkecil.
4Tambahkan edge itu beserta node barunya ke pohon.
5Ulangi sampai setiap node ada di dalam pohon.

Contoh penerapan

Membangun MST dari graf 4 node dengan edge A-B=1, A-C=3, B-C=2, B-D=4, C-D=5, dimulai dari A:

LangkahPohonEdge penyeberangEdge terpilih
1{A}A-B=1, A-C=3A-B (bobot 1)
2{A, B}A-C=3, B-C=2, B-D=4B-C (bobot 2)
3{A, B, C}B-D=4, C-D=5B-D (bobot 4)
4{A, B, C, D}tidak ada: semua node sudah di pohonselesai: bobot MST 1+2+4 = 7

Kapan memakai algoritma Prim

Pakai saatHindari saat
Kamu butuh minimum spanning tree dari graf berbobot yang terhubung dan tidak berarah.Grafnya berarah atau kamu butuh jalur terpendek: pakai Dijkstra atau Bellman-Ford.
Grafnya padat (E mendekati V²); bentuk matriks O(V²) sederhana dan cepat.Grafnya renggang dan edge-nya sudah terurut atau mudah diurutkan: Kruskal sering lebih sederhana.
Kamu ingin pohon tumbuh dari satu wilayah ke luar (misalnya tata letak jaringan yang bertahap).Grafnya tidak terhubung: Prim hanya mencakup satu komponen, padahal kamu butuh minimum spanning forest.
Kamu sudah punya struktur adjacency dan priority queue.Kamu perlu mendeteksi siklus pada himpunan edge global: union-find (Kruskal) lebih cocok untuk bentuk itu.

Kode Prim's Algorithm

Implementasi Prim's Algorithm yang rapi dan siap dijalankan dalam Python, JavaScript, Java, C++, C. Pilih bahasa, salin kodenya, atau buka langsung di Coddy Playground.

Kode Prim's Algorithm dalam Python

Python
1import heapq2
3
4def prim(graph, start):5    visited = {start}6    heap = [(w, start, v) for v, w in graph[start]]7    heapq.heapify(heap)8    mst, total = [], 09    while heap and len(visited) < len(graph):10        w, u, v = heapq.heappop(heap)11        if v in visited:12            continue13        visited.add(v)14        mst.append((u, v, w))15        total += w16        # Offer the new node's edges to the frontier17        for neighbor, weight in graph[v]:18            if neighbor not in visited:19                heapq.heappush(heap, (weight, v, neighbor))20    return mst, total21
22
23graph = {24    "A": [("B", 4), ("C", 1)],25    "B": [("A", 4), ("C", 3), ("D", 2)],26    "C": [("A", 1), ("B", 3), ("D", 5)],27    "D": [("B", 2), ("C", 5), ("E", 7)],28    "E": [("D", 7)],29}30
31mst, total = prim(graph, "A")32for u, v, w in mst:33    print(f"{u} - {v} (weight {w})")34print("Total MST weight:", total)
Jalankan kode ini di Playground Python

FAQ Algoritma Prim

Berapa kompleksitas waktu algoritma Prim?
Dengan priority queue berbasis binary heap, Prim berjalan dalam O(E log V). Versi adjacency matrix yang lebih sederhana, yang memindai edge penyeberang minimum di setiap langkah, bernilai O(V²) dan bisa lebih cepat pada graf padat. Keduanya memakai ruang O(V + E).
Apa perbedaan algoritma Prim dan algoritma Kruskal?

Keduanya mencari minimum spanning tree secara greedy. Prim menumbuhkan satu pohon yang terhubung dari sebuah node awal, berulang kali menambahkan edge termurah yang keluar dari pohon (memakai priority queue). Kruskal mempertimbangkan semua edge yang diurutkan berdasarkan bobot dan menambahkan yang termurah yang tidak membentuk siklus (memakai union-find). Prim sering dipilih untuk graf padat, Kruskal untuk graf renggang.

Apakah algoritma Prim selalu menemukan MST yang optimal?

Ya. Di setiap langkah, edge termurah yang menyeberangi pohon saat ini aman untuk ditambahkan, karena edge itu termasuk dalam suatu minimum spanning tree (cut property). Menambahkan edge aman berulang kali menghasilkan minimum spanning tree yang sebenarnya, asalkan grafnya terhubung.

Kapan sebaiknya memakai algoritma Prim, bukan Kruskal?
Pakai Prim saat grafnya padat, karena bentuk adjacency matrix O(V²) miliknya tidak perlu mengurutkan semua E edge dan menumbuhkan satu pohon dari sebuah node awal. Kruskal unggul pada graf renggang, di mana mengurutkan daftar edge itu murah dan union-find menjaga pengecekan siklus tetap cepat. Keduanya menghasilkan MST yang benar, jadi pilihannya terutama bergantung pada kepadatan edge dan struktur data yang sudah kamu punya.
Apakah node awal memengaruhi MST yang dihasilkan?

Tidak. Total bobot MST selalu sama dari node mana pun kamu mulai, karena bobot minimum spanning tree pada graf yang terhubung itu unik. Edge yang terpilih hanya bisa berbeda jika beberapa edge punya bobot yang sama dan ada lebih dari satu MST. Selain kasus itu, Prim menghasilkan pohon yang persis sama apa pun node awalnya.

Bisakah algoritma Prim menangani graf yang tidak terhubung?

Tidak secara langsung. Prim menumbuhkan satu pohon, jadi algoritma ini hanya mencakup komponen terhubung yang berisi node awal dan membiarkan sisanya tidak tersentuh. Untuk mencakup setiap komponen, kamu perlu menjalankan Prim berulang kali dari node yang belum dikunjungi, sehingga menghasilkan minimum spanning forest, bukan satu pohon.

Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai