JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
1
Implementasi Algoritma Pencarian k Jalur Sederhana Terpendek dalam Graf Anggakara Hendra N., Yudhi Purwananto, dan Rully Soelaiman Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember (ITS) Jl. Arief Rahman Hakim, Surabaya 60111 Indonesia e-mail:
[email protected]
AbstrakβDalam dunia nyata, terdapat permasalahan mencari jalur terpendek yang dapat direpresentasikan dalam graf, tetapi jalur yang didapat kadang tidak bisa digunakan karena adanya suatu halangan pada jalur tersebut. Hal ini menyebabkan dibutuhkannya alternatif berupa jalur-jalur terpendek lain dengan biaya yang dikeluarkan tidak memiliki selisih yang terlalu besar dari jalur terpendek pertama. Beberapa algoritma naif telah ditemukan untuk menyelesaikan permasalahan pencarian k jalur sederhana terpendek dalam graf. Tetapi algoritma naif yang ada masih kurang efisien dalam hal kecepatan dan kebutuhan memori. Dalam artikel ini dilakukan studi dan implementasi algoritma pencarian π€ jalur sederhana terpendek dalam graf dengan bahasa C++. Hasil uji coba menunjukkan program menghasilkan jalur yang benar dan memiliki pertumbuhan waktu eksekusi secara kuadratik dengan kompleksitas waktu π(π€π§(π¦ + π§ π₯π¨π π§)) pada n buah verteks, m buah edge, dan urutan k jalur yang dicari. Kata KunciβAlgoritma deviasi, algoritma Dijkstra, jalur sederhana, jalur terpendek.
I. PENDAHULUAN
D
alam permasalahan pencarian jalur terpendek dalam graf, jalur terpendek yang didapat tidak selalu dapat digunakan karena adanya suatu halangan pada jalur tersebut. Hal ini menyebabkan dibutuhkannya pemilihan alternatif jalur lain berupa jalur terpendek berikutnya. Tentu saja, biaya yang dibutuhkan oleh jalur tersebut harus memiliki selisih minimum dengan biaya jalur terpendek sebelumnya. Salah satu algoritma naif yang dapat digunakan untuk mencari sebanyak k buah jalur sederhana adalah dengan melakukan modifikasi pada algoritma Dijkstra [1]. Modifikasi dilakukan dengan menjalankan algoritma Dijkstra secara berulang sampai didapatkan k pasang jalur berbeda yang ditemukan dari verteks sumber menuju verteks tujuan. Tetapi, algoritma naif tersebut masih kurang efisien dalam hal kecepatan dan kebutuhan memori yang dibuktikan pada hasil uji coba. Pada artikel ini dilakukan implementasi algoritma pencarian k jalur sederhana terpendek dalam graf [2] yang lebih efisien daripada algoritma naif yang telah ada. Implementasi dilakukan pada graf berarah dan berbobot dengan batasan bobot masing-masing edge berupa bilangan bulat nonnegatif. Jalur yang dihasilkan pada artikel ini adalah jalur sederhana, yaitu jalur yang tidak mengandung pengulangan verteks
penyusun. Artikel ini bertujuan untuk membuktikan kebenaran hasil implementasi algoritma pencarian k jalur sederhana terpendek dalam graf, serta membandingkan kecepatan algoritma tersebut dengan algoritma naif. II. METODOLOGI A. Definisi Ditentukan sebuah graf πΊ = (π, πΈ) dengan π = {π£1 , π£2 , β¦ , π£π } adalah himpunan verteks dan πΈ = {π1 , π2 , β¦ ππ } adalah himpunan edge yang menyusun graf πΊ. Masing-masing edge dalam πΈ memiliki bobot yang dinotasikan sebagai π(π). Sebuah edge yang terhubung dari verteks π£π ke verteks π£π untuk 1 β€ π β€ π, 1 β€ π β€ π, dan π£π β π£π , dapat dinotasikan sebagai οΏ½π£π , π£π οΏ½. Jika diketahui π dan π adalah verteks dalam π, maka sebuah jalur π dari verteks π menuju verteks π dalam graf πΊ adalah urutan verteks dengan bentuk π = {π£ β²1 , π£ β² 2 , β¦ , π£β²π } dengan ketentuan sebagai berikut: β’ π£ β² π β π, untuk setiap π β {1 β¦ π}; β’ (π£ β² π , π£ β² π+1 ) β πΈ untuk setiap π β {1 β¦ π β 1}; β’ π = π£β²1 dan π = π£β²π . Jika πππ merupakan himpunan jalur-jalur dari verteks π menuju verteks π dalam graf πΊ, kemudian verteks π₯ dan verteks π¦ adalah verteks penyusun jalur π β πππ , maka π β ππ₯π¦ disebut sebagai subjalur dari π apabila memiliki rangkaian verteks yang sama dengan π dari π₯ sampai π¦. Jalur tersebut dinotasikan sebagai π π’ππ (π₯, π¦). Penggabungan dua jalur, π β πππ dan π β πππ , dinotasikan sebagai π β π dan merupakan jalur dari verteks π menuju verteks π yang terbentuk dari jalur π yang diikuti dengan jalur π. Jika diketahui sebuah bilangan bulat positif πΎ, maka permasalahan πΎ jalur sederhana terpendek bertujuan menentukan sebuah himpunan jalur ππΎ = {π1 , β¦ , ππΎ } β π, dengan ketentuan sebagai berikut: β’ ππ adalah jalur sederhana, untuk setiap π β {1 β¦ πΎ}; β’ π€(ππ ) β€ π€(ππ+1 ), untuk setiap π β {1 β¦ πΎ β 1}; β’ π€(ππΎ ) β€ π€(π), untuk setiap jalur sederhana π β π β ππΎ ; β’ ππ ditentukan sebelum ππ+1, pada setiap π β {1 β¦ πΎ β 1} B. Algoritma Deviasi Algoritma pencarian k jalur terpendek antara dua verteks mengacu pada pembuatan "pseudo"-tree yang
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print) merepresentasikan hubungan antara jalur-jalur dalam ππ sebagai sebuah struktur pohon (tree) [3]. Jika terdapat sebuah jalur π1 dari verteks π menuju verteks π‘ dalam graf πΊ, maka π1 membentuk sebuah pohon yang terdiri dari satu buah jalur. Jika ada jalur lain ππ+1 dari verteks s menuju verteks t dalam graf πΊ, maka dapat dipastikan bahwa ππΎ+1 memiliki rangkaian verteks yang sama dengan π1 , β¦ , ππ dari verteks sumber π , sampai verteks tertentu (yang dapat berarti π ), yaitu letak jalur ππ+1 menyimpang dari himpunan jalur tersebut [2]. Pada verteks-verteks tersebut, verteks terjauh dari verteks sumber disebut dengan verteks deviasi pada ππ+1 dan dinotasikan sebagai π(ππ+1 ). Verteks deviasi pada jalur ππ+1 merupakan posisi jalur ππ+1 menyimpang dari jalur-jalur sebelumnya, yaitu π1 , β¦ , ππ . Kemudian, jika berdasar pada asumsi bahwa himpunan jalur π1 , β¦ , ππ membentuk "pseudo"-tree, maka himpunan jalur π1 , β¦ , ππ , ππ+1 juga membentuk "pseudo"-tree dengan π+1 jalur [4]. Sebuah "pseudo"-tree yang terdiri dari jalur-jalur sederhana disebut sebagai pohon jalur sederhana. Pada algoritma deviasi digunakan sebuah himpunan jalur π yang berisi kandidat-kandidat jalur sederhana. Pada tiap langkah, algoritma deviasi memilih jalur dalam π dengan bobot terkecil, membuat jalur sederhana baru dari jalur tersebut, lalu terakhir memperbarui π. Ketika algoritma dijalankan, jalur-jalur dalam π merepresentasikan beberapa jalur dalam struktur pohon yang sedang dibuat. Prosedurprosedur tersebut diulang hingga ππ ditemukan, yaitu ketika jalur-jalur yang diambil dari π adalah π1 , π2 , β¦ , ππ . Pada setiap π β {1, β¦ , πΎ}, ketika ππ ditentukan, kandidat-kandidat untuk jalur ππ dengan π > π telah dihitung, dan untuk menghindari jalur-jalur dihitung kembali, maka rangkaian verteks yang dianalisa hanya yang terdapat pada π π’πππ (π(ππ ), π‘). Selain itu, ketika menganalisa π(ππ ), edgeedge yang berasal dari π(ππ ) dan termasuk dalam jalur-jalur sederhana lain yang sudah ditetapkan tidak boleh digunakan. C. Algoritma Yen [5] Algoritma Yen adalah algoritma deviasi yang dapat digunakan hanya untuk menentukan jalur sederhana. Pada tiap verteks π£ππ , algoritma tersebut menghitung jalur sederhana terpendek π yang menyimpang dari ππ . Kemudian, ππ disebut sebagai parent dari π dan π£ππ disebut sebagai verteks deviasi pada ππ . Dengan tujuan hanya untuk mencari jalur sederhana, π maka verteks-verteks pada π π’πππ (π , π£πβ1 ) tidak boleh diulang. Oleh karena itu, verteks-verteks tersebut dihapus sementara dari graf πΊ, kemudian mencari jalur sederhana terpendek dari verteks π£ππ menuju verteks π‘ pada graf yang sudah dimodifikasi. Pada implementasi algoritma Yen, setiap verteks pada ππ dari π(ππ ) sampai π£πππ β1. Pada masing-masing verteks, misal π£ππ , jalur sederhana terpendek π β π yang akan dihitung akan memiliki bentuk π = π π’πππ οΏ½π , π£ππ οΏ½ β π, dengan π merupakan π ) dan jalur dalam ππ£π π‘ yang edge pertamanya bukan (π£ππ , π£π+1 π
belum dihitung sebelumnya. Untuk mendapatkan jalur π dengan kondisi tersebut, maka graf yang digunakan harus
2
dimodifikasi terlebih dahulu, yaitu dengan menghapus semua π π verteks dalam π π’πππ οΏ½π , π£πβ1 οΏ½, edge (π£ππ , π£π+1 ), serta semua π edge yang berasal dari π£π yang sebelumnya telah dihapus saat menghitung ππ . Kemudian, jalur π dapat diperoleh dengan mencari jalur terpendek dari π£ππ menuju verteks π‘ pada graf yang telah dimodifikasi. Setelah jalur π didapat, graf dikembalikan seperti keadaan semula. D. Rangkaian Proses
Jika diketahui π£πππ β1 adalah verteks pertama yang akan dianalisa pada ππ , maka π adalah jalur sederhana yang memiliki bentuk π π’πππ οΏ½π , π£πππ β1 οΏ½ β π, dengan π adalah jalur sederhana terpendek dari π£πππ β1 menuju π‘ tanpa verteks-verteks dalam π π’πππ (π , π£πππ β2 ) dan tanpa edge (π£πππ β1 , π‘). Dengan kata lain, verteks-verteks dan edge tersebut dihapus dari graf πΊ sebelum jalur π ditentukan. Kemudian, dengan menggunakan algoritma pencarian jalur terpendek, akan terbentuk sebuah struktur pohon jalur sederhana terpendek dari π ke π‘, untuk setiap π β π, yang disebut pohon terpendek berakar pada π‘, dapat dihitung dan digunakan untuk menentukan jalur sederhana π. Struktur pohon terpendek berakar pada π₯ β π dinotasikan sebagai ππ₯ dan jalur sederhana dari π β π menuju π₯ dinotasikan sebagai ππ₯ (π). Bobot jalur ππ (π) dinotasikan sebagai ππ dan disebut sebagai label dari π, untuk setiap π β π. Terdapat sebuah verteks sembarang π£ππ di dalam ππ dengan π π π£ππ β π(ππ ), dan sebuah jalur π π’πππ οΏ½π , π£π+1 οΏ½ β ππ‘ (π£π+1 ) yang akan dicari, dengan ππ‘ menggunakan acuan graf yang didapat setelah menghapus verteks-verteks pada jalur π π’πππ (π , π£π ) dan π π , π£π+2 ) dari graf πΊ. menghapus edge (π£π+1 Langkah selanjutnya adalah mengembalikan edge π π οΏ½π£π+1 , π£π+2 οΏ½ ke dalam graf. Proses pengembalian edge tersebut termasuk memperbaiki ππ‘ yang berarti memperbaiki label dari beberapa node pada struktur pohon tersebut. Kemudian, π π setelah mengembalikan οΏ½π£π+1 , π£π+2 οΏ½, semua verteks π₯ pada graf yang telah dimodifikasi tersebut dianalisa sehingga π setidaknya ada satu jalur sederhana dari verteks π₯ menuju π£π+1 dalam graf tersebut. Pada langkah selanjutnya dilakukan pengembalian verteks π£ππ dalam graf yang telah dimodifikasi, jika terdapat edge-edge yang berasal dari verteks tersebut, maka dilakukan penghitungan label dari π£ππ . Perubahan label π£ππ termasuk melakukan pengubahan label-label lain yang berhubungan dengan label tersebut, kemudian dilakukan analisa verteks π₯ dalam graf sehingga setidaknya ada satu jalur sederhana dari π₯ menuju π£ππ . Jika setelah dua langkah tersebut nilai ππ£π dapat π
ditentukan, maka ππ‘ (π£ππ ) telah ditetapkan dan jalur sederhana baru yang didapat memiliki bentuk ππ = π π’πππ οΏ½π , π£ππ οΏ½ β ππ‘ (π£ππ ). Namun jika sebaliknya, maka tidak mungkin ada jalur sederhana yang dapat dibuat. Beberapa hal yang perlu diperhatikan adalah ketika π£ππ = π(ππ ), prosedur yang sama dilakukan, tetapi ketika π melewati edge (π(ππ ), π£π+1 ), semua edge yang dihapus ketika
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
π β jalur sederhana terpendek dari π ke π‘ dalam πΊ π(π) β π ; π β {π}; π β 0; while (π β β
and π β€ πΎ) do π β π + 1; ππ β jalur sederhana terpendek dalam π; π β π β {ππ }; hapus π π’πππ (π , π£πππβ1 ) dalam graf; hapus edge-edge (π(ππ ), π), untuk π β π pada π1 , β¦ , ππβ1 dalam graf; ππ‘ β pohon jalur terpendek dengan akar π‘; for οΏ½π£ππ β οΏ½π£πππβ1 , β¦ , π(ππ )οΏ½οΏ½ do
3
1 πππ π‘ β {π₯}; 2 repeat 3 π β elemen dari πππ π‘; πππ π‘ β πππ π‘ β {π}; 4 for ((π, π) β πΈ) do if (ππ > ππ + π(π, π)) then 5 ππ β ππ + π(π, π); 6 7 if (π β πππ π‘) then πππ π‘ β πππ π‘ βͺ {π}; 8 endif 9 endfor 10 until (πππ π‘ = β
); Gambar. 3. Pseudocode algoritma reverse star form
kembalikan node π£ππ pada graf; hitung ππ£ π dengan forward star form; π
if (ππ£ π ditetapkan) then π
perbaiki label semua verteks penerus dari π£ππ dengan reverse star form; π β π π’πππ οΏ½π , π£ππ οΏ½ β ππ‘ οΏ½π£ππ οΏ½; π(π) β π£ππ ; π βͺ {π}; Endif π kembalikan (π£ππ , π£π+1 ) pada graf; π if (ππ£ππ > ππ£ π + π(π£ππ , π£π+1 )) then ππ£ππ
π+1
β ππ£ π + π+1
Gambar. 4. Representasi graf dari data masukan pada uji coba kebenaran
π π(π£ππ , π£π+1 );
Perbaiki label semua verteks penerus 20 dari π£ππ dengan reverse star form; endif 21 endfor 22 kembalikan verteks dan edge dalam jalur ππ 23 dari π sampai π(ππ ) dalam graf; kembalikan edge-edge (π(ππ ), π), untuk π β π 24 pada π1 , β¦ , ππβ1 dalam graf; endwhile 25 Gambar. 1. Pseudocode algoritma pencarian jalur sederhana terpendek dalam graf 1 for ((π, π) β πΈ) do if (ππ > ππ + π(π, π)) then 2 ππ β ππ + π(π, π); 3 4 endif 5 endfor Gambar. 2. Pseudocode algoritma forward star form
ππ dibuat, juga harus dihapus dari graf. Pada Gambar 1 ditunjukkan pseudocode algoritma untuk mendapatkan jalur sederhana terpendek ke-π sesuai langkah-langkah pada subbab ini. Proses memperbaiki label ππ menggunakan algoritma yang disebut forward star form, dan proses memperbaiki label verteks-verteks penerus π£ππ menggunakan algoritma yang disebut reverse star form. Pseudocode algoritma forward star form ditunjukkan pada Gambar 2, dan pseudocode algoritma reverse star form ditunjukkan pada Gambar 3. Pada implementasi algoritma dalam artikel ini, implementasi proses algoritma forward star form dilakukan dengan cara memberi label pada verteks-verteks yang terdapat pada π π’πππ οΏ½π , π£ππ οΏ½ ketika melakukan penghapusan subjalur sebelum melakukan proses reverse star form. Kemudian, karena proses algoritma reserver star form hanya dilakukan pada verteksverteks yang merupakan penerus (successor) dari verteks π£ππ , maka implementasi algoritma tersebut dapat dilakukan dengan cara melakukan algoritma Dijkstra pada graf yang telah
No. 1 2 3 4
Tabel 1. Data jumlah verteks dan edge pada graf acak Judul Graf Jumlah Verteks Jumlah Edge Graf A Graf B Graf C Graf D
51 50 730 6.551
1.183 2.450 5.762 47.322
dimodifikasi, dengan menambah batasan berupa verteksverteks pada π π’πππ οΏ½π , π£ππ οΏ½. III. UJI COBA A. Data Uji Coba Data uji coba yang digunakan pada uji coba ini terdiri dari tiga macam data uji coba. Tiga data uji coba tersebut adalah data graf yang dibuat secara manual, data masukan pada situs Sphere Online Judge (SPOJ), dan data graf acak dengan jumlah verteks dan edge yang beragam. Pada Tabel 1 ditunjukkan data jumlah verteks dan edge dari graf-graf acak yang digunakan untuk uji coba. Sedangkan untuk data masukan pada situs SPOJ menggunakan data uji coba yang tersedia pada server situs SPOJ. B. Uji Coba Kebenaran Uji coba dilakukan dengan memberi masukan ke program dengan data masukan yang dapat direpresentasikan menjadi graf sesuai pada Gambar 4. Pada graf di Gambar 4, jalur keempat yang ditemukan oleh program dari verteks 1 menuju verteks 5 adalah jalur dengan rangkaian verteks {1,3,4,5}. Setelah dianalisa secara manual, dari graf tersebut terdapat empat jalur yang berbeda dari verteks 1 menuju verteks 5, yaitu dengan urtan π1 = {1,3,5}, π2 = {1,2,4,5}, π3 = {1,2,5}, dan π4 = {1,3,4,5}. Karena hasil keluaran program sama dengan verteks-verteks penyusun π4 dari graf pada Gambar 4, maka terbukti bahwa hasil implementasi program dalam artikel ini adalah benar.
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
4
Gambar. 5. Hasil pengujian pada situs SPOJ
Gambar. 7. Grafik hasil uji coba kecepatan pada graf acak
Gambar. 6. Grafik hasil uji kecepatan pada situs SPOJ No. Tabel 2. Hasil uji coba pada graf acak No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
π 100
500
1000
5000
Judul Graf A B C D A B C D A B C D A B C D
Waktu (detik) 0,024 0,035 0,588 94,856 0,115 0,161 3,030 448,342 0,227 0,328 6,165 888,671 1,114 1,562 32,113 4486,230
C. Uji Coba pada Situs Penilaian Daring SPOJ Pada uji coba ini, digunakan bantuan sebuah situs penilaian daring bernama Sphere Online Judge (SPOJ). Uji coba dilakukan dengan menggugah kode sumber hasil implementasi artikel ini pada salah satu soal di SPOJ yang berjudul "Kth Shortest Path" [6]. Pemilihan soal "Kth Shortest Path" dilakukan karena deskripsi soal sesuai dengan permasalahan pada artikel ini, yaitu pencarian k jalur sederhana terpendek pada graf. Pengujian dilakukan beberapa kali untuk mendapat rata-rata waktu eksekusi program pada soal "Kth Shortest Path". Pada Gambar 5 ditunjukkan hasil salah satu pengujian pada situs SPOJ yang juga membuktikan kebenaran hasil implementasi algoritma pada artikel. Data graf-graf yang digunakan pada uji coba ini memiliki batasan jumlah verteks sebanyak 50 buah, jumlah edge sebanyak 2450 buah, dan jumlah jalur maksimal yang dicari sebanyak 200 jalur. Pada Gambar 6 ditunjukkan grafik hasil beberapa kali uji coba pada situs SPOJ. Dari grafik pada Gambar 6, didapatkan rata-rata waktu eksekusi program pada situs SPOJ sebesar 2,76 detik dengan standar deviasi sebesar 0,3 detik.
1 2 3 4 5 6 7 8
Tabel 3. Hasil uji coba pada algoritma naif Waktu Judul Graf π (detik) A 0.296 100 B 0.561 A 1.294 500 B 3.104 A 2.62 1000 B 6.24 A 14.461 5000 B 30.576
D. Uji Coba pada Graf Acak Pada uji coba ini dilakukan beberapa kali pengujian dengan data masukan berupa graf dengan jumlah verteks dan edge yang berbeda untuk masing-masing pengujian. Uji coba ini bertujuan mengetahui perbedaan waktu eksekusi program dengan berdasar pada perbedaan jumlah verteks, jumlah edge, dan urutan jalur (π) yang dicari pada graf. Pada Tabel 2 ditunjukkan hasil uji coba yang dilakukan untuk masing-masing graf pada Tabel 1 dengan pengelompokan berdasarkan urutan jalur yang dicari dan graf yang berbeda. Kemudian pada Gambar 7 ditunjukkan grafik ilustrasi hasil uji coba dari Tabel 2 dengan sumbu-x menunjukkan urutan jalur yang dicari dan sumbu-y menunjukkan nilai waktu dalam detik dengan skala nilai logaritma berbasis 10. E. Uji Coba Perbandingan Algoritma Pada uji coba ini dilakukan perbandingan kecepatan eksekusi antara program hasil implementasi artikel ini dan algoritma naif yang lebih dahulu ditemukan, dengan data uji yang digunakan adalah data graf A dan B pada Tabel 1. Algoritma naif yang digunakan sebagai pembanding pada uji coba ini adalah modifikasi dari algoritma Dijkstra untuk mencari jalur sederhana terpendek ke-π. Hasil uji coba pada algoritma naif dapat dilihat pada Tabel 3. Pada Gambar 8 ditunjukkan grafik hasil perbandingan uji coba pada algoritma dalam artikel ini yang mengacu pada Tabel 2 dan hasil uji coba pada algoritma modifikasi dari algoritma Dijkstra yang ditunjukkan pada Tabel 3. Pada grafik di Gambar 8, sumbu-x menunjukkan urutan jalur yang dicari
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
Gambar. 8. Grafik perbandingan algoritma
dan sumbu-y menunjukkan nilai waktu dalam detik dengan skala nilai logaritma berbasis 10, dengan "TA" merupakan hasil algoritma dalam artikel ini dan "Naif" merupakan hasil algoritma modifikasi dari algoritma Dijkstra. IV. KESIMPULAN Berdasarkan hasil uji coba yang telah dilakukan, terdapat tiga kesimpulan yang bisa diambil, yaitu: 1. Pada hasil uji coba kebenaran dan hasil uji coba pada situs SPOJ, ditunjukkan bahwa jalur yang dihasilkan program sesuai dengan jalur yang diminta pada permasalahan. Hal tersebut membuktikan bahwa hasil implementasi algoritma pencarian π jalur sederhana terpendek pada artikel ini dapat menghasilkan keluaran yang benar. 2. Pertumbuhan waktu eksekusi program bersifat kuadratik dengan kompleksitas Ξ(ππ(π + π log π) pada π buah verteks, π buah edge, dan π jalur yang dicari. 3. Algoritma pada artikel ini lebih efisien daripada algoritma naif yang telah ditemukan sebelumnya Pada artikel ini ini, struktur heap yang digunakan untuk menyimpan kandidat jalur merupakan struktur heap pada pustaka standar C++, yaitu menggunakan struktur heap biner. Kemudian untuk pengembangan, dapat dilakukan studi mengenai struktur heap Fibonacci beserta implementasinya pada program, untuk mempercepat pemrosesan kandidat jalur. DAFTAR PUSTAKA [1] T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein, Introduction to Algorithms, 2nd ed., The MIT Press, 2001. [2] E. d. Q. V. Martins and M. M. B. Pascoal, "A New Implementation of Yen's Ranking Loopless Paths Algorithm," 40R: A Quartery Journal of Operations Research, vol. 1, no. 2, pp. 121-133, 2003. [3] D. Eppstein, "Finding the k Shortest Paths," SIAM Journal on Computing, vol. 5, pp. 83-89, 1998. [4] E. d. Q. V. Martins, M. M. B. Pascoal and J. L. E. Santos, "Deviation Algorithms for Ranking Shortest Paths," International Journal of Foundations of Computer Science, vol. 10, no. 3, pp. 247-261, 1999. [5] J. Y. Yen, "Finding the K Shortest Loopless Paths in a Network," Management Science, vol. 17, no. 11, pp. 712-716, 1971. [6] Sphere Research Labs, "SPOJ - Problem MKTHPATH," 2013. [Online]. Available: http://www.spoj.com/problems/MKTHPATH/.
5