Peudocode algoritma beserta penjelasannya
1.Algoritma Djikstra
Dalam graf berbobot, kita sering kali ingin mencari sebuah lintasan terpendek (yakni, sebuah lintasan yang mempunyai panjang minimum) antara dua verteks yang diketahui. Untuk graf berbobot tersambung, teknik pencarian lintasan terpendek diberikan oleh Algoritma Dijkstra. Algoritma Dijkstra melibatkan pemasangan label pada verteks.
Algoritma Dijkstra, dinamai menurut penemunya, Edsger Dijkstra, adalah sebuah algoritma rakus (greedy algorithm) dalam memecahkan permasalahan jarak terpendek (shortest path problem) untuk sebuah graf berarah (directed graph) dengan bobot-bobot sisi (edge weights) yang bernilai tak-negatif.
Kita misalkan L(v) menyatakan label dari verteks v. Pada setiap pembahasan, beberapa verteks mempunyai label sementara dan yang lain mempunyai label tetap. Kita misalkan T menyatakan himpunan verteks yang mempunyai label sementara. Dalam menggambarkan algoritma tersebut, kita akan melingkari verteks-verteks yang mempunyai label tetap. Selanjutnya akan kita tunjukkan bahwa jika L(v) adalah label tetap dari verteks v, maka L(v) merupakan panjang lintasan terpendek dari a ke v. Sebelumnya semua verteks mempunyai label sementara. Setiap iterasi dari algoritma tersebut mengubah status satu label dari sementara ke tetap; sehingga kita dapat mengakhiri algoritma tersebut jika z menerima sebuah label tetap. Pada bagian ini L(z) merupakan panjang lintasan terpendek dari a ke z
Algoritma ini mencari panjang lintasan terpendek dari verteks a ke z dalam sebuah graf berbobot tersambung. Bobot dari rusuk (i,j) adalah w(i,j)>0 dan label verteks x adalah L(x). Hasilnya, L(z) merupakan panjang lintasan terpendek dari a ke z.
Masukan : Sebuah graf berbobot tersambung dengan bobot positif. Verteks a sampai z.
Keluaran : L(z), panjang lintasan terpendek dari a ke z.
1. procedure dijkstra (w,a,z,L)
2. L(a) := 0
3. for semua verteks x
a do
4. L(x) := 
5. T := himpunan semua verteks
6. // T adalah himpunan verteks yang panjang terpendeknya dari a belum ditemukan
7. while z
T do
8. begin
9. pilih v
T dengan minimum L(v)
10. T:=T-{v}
11. for setiap x
T di samping v do
12. L(x):=min{L(x), L(v)+w(v,x)}
13. end
14. end dijkstra
Contoh
Carilah panjang lintasan terpendek dari verteks a ke z dalam graf berbobot tersambung berikut.
Penyelesaian :
Kita akan menerapkan Algoritma Dijkstra. Hasil pelaksanaan baris 2-4 dari Algoritma 10.1 adalah L(a) = 0, L(b) = L(c) = L(d) = L(e) = L(f) = L(g) = L(z) =
. Pada baris 7, z tidak dilingkari. Kita lanjutkan ke baris 9, di mana kita memilih verteks a, verteks tak dilingkari dengan label terkecil, dan melingkarinya. Pada baris 11 dan 12 kita perbarui setiap verteks tak terlinkari, b dan f, yang berdekatan dengan a. Kita dapatlkan label-label baru
L(b) = min{
, 0+2} = 2, L(f) = min{
, 0+1} = 1.
Sampai pada bagian ini, kita kembali ke baris 7.
Karena z tak dilingkari, kita lanjutkan ke baris 9, di mana kita memilih verteks f, verteks tak dilingkari dengan label terkecil, dan melingkarinya. Pada baris 12 dan 13 kita perbarui setiap label dari verteks tak dilingkari, d dan g, yang berdekatan dengan f. Kita dapatkan label-label baru
L(d) = min{
, 1+3} = 4, L(f) = min{
, 1+5} = 6.
Sampai pada bagian ini, kita kembali ke baris 7. Demikian seterusnya dan pada akhir algoritma, z dilabeli 5, menyatakan panjang lintasan terpendek dari a ke z adalah 5. Sebuah lintasan terpendek diberikan oleh (a,b,c,z).
2.Algoritma BubleSort … continue reading this entry.