Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek
Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek
SKRIPSI
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2009
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
SKRIPSI
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2009
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
PERSETUJUAN
Judul
Kategori
Nama
Nomor Induk Mahasiswa
Program Studi
Departemen
Fakultas
Komisi Pembimbing
Pembimbing 2,
Pembimbing1,
Drs. Sawaluddin,M.IT.
NIP.132206398
Diketahui/Disetujui oleh
Departemen Matematika FMIPA USU
Ketua
Dr.Saib Suwilo,M.Sc.
NIP.131796149
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
PERNYATAAN
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
PENGHARGAAN
Puji dan syukur penulis panjatkan kehadirat Tuhan Yang Maha Pemurah dan Maha
Penyayang, dengan limpahan rahmat dan karunia-Nya skripsi ini berhasil diselesaikan
dalam waktu yang telah ditetapkan.
Ucapan terimakasih saya sampaikan kepada Bapak Drs. Syawaluddin, M.IT dan
Bapak Drs. Marwan Harahap, M.Eng, selaku pembimbing pada penyelesaian skripsi
ini yang telah memberikan panduan dan penuh kepercayaan kepada saya untuk
menyempurnakan skripsi ini. Panduan ringkas, padat dan profesional telah diberikan
kepada saya agar penulis dapat menyelesaikan tugas ini. Ucapan terima kasih juga
ditujukan kepada Ketua dan Sekretaris Departemen Dr. Saib Suwilo, M.Sc. dan
Bapak Drs. Henri Rani Sitepu, M.Si., Dekan dan Pembantu Dekan Fakultas
Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua dosen
pada Departemen Matematika FMIPA USU, Pegawai di FMIPA USU, rekan-rekan
kuliah. Akhirnya tidak terlupakan kepada bapak, ibu dan semua ahli keluarga yang
selama ini memberikan bantuan dan dorongan yang diperlukan. Semoga Tuhan Yang
Maha Esa membalasnya.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
ABSTRAK
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
ABSTRACT
Dijkstra Algorithms and Greedy Algorithms is an algorithms to find the shortest path
from a vertex to the another one in a weighted graph, where the distance between the
vertex is the weight from each edge or arc of it. Dijkstra Algorithms and Greedy is a
algorithm which every step of the process takes a edge or arc that has the minimum
value weight that connects a vertex which has been chosen with another vertex that
has not been chosen, and the implementation would use Visual Basic 6.0
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
DAFTAR ISI
Halaman
Persetujuan
Pernyataan
Penghargaan
Abstrak
Abstract
Daftar Isi
Daftar Tabel
Daftar Gambar
Bab 1
Pendahuluan
1.1 Latar Belakang
1.2 Perumusan Masalah
1.3 Pembatasan Masalah
1.4 Tujuan Penelitian
1.5 Kontribusi Penelitian
1.6 Metode Penelitian
1.7 Tinjauan Pustaka
Bab 2
Landasan Teori
2.1 Teori Dasar Graph
2.1.1 Graph Berarah
2.1.2 Graph Tak Berarah
2.1.3 Graph Berbobot
2.1.4 Refrentasi Graph Dalam Matriks
2.2 Lintasan ( Path )
2.2.1 Path Minimum
2.2.2 Lintasan Terpendek ( Shortest Path )
2.3 Algoritma Greedy
2.3.1 Cara Kerja Algoritma Greedy
2.3.2 Pseudocode Algoritma Greedy
2.4 Algoitma Dijkstra
2.4.1 Sejarah Algoritma Dijkstra
2.4.2 Cara Kerja Algoritma Dijkstra
ii
iii
iv
v
vi
vii
ix
x
1
1
2
2
3
3
3
4
6
6
6
8
9
10
11
12
14
15
17
18
19
19
20
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
9
Bab 3
Pembahasan
3.1 Implementasi Algoritma Greedy
3.1.1 Pemeriksaan Verteks dan Lintasan Pertama
3.1.2 Input Graph
3.1.3 Proses Graph
3.2 Prosedure Algoritma Greedy
3.3 Flowchart Algoritma Greedy
3.4 Implementasi Algoritma Dijkstra
3.4.1 Input Graph
3.4.2 Proses Graph
3.5 Prosedure Algoritma Dijkstra
3.6 Flowchart Algoritma Dijkstra
3.7 Flowchart Program
3.7.1 Halaman Utama
3.7.2 Halaman Komputasi
3.7.3 Halaman Hasil
3.7.4 Kebutuhan Perangkat
23
23
23
25
27
29
31
32
42
44
46
48
49
50
51
55
57
Bab 4
59
59
59
Daftar Pustaka
60
61
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
10
DAFTAR TABEL
Halaman
Tabel 3.1 Hasil Iterasi ke 1
Tabel 3.2 Hasil Iterasi ke 2
Tabel 3.3 Hasil Iterasi ke 3
Tabel 3.4 Hasil Iterasi ke 4
Tabel 3.5 Hasil Iterasi ke 5
Tabel 3.6 Hasil Iterasi ke 6
Tabel 3.7 Hasil Iterasi ke 7
Tabel 3.8 Hasil Iterasi ke 8
Tabel 3.9 Hasil Iterasi ke 9
Tabel 3.10 Hasil Iterasi ke 10
Tabel 3.11 Hasil dari seluruh tabel
Tabel 3.12 Beda Jarak Lintasan Terpendek Algoritma Greedy
dan Dijkstra
33
34
34
35
35
36
37
37
38
39
39
57
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
11
DAFTAR GAMBAR
Halaman
Gambar 2.1 Graph Berarah atau Digraph
Gambar 2.2 Graph Berarah
Gambar 2.3 Graph Tak Berarah
Gambar 2.4 Graph Berarah Berbobot
Gambar 2.5 Graph Tidak Berarah dan Tidak Berbobot
Gambar 2.6 Graph Dengan 4 Buah Verteks
Gambar 2.7 Graph Dengan 6 Verteks dan 10 Edge
Gambar 2.8 Shortest Path(Garis Tebal)
Gambar 3.1 Graph Untuk Algoritma Greedy
Gambar 3.2 Lintasan 1 Algoritma Greedy
Gambar 3.3 Lintasan 2 Algoritma Greedy
Gambar 3.4 Lintasan 3 Algoritma Greedy
Gambar 3.5 Flowchart Algoritma Greedy
Gambar 3.6 Graph Untuk Algoritma Dijkstra
Gambar 3.7 Node Terpilih Pada Iterasi ke 1
Gambar 3.8 Node Terpilih Pada Iterasi ke 2
Gambar 3.9 Node Terpilih Pada Iterasi ke 3
Gambar 3.10 Node Terpilih Pada Iterasi ke 4
Gambar 3.11 Node Terpilih Pada Iterasi ke 5
Gambar 3.12 Node Terpilih Pada Iterasi ke 6
Gambar 3.13 Node Terpilih Pada Iterasi ke 7
Gambar 3.14 Node Terpilih Pada Iterasi ke 8
Gambar 3.15 Node Terpilih Pada Iterasi ke 9
Gambar 3.16 Node Terpilih Pada Iterasi ke 10
Gambar 3.17 Flowchart Algoritma Dijkstra
Gambar 3.18 Flowchart Aplikasi Algoritma Greedy dan Dijkstra
Gambar 3.19 Perancangan Diagram Halaman Utama
Gambar 3.20 Tampilan Output Halaman Utama
Gambar 3.21 Perancangan Diagram Halaman Komputasi
Gambar 3.22 Tampilan Menu Perancangan Lintasan Terpendek
Gambar 3.23 Tampilan Menu Peta
Gambar 3.24 Tampilan Menu Graph
Gambar 3.25 Tampilan Menu Cari Lintasan Terpendek
Gambar 3.26 Tampilan Menu Editor Titik
7
8
9
9
10
12
13
15
23
24
24
25
31
32
33
34
34
35
36
36
37
38
38
39
48
49
50
50
51
51
52
52
53
53
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
12
Gambar 3.27 Tampilan Menu Editor Jalan
Gambar 3.28 Tampilan Menu Editor Hapus
Gambar 3.29 Tampilan Menu Editor Tambah Caption
Gambar 3.30 Implementasi Form Graph Algoritma Dijkstra
Gambar 3.31 Implementasi Form Hasil Komputasi Algoritma Dijkstra
Gambar 3.32 Implementasi Form Graph Algoritma Greedy
Gambar 3.33 Implementasi Form Hasil Komputasi Algoritma Greedy
Gambar 3.34 Grafik Lama Proses Pencarian Lintasan Terpendek Algoritma
Greedy dan Dijkstra
BAB 1
54
54
55
55
56
56
56
58
PENDAHULUAN
Dalam kehidupan, sering dilakukan perjalanan dari suatu tempat atau kota ke
tempat yang lain dengan mempertimbangkan efisiensi, waktu dan biaya sehingga
diperlukan ketepatan dalam menentukan jalur terpendek antar suatu kota. Hasil
penentuan jalur terpendek akan menjadi pertimbangan dalam pengambilan keputusan
untuk menunjukkan jalur yang ditempuh. Hasil yang didapatkan juga membutuhkan
kecepatan dan keakuratan dengan bantuan komputer.
13
Algoritma merupakan kumpulan perintah untuk menyelesaikan suatu masalah.
Perintah-perintahnya dapat diterjemahkan secara bertahap dari awal hingga akhir.
Masalah tersebut dapat berupa apapun dengan catatan untuk setiap masalah, memiliki
kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma.
lintasan terpendek
dalam hal ini adalah algoritma Greedy dan algoritma Dijkstra, algoritma Dijkstra
merupakan algoritma yang paling terkenal untuk mencari lintasan terpendek yang
diterapkan pada graph berarah dan berbobot, di mana jarak antar verteks adalah bobot
dari tiap arc pada graph tersebut. Selain algoritma Dijkstra, algoritma Greedy
merupakan salah satu metode untuk memecahkan masalah optimasi, juga merupakan
program yang dapat memecahkan masalah langkah demi langkah, yang pada setiap
langkahnya mengambil pilihan yang terbaik yang diperoleh saat itu tanpa
memperhatikan konsekuensi ke depannya dengan gagasan dasar adalah membangun
solusi besar diatas solusi kecil.
Perumusan masalah yang akan diteliti dalam tulisan ini adalah bagaimana
mengimplementasikan algoritma Greedy dan algoritma Dijkstra sehingga diperoleh
algoritma yang tepat dan akurat untuk menyelesaikan masalah lintasan terpendek.
1. Algoritma
Greedy
dan
Dijkstra
yang
digunakan
dibatasi
pada
permasalahan shortest path saja, dengan input graph yang terdiri dari
jumlah titik, nama dan koordinat titik. Letak titik dapat dibangkitkan
secara acak maupun manual.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
14
2. Bobot antar titik yang ditentukan hanyalah bobot jarak. Dengan
mengabaikan bobot-bobot lainnya. Sehingga jalur terpendek berdasarkan
jarak terpendek antar titik.
3. Keluaran yang dihasilkan adalah hasil dari algoritma Greedy dan Dijkstra
yang diimplementasikan dalam suatu program sederhana dengan
menggunakan aplikasi Visual Basic 6.0
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
15
3. Melakukan
analisa
untuk
membandingkan
kinerja
setiap
algoritma
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
16
Yeni Kurniasari (2006) dalam makalahnya menguraikan algoritma Greedy
merupakan metode untuk menemukan solusi optimum dalam persoalan optimasi
dengan solusi langkah perlangkah sebagai berikut:
1. Terdapat banyak pilihan yang perlu dikembangkan pada setiap langkah solusi.
Oleh karena itu, pada setiap langkah harus dibuat keputusan yang terbaik dalam
menentukan pilihan. Keputusan yang telah diambil pada suatu langkah tidak
dapat diubah lagi pada langkah selanjutnya.
2.
pada setiap langkah yang diambil tidak memikirkan konsekuensi ke depan, Greedy
tidak beroperasi secara menyeluruh terhadap semua alternatif solusi yang ada serta
sebagian masalah Greedy tidak selalu berhasil memberikan solusi yang benar-benar
optimum tapi memberikan solusi yang mendekati nilai optimum.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
17
BAB 2
LANDASAN TEORI
Berdasarkan orientasi arah pada sisi, graph dapat dibedakan atas dua jenis yaitu
(Rinaldi Munir, 2006 hal: 294):
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
18
Pada graph tak berarah (undirected graph) elemen dari E disebut dengan edge,
sedangkan pada graph berarah (directed graph) elemen dari E(A) disebut dengan arc.
Graph berarah G terdiri dari suatu himpunan V dari verteks-verteks dan suatu
himpunan E(A) dari arc sedemikian rupa sehingga setiap arc a A menghubungkan
pasangan verteks terurut. Jika terdapat sebuah arc a yang menghubungkan pasangan
terurut (v,w) dari verteks-verteks, maka dapat ditulis dengan a=(v,w), yang
menyatakan sebuah arc dari v ke w.
v1
v4
a4
a1
a5
v5
a3
a6
v2
a2
v3
Derajat luar dari v, (outdeg (v)) adalah jumlah arc yang berawal pada v, dan derajat
dalam dari v (indeg (v)) adalah jumlah arc yang berakhir di v.Karena setiap arc mulai
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
19
dan berakhir pada suatu verteks, maka jumlah derajat-dalam dan jumlah derajat-luar
harus sama dengan n, yaitu jumlah arc pada G.
Sumber (source) adalah sebuah verteks v di G yang mempunyai derajat-luar positif
dan derajat-dalam nol. Sedangkan, tujuan (sink) adalah verteks v di G yang
mempunyai derajat-dalam positif tetapi derajat-luar nol.
Verteks
Derajat-dalam (indegree)
Derajat-luar (outdegree)
Jumlah derajat dalam dan jumlah derajat luar sama dengan 12 yaitu jumlah busur.
Graph pada Gambar 2.2 verteks A adalah sumber (source) karena arc-nya berawal
pada A tetapi tidak berakhir di A. Sedangkan C dan D adalah verteks tujuan (sink)
karena arc-nya berakhir di C dan di D tetapi tidak berawal di verteks itu.
Graph tak berarah G terdiri dari suatu himpunan V dari verteks-verteks dan suatu
himpunan E dari edge-edge sedemikian rupa sehingga setiap sisi e E dikaitkan
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
20
dengan pasangan verteks tak terurut. Jika terdapat sebuah edge e yang
menghubungkan verteks v dan w, maka dapat dituliskan dengan e = (v,w) atau e =
(w,v) yang menyatakan sebuah edge antara v dan w.
v4
v1
e4
v5
e5
e1
e3
e6
v2
e2
v3
Graph pada Gambar 2.3 adalah graph tak berarah dengan himpunan verteks-verteks
V(G) = {v1, v2, v3, v4, v5} dan himpunan sisi E(G) = {e1, e2, e3, e4, e5, e6} yaitu
pasangan tak terurut dari {(v1, v2), (v2, v3), (v3, v4), (v4, v5), (v5, v2)}.
Dalam memodelkan suatu masalah ke dalam graph, ada informasi yang ditambahkan
pada arc graph. Misalnya pada graph yang menggambarkan peta jalan raya antara
kota-kota, dapat ditambahkan sebuah bilangan pada setiap arc untuk menunjukkan
jarak antara kedua kota yang dihubungkan oleh arc tersebut.
Graph berbobot (weighted graph) adalah suatu graph tanpa arc paralel dimana setiap
arc-nya berhubungan dengan suatu bilangan riil tak negatif yang menyatakan bobot
arc (w(a)) tersebut (Jong Jek Siang, 2002, hal: 262).
v2
5
2
4
v1
2
3
v3
2
4
v5
5
v4
21
Graph tidak berarah dan tidak berbobot: tiap busur tidak mempunyai anak panah dan
tidak berbobot.
B
Matriks Adjacency
Misalkan G adalah graph berarah yang terdiri dari n verteks tanpa arc paralel. Matriks
Adjacency pada graph G adalah matriks bujur sangkar n x n, A= (aij) dengan
v1
v
A= 2
v3
v4
v5
v1
v2
v3
v4
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
v5
1
1
0
1
0
Jika graph yang diberikan adalah graph berbobot, maka elemen matriks yang
terhubung antara verteks adalah bobot graph.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
22
2.
Matriks Incidency
e1
e2
e3
v1 1
v2 1
B=
v3 0
v4 0
v5 0
0
1
1
0
0
0
0
1
1
0
e4
0
0
0
1
1
e5 e 6
1
0
0
0
1
0
1
0
0
1
Misalkan v0 dan vn adalah verteks-verteks dalam sebuah graph. Sebuah lintasan dari
v0 ke vn dengan panjang n adalah sebuah barisan berselang-seling dari n+1 verteks dan
n edge yang berawal dengan verteks v0 dan berakhir dengan verteks vn, yang
berbentuk (v0,e1,v1,e2,v2 vn-1,en,vn) dengan edge ei insiden pada verteks vi-1 dan vi
untuk i=1,,n (Richard Johnsonbaugh, 1998, hal: 75).
Jika semua verteks berbeda (setiap edge(arc) dilewati hanya satu kali), maka
suatu lintasan dikatakan sederhana (simple path). Jika sebuah lintasan yang berawal
dan berakhir pada verteks yang sama, v0=vn, maka disebut lintasan tertutup (close
path). Jika verteks awal dan verteks akhir dari lintasan tersebut berbeda, maka sebuah
lintasan dikatakan lintasan terbuka (open path).
23
v2
v1
v3
v4
Gambar 2.6 Graph dengan Empat Buah Verteks
Lintasan v1, v2, v3, v4 = lintasan sederhana dengan panjang lintasan 3(tiga).
Lintasan v1, v2, v3, v4, v1 = lintasan tertutup dengan panjang lintasan 4(empat).
Lintasan v1, v2, v3, v1, v4 = lintasan terbuka dengan panjang lintasan 4(empat).
Jika terdapat lintasan dari vi ke vj, maka suatu graph G dikatakan terhubung.
Pada graph berarah, jika setiap pasang dari verteks vi dan vj terdapat sebuah lintasan
dari vi ke vj dan dari vj ke vi, maka suatu graph dikatakan terhubung kuat (strongly
connected). Jika verteks-verteks dalam sebuah graph sebagai kota-kota dan arc-arc
sebagai jalan, maka sebuah lintasan berhubungan dengan sebuah perjalanan berawal
pada suatu kota, melalui beberapa kota dan berakhir di suatu kota.
2.2.1
Path Minimum
Salah satu aplikasi graph berarah berlabel yang sering dipakai adalah mencari path
terpendek di antara 2 verteks. Jika masalahnya adalah mencari jalur tercepat, maka
path terpendek tetap dapat digunakan dengan cara mengganti nilai edge.
Misalkan G adalah suatu graph, dimana v dan w adalah 2 (dua) verteks dalam G.
Suatu Walk dari v ke w adalah barisan verteks-verteks berhubungan dan edge secara
berselang-seling, diawali dari verteks v dan diakhiri pada verteks w. Walk dengan
panjang n dari v ke w ditulis : v0 e1 v1 e2 v2 vn-1 en vn dengan v0 = v; vn = w; vi-1
dan vi adalah verteks-verteks ujung edge ei.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
24
Path dengan panjang n dari v ke w adalah walk dari v ke w yang semua edge-nya
berbeda. Path dari v ke w dituliskan sebagai v = v0 e1 v1 e2 v2 vn-1 en vn = w dengan
ei ej untuk i j.
e3
e6
v2
e1
v4
e7
e10
e8
e9
v6
v5
a.
b.
25
biaya dan sebagainya. Dalam hal ini bobot harus bernilai positif, pada lain hal
terdapat bobot dengan nilai negatif. Lintasan terpendek dengan verteks awal s dan
verteks tujuan t didefinisikan sebagai lintasan terpendek dari s ke t dengan bobot
minimum dan berupa lintasan sederhana (simple path).
Dalam beberapa hal, panjang sebenarnya mewakili biaya atau beberapa nilai
lainnya. Panjang dari lintasan adalah menentukan panjang jumlah dari masing-masing
edge(arc) yang terdiri dari lintasan. Untuk verteks s dan t dalam G, ada beberapa
lintasan dari s ke t. Masalah lintasan terpendek meliputi pencarian lintasan dari s ke t
yang mempunyai lintasan terpendek dengan bobot terkecil.
Lintasan terpendek antara 2(dua) verteks dari s ke t dalam jaringan adalah lintasan
graph berarah sederhana dari s ke t dengan sifat dimana tidak ada lintasan lain yang
memiliki nilai terendah.
2 X1
1
2
2
X2
3
X3
X5 4
X4
5
X8
26
1 X6
3
5
Pada Gambar 2.8 dapat dilihat bahwa setiap arc terletak pada path-path dari titik 1 ke
titik 5. Lintasan terpendek dari verteks pada graph Gambar 2.8 adalah P = {1 4, 4
5} dengan kapasitas 4.
2.3
Algoritma Greedy
Algoritma Greedy adalah algoritma yang memecahkan masalah langkah demi langkah
dan merupakan salah satu metode dalam masalah optimasi.
Algoritma Greedy membentuk solusi langkah per langkah sebagai berikut:
1. Terdapat banyak pilihan yang perlu dieksplorasi pada setiap langkah solusi.
Oleh karena itu, pada setiap langkah harus dibuat keputusan yang terbaik dalam
menentukan pilihan. Keputusan yang telah diambil pada suatu langkah tidak
dapat diubah lagi pada langkah selanjutnya.
2.
Algoritma Greedy didasarkan pada pemindahan edge(arc) per edge(arc) dan pada
setiap langkah yang diambil tidak memikirkan konsekuensi ke depan, Greedy tidak
beroperasi secara menyeluruh terhadap semua alternatif solusi yang ada serta sebagian
masalah Greedy tidak selalu berhasil memberikan solusi yang benar-benar optimum
tapi pasti memberikan solusi yang mendekati nilai optimum.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
27
1.
Himpunan kandidat.
Himpunan ini berisi elemen-elemen yang memiliki peluang untuk pembentuk
solusi. Pada persoalan lintasan terpendek dalam graph, himpunan kandidat ini
adalah himpunan simpul dari graph tersebut.
2.
Himpunan solusi.
Himpunan ini berisi solusi dari permasalahan yang diselesaikan dan
elemennya terdiri dari elemen dalam himpunan kandidat, namun tidak
semuanya atau dengan kata lain himpunan solusi ini adalah bagian dari
himpunan kandidat.
3.
Fungsi seleksi.
Fungsi yang
untuk menghasilkan solusi optimal. Kandidat yang sudah dipilih pada suatu
langkah tidak pernah dipertimbangkan lagi pada langkah selanjutnya.
4.
Fungsi kelayakan
Fungsi yang memeriksa apakah suatu kandidat yang telah dipilih (diseleksi)
dapat memberikan solusi yang layak.
5.
Fungsi obyektif
Fungsi yang memaksimumkan atau meminimumkan nilai solusi. Tujuannya
adalah memilih satu saja solusi terbaik dari masing-masing anggota himpunan
solusi.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
28
Diberikan sebuah sebuah graph berbobot G(V,E). Tentukan lintasan terpendek dari
verteks awal a, ke setiap verteks lainnya di G. Asumsi bahwa bobot semua edge(arc)
bernilai positif. Algoritma Greedy untuk
(ii)
(iii)
3. Dengan cara yang sama, ulangi langkah (2) untuk menentukan lintasan
terpendek berikutnya.
Deklarasi
x: kandidat;
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
29
Algoritma;
S{} { inisialisasi S dengan kosong}
While(belum SOLUSI(S)) and (C= {}) do
X SELEKSI(C); {pilih kandidat dari C }
C C {x}
If LAYAK(S U {x} then
SS U {x}
Endif
Endwhile
{SOLUSI(S) sudah diperoleh or C = {} }
Analisa:
Algoritma Dijkstra
30
adalah bilangan positif jadi tidak dapat dilalui oleh node negatif, namun jika terjadi
demikian, maka penyelesaian yang diberikan adalah infiniti.
himpunan
verteks
yang
mempunyai
label
sementara.
Dalam
1.
Pada awalnya pilih node dengan bobot yang terendah dari node yang belum
terpilih, diinisialisasikan dengan 0 dan yang sudah terpilih diinisialisasikan
dengan 1.
2.
Bentuk tabel yang terdiri dari node, status, bobot dan predecessor. Lengkapi
kolom bobot yang diperoleh dari jarak node sumber ke semua node yang
langsung terhubung dengan node sumber tersebut.
3.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
31
4.
Tetapkan node terpilih dengan lebel permanen dan perbaharui node yang
langsung terhubung.
5.
Tentukan node sementara yang terhubung pada node yang sudah terpilih
sebelumnya dan merupakan bobot terkecil dilihat dari tabel dan tentukan sebagai
node terpilih berikutnya.
6.
Apakah node yang terpilih merupakan node tujuan? Jika ya, maka kumpulan
node terpilih atau predecessor merupakan rangakaian yang menunjukkan lintasan
terpendek.
7.
32
Cari j sedemikian sehingga sj=0
dan
dj = min {d1,d2,...,dn}
sj 1 { simpul j sudah terpilih}
perbarui d, untuk i = 1,2,3,s.d.n dengan:
di(baru) = min{di(lama,dj+ mji}
Jika menggunakan algoritma Dijkstra untuk menentukan jalur terpendek dari suatu
graph, maka akan menemukan jalur yang terbaik, karena pada waktu penentuan jalur
yang akan dipilih, akan dianalisis bobot dari node yang belum terpilih, lalu dipilih
node dengan bobot yang terkecil. Jika ternyata ada bobot yang lebih kecil melalui
node tertentu, maka bobot akan dapat berubah. Algoritma Dijkstra akan berhenti
ketika semua node sudah terpilih, dan dengan algoritma Dijkstra ini dapat
menemukan jarak terpendek dari seluruh node, tidak hanya untuk node dari asal dan
tujuan tertentu saja.
Algoritma Dijkstra menggunakan waktu sebesar O(V*logV+E) di mana V dan E
adalah banyaknya verteks dan arc. Kompleksitas algoritma Dijkstra adalah O(n2).
Sehingga untuk mencari semua pasangan verteks terpendek, total waktu asimptotik
komputasinya adalah: T(n)=n.O(n2)=O(n3), algoritma Dijktra lebih menguntungkan
dari sisi running time.
BAB 3
PEMBAHASAN
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
33
Implementasi algoritma Greedy dirancang dalam bahasa pemograman Visual Basic
6.0. Berikut adalah contoh algoritma Greedy.
1. Pemeriksaan verteks dan lintasan pertama
2. Input Graph
3. Proses Graph
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
34
Gambar 3.2 Lintasan 1 Algoritma Greedy
Proses input graph dilakukan dengan cara menggambar titik dan jalan yang
menghubungkan setiap titik pada halaman graph. Selanjutnya adalah membuat
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
35
caption dari setiap titik yang akan menjadi nama titik tersebut dan caption pada jalan
akan menjadi jarak antara titik yang satu dengan yang lainnya.
1.
2.
3.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
36
4.
5.
6.
37
MsgBox "Two objects should be selected!"
End If
End Sub
Data graph yang telah diinput pada form graph selanjutnya diproses untuk
mendapatkan matriks jarak dari graph tersebut. Berikut prosedure pada proses graph:
Private Sub cmdCalcData_Click()
Dim i As Integer
Dim j As Integer
Dim toIndex As Integer
flxMap.Rows = frmPeta.theBlockCollection.Count + 1
flxMap.Cols = frmPeta.theBlockCollection.Count + 1
If frmPeta.theBlockCollection.Count > 0 Then
flxMap.FixedRows = 1
flxMap.FixedCols = 1
End If
For i = 0 To flxMap.Cols - 1
flxMap.ColWidth(i) = 530
Next i
For i = 1 To frmPeta.theBlockCollection.Count
flxMap.row = i
flxMap.col = 0
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = 0
flxMap.col = i
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = i
For j = 1 To flxMap.Cols - 1
flxMap.TextMatrix(i, j) = "0"
flxMap.col = j
flxMap.CellForeColor = vbBlack
flxMap.CellFontBold = False
Next j
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
38
For j = 1 To frmPeta.theLineCollection.Count
If
frmPeta.theLineCollection(j).sFrom
frmPeta.theBlockCollection(i).TagID Then
toIndex
frmPeta.theBlockCollection.getIndexFromTag(frmPeta.theLineCollection(
j).sTo)
flxMap.col = toIndex
flxMap.Text = frmPeta.theLineCollection(j).sCaption
If (flxMap.Text = "") Then flxMap.Text = "1"
flxMap.CellForeColor = vbRed
flxMap.CellFontBold = True
End If
Next j
Next i
ReDim jarak(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
ReDim visib(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
For i = 1 To Me.flxMap.Rows - 1
For j = 1 To Me.flxMap.Cols - 1
jarak(i, j) = flxMap.TextMatrix(i, j)
If jarak(i, j) = 0 Then
visib(i, j) = 0
'
Else
visib(i, j) = Round(1 / jarak(i, j), 2)
End If
Next
Next
End Sub
39
If (src = -1) Or (dest = -1) Then
MsgBox "something wrong!!!"
Exit Sub
End If
Dim ketemu as boolen
Dim CC as integer
Dim Lc() as integer
Dim Ltemp () as integer
LC(1) = src
CC(1)=LC(1)
Counter=1
While ( LC <> null and ketemu <> true ) do
CC(counter)=LC(counter)
LC(1)=0
If CC(countre) <> 0 then
For a = 0 ubound(cc)
{mulai penelusuran semua child}
If cc(a) <> Ltemp then
LC(counter+1)=cc(a)
Ltemp=CC
Endif
endif
LP(ubound+1)=CC(counter+1
if adj(lp(a,b))<> 0 then
ketemu true
endif
Loop
40
Mulai
Tentukan Vs dan Vt
Lintasan
Terpendek
Ditemukan
Vt
Tercapai
Selesai
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
41
2. Proses Graph
Pada algoritma Dijkstra node digunakan, karena algoritma Dijkstra menggunakan
diagram pohon(tree) untuk penentuan jalur lintasan terpendek dan menggunakan
graph yang berarah. Algoritma Dijkstra mencari jarak terpendek dari node asal ke
node terdekatnya, kemudian ke node berikutnya, dan seterusnya. Secara umum
sebelum dilakukan I iterasi, algoritma sudah mengidentifikasi jarak terdekat dari i-1
node terdekatnya. Jika seluruh node berbobot tertentu yang (positif), maka node
terdekat berikutnya dari node asal dapat ditemukan selama node berdekatan dengan
node Ti. Kumpulan node yang berdekatan dengan node di Ti inilah yang merupakan
kandidat dari algoritma Dijkstra untuk memilih node berikutnya dari node asal.
Adapun gambar dari graph yang akan diselesaikan dengan algoritma Dijkstra adalah
sebagai berikut:
42
3. Predecessor (node sumber) dari node A, B, C, D adalah A, karena jarak
dihitung dari node A, sehingga node A disebut sebagai predecessor (node
sumber), sedangkan untuk node F, G, H, I, J diinisialisasi dengan -
dikarenakan tidak ada lintasan (arc) yang langsung menghubungkan dari node
A, sehingga jaraknya tidak ada.
Status
Bobot
Predecessor A
Dari Tabel 3.1 pilih node yang memiliki bobot yang paling kecil dan status nya masih
0, yaitu node B. Untuk itu status node B menjadi 1 dan predecessor-nya masih
tetap A, dan node yang lain predecessor-nya masih sama. Jika node B sudah terpilih,
maka ada perubahan pada bobot node C, di mana awalnya bernilai 8 sekarang menjadi
7. Bobot 8 diperoleh dari node yang langsung bergerak dari A ke C, padahal terdapat
jalur yang lebih pendek yaitu melalui B, dengan bobot 7, sehingga predecessor pada
C menjadi B, karena node B sudah terpilih, selanjutnya diperoleh node E dengan
bobot 4 dan node G dengan bobot 6, predecessor E dan G adalah B, di mana untuk
mencapai node E dan G dari node A bisa melalui node B. Sehingga diperoleh:
Status
Bobot
Predecessor A
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
43
Dari Tabel 3.2 di didapatkan bahwa node D memiliki bobot yang paling kecil,
sehingga statusnya akan berubah menjadi 1 dan predecessor-nya masih tetap A.
Sehingga diperoleh:
Status
Bobot
Predecessor A
Status
Bobot
13
11
Predecessor A
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
44
Dari Tabel 3.4 didapatkan bahwa node G memiliki bobot yang paling kecil, sehingga
statusnya akan berubah menjadi 1, predecessor-nya masih tetap B. Jika node G
sudah terpilih, maka ada perubahan bobot pada node F dengan bobot 13 berubah
menjadi 12 dan predecessor E menjadi G. Sehingga diperoleh:
Status
Bobot
12
11
Predecessor A
Dari Tabel 3.5 didapatkan bahwa node C memiliki bobot yang paling kecil, sehingga
statusnya akan berubah menjadi 1, predecessor-nya masih tetap B dengan bobot 7.
Sehingga diperoleh:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
45
Status
Bobot
12
11
Predecessor A
Dari Tabel 3.6 didapatkan bahwa node J memiliki bobot yang paling kecil, sehingga
statusnya akan berubah menjadi 1 dengan predecessor-nya E. Jika node J sudah
terpilih, maka diperoleh node I dengan bobot 19 yang
Status
Bobot
12
11
19
Predecessor A
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
46
Status
Bobot
12
11
15
Predecessor A
Dari Tabel 3.8 didapatkan bahwa node F memiliki bobot yang paling kecil, sehingga
statusnya akan berubah menjadi 1, predecessor-nya masih tetap G dengan bobot 12.
Sehingga diperoleh:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
47
Tabel 3.9 Hasil Iterasi Ke-9
Node
Status
Bobot
12
11
15
Predecessor A
Status
Bobot
12
11
15
Predecessor A
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
48
Status
Bobot
Predecessor A
Iterasi Ke 2
Node
Status
Bobot
Predecessor A
Iterasi Ke 3
Node
Status
Bobot
Predecessor A
Iterasi Ke 4
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
49
Node
Status
Bobot
13
11
Predecessor A
Iterasi Ke 5
Node
Status
Bobot
12
11
Predecessor A
Iterasi Ke 6
Node
Status
Bobot
12
11
Iterasi Ke 7
Node
Status
Bobot
12
11
19
Predecessor A
Iterasi Ke 8
Node
Status
Bobot
12
11
15
Predecessor A
Iterasi Ke 9
Node
Status
Bobot
12
11
15
Predecessor A
Iterasi Ke 10
Node
Status
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
50
Bobot
Predecessor A
12
11
15
Program akan berhenti karena semua node sudah terpilih. Sehingga akan
menghasilkan jalur terpendek dari node A ke setiap node yang ada. Untuk melihat
jalur mana yang terpilih dapat ditelusuri dari predecessor-nya, Sehingga akan didapat:
A B
:A-B
:2
A C
:A-B-C
:7
A D
:A-D
:3
A E
:A-B-E
:4
A F
:A-B-GF
: 12
AG
:ABG
:6
AH
:ABEH
: 11
AI
:ABEHI
: 15
AJ
:ABE-J
:9
Proses input graph dilakukan dengan cara menggambar titik dan jalan yang
menghubungkan setiap titik pada halaman graph. Selanjutnya adalah membuat
caption dari setiap titik yang akan menjadi nama titik tersebut dan caption pada jalan
akan menjadi jarak antara titik yang satu dengan yang lainnya.
1.
2.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
51
3.
4.
52
Else
MsgBox "Object should be selected!"
End If
End Sub
5.
6.
Data graph yang telah diinput pada form graph selanjutnya diproses untuk
mendapatkan matriks jarak dari graph tersebut. Berikut Prosedure pada proses graph:
Private Sub cmdCalcData_Click()
Dim i As Integer
Dim j As Integer
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
53
Dim toIndex As Integer
flxMap.Rows = frmPeta.theBlockCollection.Count + 1
flxMap.Cols = frmPeta.theBlockCollection.Count + 1
If frmPeta.theBlockCollection.Count > 0 Then
flxMap.FixedRows = 1
flxMap.FixedCols = 1
End If
For i = 0 To flxMap.Cols - 1
flxMap.ColWidth(i) = 530
Next i
For i = 1 To frmPeta.theBlockCollection.Count
flxMap.row = i
flxMap.col = 0
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = 0
flxMap.col = i
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = i
For j = 1 To flxMap.Cols - 1
flxMap.TextMatrix(i, j) = "0"
flxMap.col = j
flxMap.CellForeColor = vbBlack
flxMap.CellFontBold = False
Next j
For j = 1 To frmPeta.theLineCollection.Count
If
frmPeta.theLineCollection(j).sFrom
frmPeta.theBlockCollection(i).TagID Then
toIndex
frmPeta.theBlockCollection.getIndexFromTag(frmPeta.theLineCollection(
j).sTo)
flxMap.col = toIndex
flxMap.Text = frmPeta.theLineCollection(j).sCaption
If (flxMap.Text = "") Then flxMap.Text = "1"
flxMap.CellForeColor = vbRed
flxMap.CellFontBold = True
End If
Next j
Next i
ReDim jarak(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
ReDim visib(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
54
For i = 1 To Me.flxMap.Rows - 1
For j = 1 To Me.flxMap.Cols - 1
jarak(i, j) = flxMap.TextMatrix(i, j)
If jarak(i, j) = 0 Then
visib(i, j) = 0
'
Else
visib(i, j) = Round(1 / jarak(i, j), 2)
End If
Next
Next
End Sub
55
do_search = True
current = src
dist_fc = 0
flxS.TextMatrix(1, current) = "True"
flxS.row = 1
flxS.col = current
flxS.CellForeColor = vbRed
flxS.CellFontBold = True
flxDist.TextMatrix(1, current) = 0
Do While do_search
For i = 1 To MAX - 1
If ((myVl(flxMap.TextMatrix(current, i)) <> 0) And _
(myVl(flxDist.TextMatrix(1,
i))
>
i)
myVl(flxMap.TextMatrix(current, i) + dist_fc)
flxPath.TextMatrix(1, i) = current
End If
Next i
min = INF
For i = 1 To MAX - 1
If ((myVl(flxDist.TextMatrix(1, i)) < min) And (flxS.TextMatrix(1, i)
= "False")) Then
min = myVl(flxDist.TextMatrix(1, i))
current = i
dist_fc = myVl(flxDist.TextMatrix(1, i))
End If
Next i
flxS.TextMatrix(1, current) = "True"
If (min = INF) Then
do_search = False
End If
Loop
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
56
Mulai
Tentukan Vs dan
Vt
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
57
Tidak
Tnode=Vt
Ya
Lintasan terpendek ditemukan
Selesai
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
58
Start
Tampilkan
Form Utama
Tidak
Menu Graph
Ya
Tampilkan
Form Graph
Cari Rute
Terpendek
Ya
Algoritma
Dijstra
Ya
Tidak
Algoritma
Greedy
Ya
Tidak
Tampilkan Hasil
End
Pada halaman utama terdapat beberapa menu antara lain: judul aplikasi, menu utama
dan data graph.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
59
Judu Aplikasi
Menu Utama
Data Graph
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
60
Halaman komputasi adalah halaman untuk input yang dibutuhkan pada saat proses
pencarian jalur terpendek, dan hasil dari komputasi. Gambar 3.21
merupakan
Matriks Jarak
Pilih Algoritma
Titik Awal
Titik Tujuan
Proses
Hasil Komputasi
Pada menu perancangan lintasan terpendek terdiri dari menu: Peta, graph, cari rute
terpendek, dan editor.
61
Untuk menu Graph pada perancangan lintasan terpendek terdiri dari menu: Buka
graph dan simpan graph.
Untuk menu Cari Rute Terpendek pada perancangan lintasan terpendek terdiri dari
tampilan kalkulasi jarak dengan pemilihan algoritma Greedy atau Dijkstra.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
62
Untuk menu Editor pada perancangan lintasan terpendek terdiri dari menu:
63
2. Jalan terdiri dari:
a.
Garis
b.
Panah
Jalan
b.
Titik
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
64
b.
Jalan
Halaman hasil digunakan untuk melihat tampilan hasil dari program aplikasi
pencarian lintasan terpendek yang telah dijalankan. Setelah menu editor dirancang
sesuai dengan kebutuhan maka untuk menu cari rute terpendek akan menampilkan
hasil kalkulasi jarak yang telah diperoleh, kemudian pilih algoritma yang diinginkan
yaitu algoritma Greedy atau Dijkstra, setelah menekan tombol cari rute terpendek
akan diperoleh hasil lintasan yang dilalui dan jarak yang minimum diperoleh.
Tampilan halaman hasil menggunakan algoritma Greedy atau Dijkstra adalah sebagai
berikut:
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
65
Gambar 3.30 Implementasi Form Graph Algoritma Dijkstra
66
Adapun perangkat keras dan perangkat lunak yang digunakan pada saat mplementasi
algoritma Greedy dan algoritma Dijkstra adalah dengan spesifikasi sebagai berikut:
1. Procesessor Pentium IV 1,8D GHz
2. Memory 512 MB
3. Harddisk 40 GB
4. O/S Windows XP
5. Monitor Samsung 17
Dari hasil percobaan yang dilakukan untuk menentukan perbedaan jarak lintasan
terpendek pada algoritma Greedy dan Dijkstra serta untuk melakukan pengujian,
dipilih sejumlah Graph dengan lintasan berbeda-beda yaitu:
Tabel
Beda
Jarak
Lintasan
No.
Nama File
3.12
Greedy
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
Coba 1. tzr
10
13
Coba 2.tzr
12
27
Coba 3.tzr
14
38
Coba 4.tzr
18
54
Dijkstra
10
0
67
Greedy
Gambar 3.34 Grafik Jarak Lintasan Terpendek Algoritma Greedy dan Dijkstra
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
68
BAB 4
4.1 Kesimpulan
Dari penelitian dan hasil implementasi mengenai perbandingan algoritma Greedy dan
Dijkstra berdasarkan jarak lintasannya, algoritma Greedy menghasilkan jarak yang
lebih besar seperti pada file Coba2.tzr jumlah jarak yang diperoleh adalah 27,
sedangkan pada algoritma Dijkstra jarak yang diperoleh adalah 12. Algoritma Greedy
tidak beroperasi secara menyeluruh terhadap semua alternatif fungsi yang ada,
sehingga lintasan terpendek hanya diperoleh dari verteks asal hingga verteks tujuan,
sedangkan algoritma Dijkstra beroperasi secara menyeluruh terhadap semua alternatif
fungsi yang ada, sehingga lintasan terpendek tidak hanya diperoleh dari node sumber
ke node tujuan saja, akan tetapi lintasan terpendek dapat diperoleh dari semua node.
4.2
Saran
Sebagai saran yang ditujukan kepada pembaca yang ingin menentukan lintasan
terpendek dengan menggunakan algoritma Greedy dan Dijkstra, agar dapat
mengembangkan aplikasi ini dan menyelesaikan persoalan lintasan terpendek dalam
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
69
cakupan yang lebih besar dan mengimplementasikannya dengan bahasa pemograman
yang berbeda dan menggunakan algoritma yang berbeda.
DAFTAR PUSTAKA
Chartrand, Gary and Ortrud R. O, 1993. Apllied and Algorithmic Graph Theory,
McGraw. Hill, Inc.
Jek Siang, Jong, 2002. Matematika Diskrit dan Aplikasinya pada Ilmu Komputer,
Yogyakarta, Andi.
Robin J. Wilson and John J. Watkins, 1990. Graphs an Introductory Approach, John
Wiley & Sons, Inc.
Setiadi, Robert, 2008. Algoritma Itu Mudah, Jakarta. PT. Prima Infosarana Media.
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
70
Option Explicit
Dim sFrom As String
Dim sTo As String
Const INF = 32767 ' infinity, so big so far, it should end somewhere
anyway :)
Dim sRESULT(1 To 100) As String
Dim iRES_SIZE As Integer
Private Function TotalJarak(path As String) As Double
Dim x1 As Integer, x2 As Integer
TotalJarak = 0
Dim ArrPath() As String, a As Integer
ArrPath = Split(path, " ")
For a = LBound(ArrPath) To UBound(ArrPath) - 2
If a < UBound(ArrPath) Then
x1 = ArrPath(a)
x2 = ArrPath(a + 1)
TotalJarak = TotalJarak + jarak(x1, x2)
End If
Next
x1 = ArrPath(UBound(ArrPath) - 1)
x2 = ArrPath(LBound(ArrPath))
TotalJarak = TotalJarak + jarak(x1, x2)
End Function
Private Function CariTerpendek(awal As Integer)
'On Error GoTo errhandle
Dim Nc As Integer
Dim s As Integer, a As Integer, b As Integer, l As Integer, k As
Integer, X As Integer, j As Integer, u As
Integer, ndx As Integer
Dim N As Integer, kotadipilih As Integer, i As Integer
Dim M As Integer
Dim p() As Single
Dim totP As Single
Dim Js() As Double
Dim q() As Double
Dim T As Integer
Dim r As Double
Dim kt As String, kt2 As String
Dim temu As Boolean
Dim PanjangJalur() As Double
Dim JlrTerpendek() As Double
Dim btemp()
Dim temp As Double, temp2 As Double
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
71
Dim Hasil() As String
N = UBound(jarak) 'jlh
M = UBound(jarak)
Nc = 1
For a = 1 To N
For b = 1 To N
Tho(a, b) = Tij
Dtho(a, b) = 0
Next
Next
Nc = 1
ReDim JlrTerpendek(Ncmax)
Dim oldtimer As Single
oldtimer = Timer
Do
ReDim Tabu(N, N)
s = 0
l = 0
l = l + 1
For k = 1 To N
Tabu(k, l) = k
Next
s = s + 1
ReDim p(N)
For X = 1 To N - 1
T = X
ReDim Js(N)
For a = 1 To N
If Tabu(a, T) <> 0 Then
Js(Tabu(a, T)) = Js(Tabu(a, T)) + 1
End If
Next
kt = ""
For a = 1 To N
kt = kt & Js(a) & " "
Next
For j = 1 To N
totP = 0
For u = 1 To N
If Not CariTabu(j, u, T) Then
totP = totP + Tho(Tabu(j, T), u) ^ alpa *
visib(Tabu(j, T), u) ^ Beta
End If
Next u
kt = ""
kt2 = ""
For u = 1 To N
If CariTabu(j, u, T) = False Then
p(u) = (Tho(Tabu(j, T), u) ^ alpa * visib(Tabu(j,
T), u) ^ Beta) / totP
Else
p(u) = 0
End If
kt = kt & Format(p(u), "#,##0.000") & "
"
Next
'komulatif
For u = 1 To N
If u = 1 Then
q(u) = p(u)
Else
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
72
q(u) = q(u - 1) + p(u)
End If
kt2 = kt2 & Format(q(u), "#,##0.000") & "
"
Next
'random
ulang_random:
r = Rnd(1)
temu = False
ndx = 1
Do While temu = False
If r < q(ndx) Then
temu = True
kotadipilih = ndx
ElseIf (r > q(ndx)) And (r <= q(ndx + 1)) Then
temu = True
kotadipilih = ndx + 1
End If
ndx = ndx + 1
Loop
Tabu(j, T + 1) = kotadipilih
kt = ""
For u = 1 To T + 1
kt = kt & (Tabu(j, u)) & " "
Next
Hasil(Nc, j) = kt
Next j
T = T + 1
Next
ReDim PanjangJalur(N)
JlrTerpendek(Nc) = 1.79769313486232E+307
temp = 0
For k = 1 To N
temp = HitungLk(k)
PanjangJalur(k) = temp
If temp < JlrTerpendek(Nc) Then
JlrTerpendek(Nc) = temp
End If
Next
For k = 1 To N
PanjangJalur(k) = HitungLk(k)
For s = 1 To N - 1
Dtho(Tabu(k, s), Tabu(k, s + 1)) = _
Dtho(Tabu(k, s), Tabu(k, s + 1)) + visib(Tabu(k, s),
Tabu(k, s + 1)) / PanjangJalur(k)
Next
Next
kt = ""
For i = 1 To N
kt = ""
For k = 1 To N
Tho(i, k) = rho * Tho(i, k) + Dtho(i, k)
kt = kt & Format(Tho(i, k), "#,##0.0000") & " "
Next
Next
Nc = Nc + 1
DoEvents
Loop Until (Nc > Ncmax)
Dim BandingJarak As Double, sk As Integer
BandingJarak = 1.79769313486232E+307
temp = 0
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
73
For a = LBound(Hasil) To UBound(Hasil)
temp = TotalJarak(Hasil(a, awal))
If temp < BandingJarak Then
BandingJarak = temp
sk = a
End If
Next
Private Function konversiHasil(ha As String) As String
makeAllLines_Black
Dim arrHa() As String, Ka As String, a As Integer, sF As String, sT
As String
arrHa() = Split(ha, " ")
'MsgBox frmPeta.theBlockCollection(Int(arrHa(1))).sCaption
For a = LBound(arrHa) To UBound(arrHa) - 1
Ka = Ka & frmPeta.theBlockCollection(Int(arrHa(a))).sCaption & "
- "
' Debug.Print frmPeta.theBlockCollection(Int(arrHa(A))).sCaption
If a = 0 Then
sF = frmPeta.theBlockCollection(Int(arrHa(a))).sCaption
sT = frmPeta.theBlockCollection(Int(arrHa(a))).sCaption
Else
sF = sT
sT = frmPeta.theBlockCollection(Int(arrHa(a))).sCaption
redLINE sF, sT
sF = sT
End If
'
MsgBox Ka
Next
redLINE sF, sT
konversiHasil = Ka
End Function
Private Sub CbAlgoritma_KeyPress(KeyAscii As Integer)
KeyAscii = 0
End Sub
Private Sub cmdCalcData_Click()
Dim i As Integer
Dim j As Integer
Dim toIndex As Integer
flxMap.Rows = frmPeta.theBlockCollection.Count + 1
flxMap.Cols = frmPeta.theBlockCollection.Count + 1
If frmPeta.theBlockCollection.Count > 0 Then
flxMap.FixedRows = 1
flxMap.FixedCols = 1
End If
For i = 0 To flxMap.Cols - 1
flxMap.ColWidth(i) = 530
Next i
For i = 1 To frmPeta.theBlockCollection.Count
flxMap.row = i
flxMap.col = 0
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = 0
flxMap.col = i
flxMap.Text = frmPeta.theBlockCollection(i).sCaption
flxMap.row = i
For j = 1 To flxMap.Cols - 1
flxMap.TextMatrix(i, j) = "0"
flxMap.col = j
flxMap.CellForeColor = vbBlack
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
74
flxMap.CellFontBold = False
Next j
For j = 1 To frmPeta.theLineCollection.Count
If frmPeta.theLineCollection(j).sFrom =
frmPeta.theBlockCollection(i).TagID Then
toIndex =
frmPeta.theBlockCollection.getIndexFromTag(f
rmPeta.theLineCollection(j).sTo)
flxMap.col = toIndex
flxMap.Text = frmPeta.theLineCollection(j).sCaption
If (flxMap.Text = "") Then flxMap.Text = "1"
' don't
allow empty!!!! (for lines with no caption)
flxMap.CellForeColor = vbRed
flxMap.CellFontBold = True
End If
Next j
Next i
'Input Jarak
ReDim jarak(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
ReDim visib(Me.flxMap.Rows - 1, Me.flxMap.Rows - 1)
For i = 1 To Me.flxMap.Rows - 1
For j = 1 To Me.flxMap.Cols - 1
jarak(i, j) = flxMap.TextMatrix(i, j)
If jarak(i, j) = 0 Then
visib(i, j) = 0
'
Else
visib(i, j) = Round(1 / jarak(i, j), 2)
End If
Next
Next
End Sub
Private Sub prepareFSP()
Dim i As Integer
flxS.Rows = 2
flxDist.Rows = 2
flxPath.Rows = 2
flxS.Cols = flxMap.Cols
flxDist.Cols = flxMap.Cols
flxPath.Cols = flxMap.Cols
If flxS.Cols > 1 Then
flxS.FixedRows = 1
flxDist.FixedRows = 1
flxPath.FixedRows = 1
flxS.FixedCols = 1
flxDist.FixedCols = 1
flxPath.FixedCols = 1
End If
For i = 0 To flxS.Cols - 1
flxS.ColWidth(i) = flxMap.ColWidth(i)
flxDist.ColWidth(i) = flxMap.ColWidth(i)
flxPath.ColWidth(i) = flxMap.ColWidth(i)
flxS.TextMatrix(0, i) = flxMap.TextMatrix(0, i)
flxDist.TextMatrix(0, i) = flxMap.TextMatrix(0, i)
flxPath.TextMatrix(0, i) = flxMap.TextMatrix(0, i)
Next i
For i = 1 To flxS.Cols - 1
flxS.TextMatrix(1, i) = "False"
flxS.row = 1
flxS.col = i
flxS.CellForeColor = vbBlack
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
75
flxS.CellFontBold = False
flxDist.TextMatrix(1, i) = "INF"
flxPath.TextMatrix(1, i) = "0"
Next i
End Sub
Private Sub cmdFindShortPath_Click()
If Me.CbAlgoritma.Text = "Djakstra" Then
prepareFSP
Dim src As Integer
Dim dest As Integer
src = getIndexOfTabName(sFrom)
dest = getIndexOfTabName(sTo)
If (src = -1) Or (dest = -1) Then
MsgBox "something wrong!!!"
Exit Sub
End If
' working with first row always!
flxS.row = 1
flxDist.row = 1
flxPath.row = 1
Dim MAX As Integer
MAX = flxMap.Cols
Option Base 1
Public Sub CboKota_Click()
Dim X As Integer
jlhKota = CInt(CboKota.Text)
jlhSemut = jlhKota
If CboKota.Text <> "" Then
Flex.Rows = jlhKota + 1
For X = 1 To jlhKota
Flex.TextMatrix(X, 0) = X
Next
Flex.col = 2
Flex.row = 2
End If
End Sub
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
76
Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009