Anda di halaman 1dari 76

1

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





PERBANDINGAN ALGORITMA GREEDY DAN DIJKSTRA
UNTUK MENENTUKAN LINTASAN TERPENDEK





SKRIPSI





HENNY SYAHRIZA LUBIS
051411009










DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2009






2

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





PERBANDINGAN ALGORITMA GREEDY DAN DIJKSTRA
UNTUK MENENTUKAN LINTASAN TERPENDEK





SKRIPSI


Diajukan untuk melengkapi tugasakhir dan memenuhi syarat mencapai gelar
Sarjana Sains


HENNY SYAHRIZA LUBIS
051411009










DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
2009





3

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



PERSETUJUAN



Judul : PERBANDINGAN ALGORITMA GREEDY DAN
DIJKSTRA UNTUK MENENTUKAN LINTASAN
TERPENDEK
Kategori : SKRIPSI
Nama : HENNY SYAHRIZA LUBIS
Nomor Induk Mahasiswa : 051411009
Program Studi : SARJ ANA (S1) MATEMATIKA
Departemen : MATEMATIKA
Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN
ALAM (FMIPA) UNIVERSITAS SUMATERA
UTARA

Diluluskan di
Medan, 20 Maret 2009


Komisi Pembimbing :


Pembimbing 2, Pembimbing1,





Drs. Marwan Harahap, M.Eng. Drs. Sawaluddin,M.IT.
NIP.130422437 NIP.132206398




Diketahui/Disetujui oleh
Departemen Matematika FMIPA USU
Ketua






Dr.Saib Suwilo,M.Sc.
NIP.131796149


4

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009




PERNYATAAN



PERBANDINGAN ALGORITMA GREEDY DAN DIJKSTRA UNTUK
MENENTUKAN LINTASAN TERPENDEK


SKRIPSI



Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing disebutkan sumbernya.




Medan, 20 Maret 2009




Henny Syahriza Lubis
051411009



























5

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.


























6

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





ABSTRAK




Algortima Dijkstra dan Algoritma Greedy merupakan algoritma untuk menemukan
jarak terpendek dari suatu verteks ke verteks yang lainnya pada suatu graph yang
berbobot, di mana jarak antar verteks adalah bobot dari tiap edge atau arc pada graph
tersebut. Algoritma Dijkstra dan Greedy merupakan algoritma yang setiap langkahnya
mengambil edge atau arc yang berbobot minimum yang menghubungkan sebuah
verteks yang sudah terpilih dengan sebuah verteks lain yang belum terpilih, dan
implementasinya dengan menggunakan bahasa pemograman Visual Basic 6.0.


































7

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009






COMPARASION OF DIJKSTRA AND GREEDY ALGORITHMS FOR
CHOOSE THE SHORTEST PATH.


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






























8

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009







DAFTAR ISI



Halaman


Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak v
Abstract vi
Daftar Isi vii
Daftar Tabel ix
Daftar Gambar x


Bab 1 Pendahuluan 1
1.1 Latar Belakang 1
1.2 Perumusan Masalah 2
1.3 Pembatasan Masalah 2
1.4 Tujuan Penelitian 3
1.5 Kontribusi Penelitian 3
1.6 Metode Penelitian 3
1.7 Tinjauan Pustaka 4


Bab 2 Landasan Teori 6
2.1 Teori Dasar Graph 6
2.1.1 Graph Berarah 6
2.1.2 Graph Tak Berarah 8
2.1.3 Graph Berbobot 9
2.1.4 Refrentasi Graph Dalam Matriks 10
2.2 Lintasan ( Path ) 11
2.2.1 Path Minimum 12
2.2.2 Lintasan Terpendek ( Shortest Path ) 14
2.3 Algoritma Greedy 15
2.3.1 Cara Kerja Algoritma Greedy 17
2.3.2 Pseudocode Algoritma Greedy 18
2.4 Algoitma Dijkstra 19
2.4.1 Sejarah Algoritma Dijkstra 19
2.4.2 Cara Kerja Algoritma Dijkstra 20


9

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Bab 3 Pembahasan 23
3.1 Implementasi Algoritma Greedy 23
3.1.1 Pemeriksaan Verteks dan Lintasan Pertama 23
3.1.2 Input Graph 25
3.1.3 Proses Graph 27
3.2 Prosedure Algoritma Greedy 29
3.3 Flowchart Algoritma Greedy 31
3.4 Implementasi Algoritma Dijkstra 32
3.4.1 Input Graph 42
3.4.2 Proses Graph 44
3.5 Prosedure Algoritma Dijkstra 46
3.6 Flowchart Algoritma Dijkstra 48
3.7 Flowchart Program 49
3.7.1 Halaman Utama 50
3.7.2 Halaman Komputasi 51
3.7.3 Halaman Hasil 55
3.7.4 Kebutuhan Perangkat 57


Bab 4 Kesimpulan dan Saran 59
4.1 Kesimpulan 59
4.2 Saran 59


Daftar Pustaka 60


Lampiran Listing Program 61





















10

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009









DAFTAR TABEL



Halaman

Tabel 3.1 Hasil Iterasi ke 1 33
Tabel 3.2 Hasil Iterasi ke 2 34
Tabel 3.3 Hasil Iterasi ke 3 34
Tabel 3.4 Hasil Iterasi ke 4 35
Tabel 3.5 Hasil Iterasi ke 5 35
Tabel 3.6 Hasil Iterasi ke 6 36
Tabel 3.7 Hasil Iterasi ke 7 37
Tabel 3.8 Hasil Iterasi ke 8 37
Tabel 3.9 Hasil Iterasi ke 9 38
Tabel 3.10 Hasil Iterasi ke 10 39
Tabel 3.11 Hasil dari seluruh tabel 39
Tabel 3.12 Beda Jarak Lintasan Terpendek Algoritma Greedy
dan Dijkstra 57























11

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009










DAFTAR GAMBAR



Halaman

Gambar 2.1 Graph Berarah atau Digraph 7
Gambar 2.2 Graph Berarah 8
Gambar 2.3 Graph Tak Berarah 9
Gambar 2.4 Graph Berarah Berbobot 9
Gambar 2.5 Graph Tidak Berarah dan Tidak Berbobot 10
Gambar 2.6 Graph Dengan 4 Buah Verteks 12
Gambar 2.7 Graph Dengan 6 Verteks dan 10 Edge 13
Gambar 2.8 Shortest Path(Garis Tebal) 15
Gambar 3.1 Graph Untuk Algoritma Greedy 23
Gambar 3.2 Lintasan 1 Algoritma Greedy 24
Gambar 3.3 Lintasan 2 Algoritma Greedy 24
Gambar 3.4 Lintasan 3 Algoritma Greedy 25
Gambar 3.5 Flowchart Algoritma Greedy 31
Gambar 3.6 Graph Untuk Algoritma Dijkstra 32
Gambar 3.7 Node Terpilih Pada Iterasi ke 1 33
Gambar 3.8 Node Terpilih Pada Iterasi ke 2 34
Gambar 3.9 Node Terpilih Pada Iterasi ke 3 34
Gambar 3.10 Node Terpilih Pada Iterasi ke 4 35
Gambar 3.11 Node Terpilih Pada Iterasi ke 5 36
Gambar 3.12 Node Terpilih Pada Iterasi ke 6 36
Gambar 3.13 Node Terpilih Pada Iterasi ke 7 37
Gambar 3.14 Node Terpilih Pada Iterasi ke 8 38
Gambar 3.15 Node Terpilih Pada Iterasi ke 9 38
Gambar 3.16 Node Terpilih Pada Iterasi ke 10 39
Gambar 3.17 Flowchart Algoritma Dijkstra 48
Gambar 3.18 Flowchart Aplikasi Algoritma Greedy dan Dijkstra 49
Gambar 3.19 Perancangan Diagram Halaman Utama 50
Gambar 3.20 Tampilan Output Halaman Utama 50
Gambar 3.21 Perancangan Diagram Halaman Komputasi 51
Gambar 3.22 Tampilan Menu Perancangan Lintasan Terpendek 51
Gambar 3.23 Tampilan Menu Peta 52
Gambar 3.24 Tampilan Menu Graph 52
Gambar 3.25 Tampilan Menu Cari Lintasan Terpendek 53
Gambar 3.26 Tampilan Menu Editor Titik 53
12

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Gambar 3.27 Tampilan Menu Editor Jalan 54
Gambar 3.28 Tampilan Menu Editor Hapus 54
Gambar 3.29 Tampilan Menu Editor Tambah Caption 55
Gambar 3.30 Implementasi Form Graph Algoritma Dijkstra 55
Gambar 3.31 Implementasi Form Hasil Komputasi Algoritma Dijkstra 56
Gambar 3.32 Implementasi Form Graph Algoritma Greedy 56
Gambar 3.33 Implementasi Form Hasil Komputasi Algoritma Greedy 56
Gambar 3.34 Grafik Lama Proses Pencarian Lintasan Terpendek Algoritma
Greedy dan Dijkstra 58
BAB 1

PENDAHULUAN



1.1 Latar Belakang

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.

Secara umum, pencarian jalur terpendek dapat dibagi menjadi 2(dua)
metode, yaitu: metode konvensional dan metode heuristik. Metode konvensional
merupakan metode yang menggunakan perhitungan matematik biasa, pada pencarian
lintasan terpendek hanya dapat diselesaikan untuk 5(lima) sampai 10(sepuluh)
verteks, untuk verteks yang lebih banyak metode heuristik lebih variatif dan waktu
perhitungan yang diperlukan lebih singkat, karena metode heuristik menggunakan
metode pendekatan dan melakukan pencarian.

Untuk menggunakan atau memfungsikan sebuah komputer harus terdapat
program yang terdistribusi di dalamnya, tanpa program tersebut komputer hanyalah
menjadi sebuah kotak yang tak berguna. Program yang terdapat pada komputer
sangat bervariasi dan setiap program tersebut pasti menggunakan algoritma.
13

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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.

Algoritma yang akan dipergunakan untuk mencari 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.


1.2 Perumusan Masalah

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.3 Pembatasan Masalah

Dalam melakukan perbandingan algoritma Greedy dan algoritma Dijkstra dilakukan
beberapa batasan sebagai berikut:

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.
14

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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

1.4 Tujuan Penelitian

Penelitian ini bertujuan untuk membandingkan pencarian lintasan terpendek manakah
yang lebih baik dari implementasi algoritma Greedy dan algoritma Dijkstra.


1.5 Kontribusi Penelitian

Dengan membandingkan algoritma Greedy dan algoritma Dijkstra dapatlah diketahui
metode mana yang baik untuk menentukan maksimal lintasan terpendek dari suatu
titik ke titik yang lain. Hal ini dapat diaplikasikan dalam peta suatu daerah, sistem
saluran air PDAM, sistem aliran listrik PLN dan sebagainya.


1.6 Metode Penelitian

Penelitian ini dilakukan dengan langkah-langkah sebagai berikut:

1. Menguraikan konsep algoritma Greedy dan Dijkstra dalam menentukan
lintasan terpendek.

2. Mengimplementasikan algoritma Greedy dan Dijkstra ke dalam suatu
program.

15

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


3. Melakukan analisa untuk membandingkan kinerja setiap algoritma
berdasarkan kelebihan dan kemudahannya.

4. Membuat kesimpulan dan saran dari penelitian yang dilakukan.






1.7 Tinjauan Pustaka

Arief Lutfi Hendratmono (2008) dalam makalahnya menguraikan algoritma
Dijkstra merupakan algoritma untuk menemukan jarak terpendek dari suatu verteks ke
verteks yang lainnya pada suatu graph yang berbobot dengan menggunakan strategi
Greedy. Algoritma ini menyelesaikan masalah mencari sebuah lintasan terpendek
(sebuah lintasan yang mempunyai panjang minimum) dari verteks a ke verteks z
dalam graph berbobot, bobot tersebut adalah bilangan positif jadi tidak dapat dilalui
oleh edge(arc) negatif, jika dilalui oleh edge(arc) negatif, maka penyelesaian yang
diberikan adalah infiniti.

Seymour Lipschutz dan Marc Lars dalam bukunya Matematika Diskrit 2,
definisi graph adalah bahwa sebuah graph terdiri dari 2(dua) bagian yaitu: sebuah
himpunan V=V(G) memiliki elemen-elemen yang dinamakan verteks. Kemudian
sebuah kumpulan E=E(G) atau A=A(G), merupakan pasangan tak berurut dari
verteks-verteks yang berbeda dinamakan edge(arc). Sedangkan multigraph G=G(V,E)
terdiri dari suatu himpunan V(verteks) dan suatu himpunan E(edge) kecuali E
mengandung multiple edge, yaitu beberapa edge(arc) dengan menghubungkan titik-
titik ujung yang sama, dan E mungkin mengandung satu atau lebih loop, yaitu sebuah
edge yang titik-titik ujungnya adalah verteks yang sama.

16

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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. Pendekatan yang digunakan di dalam algoritma Greedy adalah membuat
pilihan yang terlihat memberikan perolehan terbaik, yaitu dengan membuat
pilihan optimum local pada setiap langkah dan diharapkan akan mendapatkan
solusi optimum global.
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 memberikan solusi yang mendekati nilai optimum.















17

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009
















BAB 2

LANDASAN TEORI



2.1 Teori Dasar Graph


Sebuah graph G didefinisikan sebagai pasangan himpunan (V,E) di mana V=
himpunan verteks {v
1
,v
2
,,v
n
} dan E=himpunan edge(arc) yang menghubungkan
verteks-verteks {e
1
,e
2
,,e
n
} atau dapat ditulis dengan notasi G=(V,E)(Rinaldi Munir,
2006 hal: 291).

Berdasarkan orientasi arah pada sisi, graph dapat dibedakan atas dua jenis yaitu
(Rinaldi Munir, 2006 hal: 294):


2.1.1 Graph berarah (directed graph atau digraph)

18

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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
v2
v5
v3
a6
a4
a2
a5
a1 a3
v4

Gambar 2.1 Graph Berarah atau Digraph
Digraph pada Gambar 2.1 adalah graph berarah dengan himpunan verteks-verteks
V(G)={v1, v2, v3, v4, v5} dan himpunan arc-arc A(G)={a1, a2, a3, a4,ae5, a6} yaitu
pasangan terurut dari {(v
1
, v
2
), (v
2
, v
3
), (v
3
, v
4
), (v
4
, v
5
), (v
5
, v
1
), (v
2
, v
5
)}.

Pada suatu graph jika dua buah verteks v
1
dan v
2
dihubungkan oleh suatu edge(arc),
maka kedua verteks tersebut dikatakan adjacent. Pada Gambar 2.1 verteks v
1
adjacent
(bertetangga) dengan verteks v
2
. Sementara itu, arc a
1
dikatakan incident (bersisian)
dengan verteks v
1
dan verteks v
2
.

Matriks yang bersesuaian dengan graph berlabel G adalah matriks adjacency A=(a
ij
),
dengan a
ij
=nilai arc yang menghubungkan verteks v
i
dengan verteks v
j
. J ika titik v
i

tidak berhubungan langsung dengan titik v
j
, maka a
ij
=, dan jika i =j, maka a
ij
=0.

Misalkan G adalah sebuah graph berarah. Sebuah arc berarah a=[u,v] dikatakan
mulai pada verteks awal u dan berakhir di verteks akhir v, u dan v dikatakan adjacent.

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
19

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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.


Gambar 2.2 Graph Berarah


Gambar 2.2 terdiri dari:

Verteks A B C D E F G
Derajat-dalam (indegree) 0 2 2 4 1 1 2
Derajat-luar (outdegree) 4 1 0 0 3 3 1

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.


2.1.2 Graph tak berarah (Undirected Graph)

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
A B
G
E D
F
C
20

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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.

v1
v2
v5
v3
v4
e6
e4
e2
e5
e1 e3

Gambar 2.3 Graph tak Berarah

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 {(v
1
, v
2
), (v
2
, v
3
), (v
3
, v
4
), (v
4
, v
5
), (v
5
, v
2
)}.

2.1.3 Graph Berbobot (Weight Graph)

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).

v1
v2
v5
v3
2
v4
3
4
2
5
4
5
2

Gambar 2.4 Graph Berarah Berbobot
21

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Graph tidak berarah dan tidak berbobot: tiap busur tidak mempunyai anak panah dan
tidak berbobot.
A
B
C
D
E
F
G


Gambar 2.5 Graph tidak berarah dan tidak berbobot


2.1.4 Representasi Graph dalam Matriks

Matriks dapat digunakan untuk menyatakan suatu graph, Kemudian graph
direpresentasikan pada matriks, yang dapat dibedakan sebagai berikut:
1. 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=(a
ij
) dengan

=
j i
j i
titik v ke titik v dari arc ada tidak 0
titik v ke titik v dari arc ada 1
ij
a

Matriks adjacency dari graph Gambar 2.3 adalah:
A =
|
|
|
|
|
|
.
|

\
|
0 0 0 0 1
1 0 0 0 0
0 1 0 0 0
1 0 1 0 0
1 0 0 1 0

v
5
4
3
2
1
5 4 3 2 1
v
v
v
v
v
v v v v

Jika graph yang diberikan adalah graph berbobot, maka elemen matriks yang
terhubung antara verteks adalah bobot graph.

22

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


2. Matriks Incidency

Matriks incidency atau matriks bersisian adalah matriks yang merepresentasikan
hubungan antara verteks dan edge(arc). Misalkan B adalah matriks dengan m baris
untuk setiap verteks dan n kolom untuk setiap edge(arc). Jika verteks terhubung
dengan edge(arc), maka elemen matriks bernilai 1. Sebaliknya, jika verteks tidak
terhubung dengan edge(arc), maka elemen matriks bernilai 0.

Matriks bersisian dari graph Gambar 2.3 adalah:

B =
|
|
|
|
|
|
.
|

\
|
1
0
0
1
0
1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
1 0 0 0 1

5
4
3
2
1
6 5 4 3 2 1
v
v
v
v
v
e e e e e e


2.2 Lintasan (Path)

Misalkan v
0
dan v
n
adalah verteks-verteks dalam sebuah graph. Sebuah lintasan dari
v
0
ke v
n
dengan panjang n adalah sebuah barisan berselang-seling dari n+1 verteks dan
n edge yang berawal dengan verteks v
0
dan berakhir dengan verteks v
n
, yang
berbentuk (v
0
,e
1
,v
1
,e
2
,v
2
v
n-1
,e
n
,v
n
) dengan edge e
i
insiden pada verteks v
i
-1 dan v
i

untuk i=1,,n (Richard Johnsonbaugh, 1998, hal: 75).

J ika semua verteks berbeda (setiap edge(arc) dilewati hanya satu kali), maka
suatu lintasan dikatakan sederhana (simple path). J ika sebuah lintasan yang berawal
dan berakhir pada verteks yang sama, v
0
=v
n
, maka disebut lintasan tertutup (close
path). Jika verteks awal dan verteks akhir dari lintasan tersebut berbeda, maka sebuah
lintasan dikatakan lintasan terbuka (open path).

Panjang lintasan pada graph adalah banyaknya edge(arc) dalam lintasan
tersebut. Pada graph berarah, lintasan harus mengikuti arah arc.
23

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


v2
v3
v4
v1

Gambar 2.6 Graph dengan Empat Buah Verteks

Pada Gambar 2.6:

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).

J ika terdapat lintasan dari v
i
ke v
j
, maka suatu graph G dikatakan terhubung.
Pada graph berarah, jika setiap pasang dari verteks v
i
dan v
j
terdapat sebuah lintasan
dari v
i
ke v
j
dan dari v
j
ke v
i
, maka suatu graph dikatakan terhubung kuat (strongly
connected). J ika 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. J ika 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 : v
0
e
1
v
1
e
2
v
2
v
n-1
e
n
v
n
dengan v
0
=v; v
n
=w; v
i-1
dan v
i
adalah verteks-verteks ujung edge e
i.
24

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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 =v
0
e
1
v
1
e
2
v
2
v
n-1
e
n
v
n
=w dengan
e
i
e
j
untuk i j.

Lintasan adalah suatu barisan edge ( )
k
i i i
e e e ., ,......... ,
2 1
sedemikian rupa sehingga
verteks terminal
j
i
e berimpit dengan verteks awal
) 1 ( + j
i
e untuk 1 j k 1.









Gambar 2.7 Graph dengan 6 verteks dan 10 edge

Pada Gambar 2.7 terdapat:

a. v
1
e
1
v
2
e
3
v
3
e
4
v
3
e
5
v
4
, barisan ini merupakan Path dari v
1
ke v
4
dengan panjang
4. Semua edge berbeda (e
1
, e
3
, e
4
, dan e
5
masing-masing muncul sekali). Ada
verteks yang berulang (v
3
muncul 2 kali). Verteks awal dan verteks akhir tidak
sama (verteks awal =v
1
dan verteks akhir =v
4
).

b. v
1
e
1
v
2
e
3
v
3
e
5
v
4
e
5
v
3
e
6
v
5,
barisan ini merupakan walk dari v
1
ke v
5
dengan
panjang 5. Ada edge yang muncul lebih dari sekali, yaitu e
5
(muncul 2 kali).


2.2.2 Lintasan Terpendek (Shortest Path)

Persoalan mencari lintasan terpendek di dalam graph merupakan salah satu
persoalan optimasi. Graph yang digunakan dalam mencari lintasan terpendek adalah
graph berbobot. Bobot pada sisi graph dapat menyatakan jarak antar kota, waktu,
v
1
v
2
v
3
v
6
v
5
v
4
e
10
e
9
e
6
e
5
e
4
e
7
e
8
e
3
e
1
e
2
25

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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).

Misalkan lubang-lubang pada sebuah lempengan logam adalah verteks-verteks
pada graph yang bersesuaian, maka setiap pasangan verteks-verteks dihubungkan
dengan sebuah edge(arc) yang terdiri dari bobot waktu untuk memindahkan alat
pembor di antara lubang-lubang yang berhubungan. Untuk menghemat waktu dan
biaya, alat pembor harus digerakkan secepat mungkin. Sebuah lintasan dengan
panjang minimum yang mengunjungi verteks tepat satu kali mewakili lintasan optimal
yang dijalani alat pembor. Misalkan dalam masalah ini lintasan diperlukan untuk
memulai pada verteks a dan berakhir pada verteks e. Lintasan dengan panjang
minimum dapat ditemukan dengan mendaftar semua lintasan yang mungkin dari a ke
e yang melalui setiap verteks tepat satu kali dan memilih yang terpendek.

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.









3
2
X
7

X
5
4

1 2
4
X
2
X
4
1
3
X
3
5
X
8

2 X
1

26

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009








Gambar 2.8 Shortest path (garis tebal)

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. Pendekatan yang digunakan di dalam algoritma Greedy adalah membuat
pilihan yang terlihat memberikan perolehan terbaik, yaitu dengan membuat
pilihan optimum local pada setiap langkah dan diharapkan akan mendapatkan
solusi optimum global.


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.
5
3
1 X
6

27

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Masalah optimasi dalam konteks algoritma Greedy disusun oleh elemen-elemen
sebagai berikut:

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 pada setiap langkah memilih kandidat yang paling mungkin
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.


2.3.1 Cara Kerja Algoritma Greedy

28

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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 mencari lintasan terpendek dapat
dirumuskan sebagai berikut:

1. Periksa semua edge(arc) yang langsung bersesuaian dengan verteks a. Pilih
edge(arc) yang bobotnya terkecil. Edge(arc) ini menjadi lintasan terpendek
pertama, sebut saja L(1).

2. Tentukan lintasan terpendek ke dua dengan cara sebagai berikut:

(i) Hitung d(i) =panjang L(1) +bobot edge(arc) dari verteks akhir
L(1) keverteks i yang lain.
(ii) Pilih d(i) yang terkecil
(iii) Bandingkan d(i) dengan bobot edge(arc) (a,i) lebih kecil
daripada d(i), maka L(2) =L(1) U (edge(arc) dari verteks akhir
L(i) ke verteks i)

3. Dengan cara yang sama, ulangi langkah (2) untuk menentukan lintasan
terpendek berikutnya.


2.3.2 Pseudocode Algoritma Greedy

Pr ocedur e gr eedy ( i nput C: hi mpunan_kandi dat ;
out put S: hi mpunan_sol usi )
{ Menent ukan sol usi opt i mum dar i per soal an opt i masi dengan al gor i t ma
Gr eedy
Masukan: hi mpunan kandi dat C
Kel uar an: hi mpunan sol usi S
}

Dekl ar asi
x: kandi dat ;

29

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Al gor i t ma;
S{} { i ni si al i sasi S dengan kosong}
Whi l e( bel umSOLUSI ( S) ) and ( C= {}) do
X SELEKSI ( C) ; {pi l i h kandi dat dar i C }
C C {x}
I f LAYAK( S U {x} t hen
SS U {x}
Endi f
Endwhi l e
{SOLUSI ( S) sudah di per ol eh or C = {} }

Analisa:

Ambil satu kandidat dari himpunan kandidat C lalu masukkan ke x dan
kurangi C dengan kandidat tersebut. Kemudian apakah layak x digabungkan dengan
himpunan solusi S? J ika layak, maka gabungkan x dengan solusi S dan lakukan
perulangan hingga C kosong atau solusi S sudah ditemukan.
Layak atau tidaknya x digabung dengan S, melihat tujuan yang ingin dicapai pada
kasus yang sedang dipecahkan tetapi tidak melihat apakah hasil tersebut merupakan
hasil yang mampu mengoptimalkan tujuan, yang terpenting ketika langkah tersebut
diambil setidaknya hasil pada saat itu mendekati tujuan yang ingin dicapai.
Misalkan pada kasus mencari jalur terpendek, saat menguji apakah x layak
digabungkan menjadi solusi S, yang menjadi pertimbangan adalah apakah jika x
digabungkan dengan S akan menghasilkan solusi S yang terpendek?.
2.4 Algoritma Dijkstra


2.4.1 Sejarah Algoritma Dijkstra

Algoritma Dijkstra ditemukan oleh Edsger W. Dijkstra yang merupakan
salah satu varian bentuk algoritma popular dalam pemecahan persoalan yang terkait
dengan masalah optimisasi dan bersifat sederhana. Algoritma ini menyelesaikan
masalah mencari sebuah lintasan terpendek (sebuah lintasan yang mempunyai
panjang minimum) dari verteks a ke verteks z dalam graph berbobot, bobot tersebut
30

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


adalah bilangan positif jadi tidak dapat dilalui oleh node negatif, namun jika terjadi
demikian, maka penyelesaian yang diberikan adalah infiniti.

Algoritma Dijkstra melibatkan pemasangan label pada verteks. Misalkan
L(v) menyatakan label dari verteks v. Pada setiap pembahasan, beberapa verteks
mempunyai label sementara dan yang lain mempunyai label tetap. Misalkan T
menyatakan himpunan verteks yang mempunyai label sementara. Dalam
menggambarkan algoritma tersebut verteks-verteks yang mempunyai label tetap akan
dilingkari. Selanjutnya, 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 algoritma dapat berakhir ketika z
menerima sebuah label tetap. Pada bagian ini L(z) merupakan panjang lintasan
terpendek dari a ke z. Pada algoritma Dijkstra node digunakan, karena algoritma
Dijkstra menggunakan diagram pohon(tree) untuk penentuan jalur lintasan terpendek
dan menggunakan graph yang berarah.


2.4.2 Cara Kerja Algoritma Dijkstra

Algoritma ini mencari panjang lintasan terpendek dari verteks a ke verteks z
dalam sebuah graph berbobot tersambung.
Langkah-langkah dalam menentukan lintasan terpendek pada algoritma Dijkstra yaitu:

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. J ika node sumber ditemukan maka tetapkan sebagai node terpilih.
31

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



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? J ika ya, maka kumpulan
node terpilih atau predecessor merupakan rangakaian yang menunjukkan lintasan
terpendek.

7. Begitu seterusnya hingga semua node terpilih.

Pseudocode algoritma Dijkstra adalah sebagai berikut:

Pr ocedur e Di j kst r a( I NPUT m: mat r i ks, a: si mpul awal )
{
Mencar i l i nt asan t er pendek dar i si mpul awal a ke semua si mpul
Lai nnya.
Masukan: mat r i ks ket et anggaan ( m) dar i gr aph ber bobot G dan
si mpul awal a
Kel uar an: l i nt asan t er pendek dar i a ke semua si mpul l ai nnya.
}
Kamus:
S: ar r ay [ 1. . n] of i nt eger
d: ar r ay [ 1. . n] of i nt eger
i : i nt eger
Al gor i t ma:
{ Langkah 0 ( i ni si al i sasi : ) }
Tr aver sal [ 1. . n]
s
i
0
d
i
m
ai
{ Langkah

1: }
s
a
1
d
a

{ l angkah 2, 3, . . . , n- 1: }
Tr aver sal {2. . n- 1}
32

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Car i j sedemi ki an sehi ngga s
j
=0
dan
d
j
= mi n {d1, d2, . . . , dn}
s
j
1 { si mpul j sudah t er pi l i h}
per bar ui d, unt uk i = 1, 2, 3, s. d. n dengan:
d
i
( bar u) = mi n{d
i
( l ama, d
j
+ m
j i
}

J ika 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. J ika 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(n
2
).
Sehingga untuk mencari semua pasangan verteks terpendek, total waktu asimptotik
komputasinya adalah: T(n)=n.O(n
2
)=O(n
3
), algoritma Dijktra lebih menguntungkan
dari sisi running time.

.



BAB 3
PEMBAHASAN


3.1 Implementasi Algoritma Greedy
33

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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


Gambar 3.1 Graph Untuk Algoritma Greedy

3.1.1 Pemeriksaan verteks dan lintasan pertama
Pada Gambar 3.1 terdapat 10 kota dan jalur yang menghubungkan kota-kota tersebut
beserta jarak antar kotanya dari kota A (asal) ke kota J (tujuan).
Mula-mula proses berawal dari verteks A sebagai verteks keberangkatan. Terdapat 2
jalur yang memungkinkan yaitu jalur AB dengan jarak 2 dan AD dengan jarak 3, AB
terpilih karena jaraknya lebih kecil dari AD.

34

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Gambar 3.2 Lintasan 1 Algoritma Greedy

Dari B terdapat 3 jalur yang memungkinkan, yaitu BE dengan jarak 2, BC dengan
jarak 5, dan BG dengan jarak 4. BE terpilih karena jaraknya lebih kecil BC dan BG.

Gambar 3.3 Lintasan 2 Algoritma Greedy
Dari E terdapat 4 jalur yang memungkinkan yaitu ED dengan jarak 6, EF dengan
jarak 9, EJ dengan jarak 5 dan EH dengan jarak 7. EJ terpilih karena jarak lebih kecil
dari ED, EF dan EH, karena verteks tujuan telah tercapai maka algoritma Greedy
berhenti sampai di sini. Lintasan terpendeknya adalah ABEJ dengan total
jarak 9.

Gambar 3.4 Lintasan 3 Algoritma Greedy
3.1.2 Input Graph

Proses input graph dilakukan dengan cara menggambar titik dan jalan yang
menghubungkan setiap titik pada halaman graph. Selanjutnya adalah membuat
35

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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. Prosedure untuk membuat titik:

Pr i vat e Sub mnuTambahTI t i k_Cl i ck( )
t heBl ockCol l ect i on. AddShape 3, t heBl ockCol l ect i on. get Fr eeTagI D( )
End Sub

2. Prosedure untuk membuat jalan/garis tanpa panah:

Pr i vat e Sub mnuJ oi nLi ne_Cl i ck( )
I f ( PREV_SELECTED_SHAPE <> - 1) And ( SELECTED_SHAPE <> - 1) Then
t heLi neCol l ect i on. AddLi ne
f r mPet a. shp( PREV_SELECTED_SHAPE) . Tag,
f r mPet a. shp( SELECTED_SHAPE) . Tag, Fal se
El se
MsgBox "Two obj ect s shoul d be sel ect ed! "
End I f
End Sub

3. Menambah caption titik/verteks dengan posisi di tengah:

Pr i vat e Sub mnTbhCapt i onDi Tengah_Cl i ck( )
I f ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on f or a shape", "Capt i on",
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i ont heBl ockC
ol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i on = s
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
El se
MsgBox "Obj ect shoul d be sel ect ed! "
End I f
End Sub

36

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


4. Menambah caption titik/verteks dengan posisi di atas:

Pr i vat e Sub mnuTbhCapt i onDi t engah_Cl i ck( )
I f ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on f or a shape", "Capt i on" ,
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i onUpper )
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i onUpper = s
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . bSet Upper Capt i onD
own = Fal se
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
El se
MsgBox "Obj ect shoul d be sel ect ed! "
End I f
End Sub

5. Menambah caption titik/verteks dengan posisi di bawah:

Pr i vat e Sub mnuAddCapt i onLower ToBl ock_Cl i ck( )
mnuAddCapt i onUpper ToBl ock_Cl i ck
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . bSet Upper Capt i onD
own = Tr ue
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
End Sub

6. Menambah caption jalan dengan posisi di tengah:

Pr i vat e Sub mnuTbhCapt i onJ al an_Cl i ck( )
I f ( PREV_SELECTED_SHAPE <> - 1) And ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on")
t heLi neCol l ect i on. AddCapt i onToLi ne
f r mPet a. shp( PREV_SELECTED_SHAPE) . Tag,
f r mPet a. shp( SELECTED_SHAPE) . Tag, s
El se
37

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


MsgBox "Two obj ect s shoul d be sel ect ed! "
End I f
End Sub


3.1.3 Proses Graph

Data graph yang telah diinput pada form graph selanjutnya diproses untuk
mendapatkan matriks jarak dari graph tersebut. Berikut prosedure pada proses graph:

Pr i vat e Sub cmdCal cDat a_Cl i ck( )
Di mi As I nt eger
Di mj As I nt eger
Di mt oI ndex As I nt eger
f l xMap. Rows = f r mPet a. t heBl ockCol l ect i on. Count + 1
f l xMap. Col s = f r mPet a. t heBl ockCol l ect i on. Count + 1
I f f r mPet a. t heBl ockCol l ect i on. Count > 0 Then
f l xMap. Fi xedRows = 1
f l xMap. Fi xedCol s = 1
End I f
For i = 0 To f l xMap. Col s - 1
f l xMap. Col Wi dt h( i ) = 530
Next i
For i = 1 To f r mPet a. t heBl ockCol l ect i on. Count
f l xMap. r ow = i
f l xMap. col = 0
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = 0
f l xMap. col = i
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = i

For j = 1 To f l xMap. Col s - 1
f l xMap. Text Mat r i x( i , j ) = "0"
f l xMap. col = j
f l xMap. Cel l For eCol or = vbBl ack
f l xMap. Cel l Font Bol d = Fal se
Next j

38

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


For j = 1 To f r mPet a. t heLi neCol l ect i on. Count
I f f r mPet a. t heLi neCol l ect i on( j ) . sFr om =
f r mPet a. t heBl ockCol l ect i on( i ) . TagI D Then
t oI ndex =
f r mPet a. t heBl ockCol l ect i on. get I ndexFr omTag( f r mPet a. t heLi neCol l ect i on(
j ) . sTo)
f l xMap. col = t oI ndex
f l xMap. Text = f r mPet a. t heLi neCol l ect i on( j ) . sCapt i on
I f ( f l xMap. Text = "") Then f l xMap. Text = "1"
f l xMap. Cel l For eCol or = vbRed
f l xMap. Cel l Font Bol d = Tr ue
End I f
Next j
Next i
ReDi mj ar ak( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)
ReDi mvi si b( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)

For i = 1 To Me. f l xMap. Rows - 1
For j = 1 To Me. f l xMap. Col s - 1
j ar ak( i , j ) = f l xMap. Text Mat r i x( i , j )
I f j ar ak( i , j ) = 0 Then
vi si b( i , j ) = 0 '
El se
vi si b( i , j ) = Round( 1 / j ar ak( i , j ) , 2)
End I f

Next
Next
End Sub


3.2 Prosedure Algoritma Greedy

Berikut prosedure yang digunakan pada algoritma Greedy:

Di msr c As I nt eger
Di mdest As I nt eger
sr c = get I ndexOf TabName( sFr om)
dest = get I ndexOf TabName( sTo)
39

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


I f ( sr c = - 1) Or ( dest = - 1) Then
MsgBox "somet hi ng wr ong! ! ! "
Exi t Sub
End I f
Di mket emu as bool en
Di mCC as i nt eger
Di mLc( ) as i nt eger
Di mLt emp ( ) as i nt eger
LC( 1) = sr c
CC( 1) =LC( 1)
Count er =1
Whi l e ( LC <> nul l and ket emu <> t r ue ) do
CC( count er ) =LC( count er )
LC( 1) =0
I f CC( count r e) <> 0 t hen
For a = 0 ubound( cc)
{mul ai penel usur an semua chi l d}
I f cc( a) <> Lt emp t hen
LC( count er +1) =cc( a)
Lt emp=CC
Endi f
endi f
LP( ubound+1) =CC( count er +1
i f adj ( l p( a, b) ) <> 0 t hen
ket emu t r ue
endi f
Loop











3.3 Flowchart Algoritma Greedy
40

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





Gambar 3.5 Flowchart Algoritma Greedy

3.4 Implementasi Algoritma Dijkstra
Implementasi algoritma Dijkstra dirancang dalam bahasa pemograman Visual Basic
6.0. Berikut adalah tahap proses implementasi algoritma Dijkstra:
1. Input Graph
Mulai
Tentukan Vs dan Vt
Jalur=0 Tentukan vs(V1) dan Cari
V2
Bandingkan Lintasan
Kesemua verteks terhubung
Vt
Tercapai
Jalur Verteks Tujuan
Lintasan
Terpendek
Ditemukan
Selesai
41

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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. J ika 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:


Gambar 3.6 Graph Untuk Algoritma Dijkstra

Langkah-langkah untuk menentukan jarak terpendek dari A ke J dengan
menggunakan algoritma Dijkstra adalah sebagai berikut:
1. Pada awalnya status dari node yang belum terpilih diinisialisasikan dengan 0
dan yang sudah terpilih diinisialisasi dengan 1 dimulai dari node A.
2. Tentukan bobot dari node yang langsung berhubungan dengan node sumber
yaitu node A, seperti: dari node A ke node B=2, dari node A ke node C=8, dari
node A ke node D=3, dan untuk node E, F, G, H, I, J diinisialisasi dengan -
karena tidak ada lintasan (arc) yang menghubungkan secara langsung dengan
node A.
42

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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.

Tabel 3.1 Hasil Iterasi Ke-1
Node A B C D E F G H I J
Status 1 0 0 0 0 0 0 0 0 0
Bobot - 2 8 3 - - - - - -
Predecessor A A A A - - - - - -

A

Gambar 3.7 Node Terpilih Pada Iterasi ke-1

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. J ika 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:

Tabel 3.2 Hasil Iterasi Ke-2
Node A B C D E F G H I J
Status 1 1 0 0 0 0 0 0 0 0
Bobot - 2 7 3 4 - 6 - - -
Predecessor A A B A B - B - - -

43

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


A
B

Gambar 3.8 Node terpilih pada Iterasi ke-2

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:

Tabel 3.3 Hasil Iterasi Ke-3
Node A B C D E F G H I J
Status 1 1 0 1 0 0 0 0 0 0
Bobot - 2 7 3 4 - 6 - - -
Predecessor A A B A B - B - - -

A
B
D

Gambar 3.9 Node terpilih pada Iterasi ke-3
Dari Tabel 3.3 didapatkan bahwa node E memiliki bobot yang paling kecil, sehingga
statusnya akan berubah menjadi 1. J ika node E sudah terpilih, maka node F
mempunyai bobot 13, node H bobotnya 11 dan node J bobotnya 9. Untuk mencapai
node F, H dan node J dari node A bisa melalui node B, kemudian melalui node E
dengan predecessor-nya berubah menjadi E. Sehingga diperoleh:

Tabel 3.4 Hasil Iterasi Ke-4
Node A B C D E F G H I J
Status 1 1 0 1 1 0 0 0 0 0
Bobot - 2 7 3 4 13 6 11 - 9
Predecessor A A B A B E B E - E
44

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009




Gambar 3.10 Node terpilih pada Iterasi ke-4

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:

Tabel 3.5 Hasil Iterasi Ke-5
Node A B C D E F G H I J
Status 1 1 0 1 1 0 1 0 0 0
Bobot - 2 7 3 4 12 6 11 - 9
Predecessor A A B A B G B E - E



Gambar 3.11 Node terpilih pada Iterasi ke-5

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:

45

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Tabel 3.6 Hasil Iterasi Ke-6
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 0 0 0
Bobot - 2 7 3 4 12 6 11 - 9
Predecessor A A B A B G B E - E


Gambar 3.12 Node terpilih pada Iterasi ke-6

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 bersumber dari node
ABEJI. Sehingga diperoleh:

Tabel 3.7 Hasil Iterasi Ke-7
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 0 0 1
Bobot - 2 7 3 4 12 6 11 19 9
Predecessor A A B A B G B E J E

46

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Gambar 3.13 Node terpilih pada Iterasi ke-7
Dari Tabel 3.7 didapatkan bahwa node H 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 berubah bobotnya menjadi 15 dengan
predecessor-nya H yang bersumber dari node ABEHI. Sehingga diperoleh:

Tabel 3.8 Hasil Iterasi Ke-8
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 1 0 1
Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E


Gambar 3.14 Node terpilih pada Iterasi ke-8

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:

47

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Tabel 3.9 Hasil Iterasi Ke-9
Node A B C D E F G H I J
Status 1 1 1 1 1 1 1 1 0 1
Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E



Gambar 3.15 Node terpilih pada Iterasi ke-9
Semua node telah terpilih dan hanya tinggal node I yang belum terpilih, selanjutnya
status node I akan berubah menjadi 1, predecessor-nya masih tetap H dengan bobot
15. Sehingga diperoleh:

Tabel 3.10 Hasil Iterasi Ke-10
Node A B C D E F G H I J
Status 1 1 1 1 1 1 1 1 1 1
Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E
48

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Gambar 3.16 Node terpilih pada Iterasi ke-10
Hasil dari seluruh tabel adalah sebagai berikut:

Tabel 3.11 Hasil dari seluruh tabel
Iterasi Ke 1
Node A B C D E F G H I J
Status 1 0 0 0 0 0 0 0 0 0
Bobot - 2 8 3 - - - - - -
Predecessor A A A A - - - - - -
Iterasi Ke 2
Node A B C D E F G H I J
Status 1 1 0 0 0 0 0 0 0 0
Bobot - 2 7 3 4 - 6 - - -
Predecessor A A B A B - B - - -
Iterasi Ke 3
Node A B C D E F G H I J
Status 1 1 0 1 0 0 0 0 0 0
Bobot - 2 7 3 4 - 6 - - -
Predecessor A A B A B - B - - -
Iterasi Ke 4
49

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Node A B C D E F G H I J
Status 1 1 0 1 1 0 0 0 0 0
Bobot - 2 7 3 4 13 6 11 - 9
Predecessor A A B A B E B E - E
Iterasi Ke 5
Node A B C D E F G H I J
Status 1 1 0 1 1 0 1 0 0 0
Bobot - 2 7 3 4 12 6 11 - 9
Predecessor A A B A B G B E - E
Iterasi Ke 6
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 0 0 0
Bobot - 2 7 3 4 12 6 11 - 9
Iterasi Ke 7
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 0 0 1
Bobot - 2 7 3 4 12 6 11 19 9
Predecessor A A B A B G B E J E

Iterasi Ke 8
Node A B C D E F G H I J
Status 1 1 1 1 1 0 1 1 0 1
Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E
Iterasi Ke 9
Node A B C D E F G H I J
Status 1 1 1 1 1 1 1 1 0 1
Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E
Iterasi Ke 10
Node A B C D E F G H I J
Status 1 1 1 1 1 1 1 1 1 1
50

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Bobot - 2 7 3 4 12 6 11 15 9
Predecessor A A B A B G B E H E


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 - G F : 12
AG : A B G : 6
AH : A B E H : 11
AI : A B E H I : 15
AJ : A B E - J : 9

3.4.1 Input Graph

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. Prosedure untuk membuat titik:

Pr i vat e Sub mnuTambahTI t i k_Cl i ck( )
t heBl ockCol l ect i on. AddShape 3, t heBl ockCol l ect i on. get Fr eeTagI D( )
End Sub

2. Prosedure untuk membuat jalan/garis tanpa panah:
51

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Pr i vat e Sub mnuJ oi nLi ne_Cl i ck( )
I f ( PREV_SELECTED_SHAPE <> - 1) And ( SELECTED_SHAPE <> - 1) Then
t heLi neCol l ect i on. AddLi ne
f r mPet a. shp( PREV_SELECTED_SHAPE) . Tag,
f r mPet a. shp( SELECTED_SHAPE) . Tag, Fal se
El se
MsgBox "Two obj ect s shoul d be sel ect ed! "
End I f
End Sub

3. Menambah caption titik/node dengan posisi di tengah:

Pr i vat e Sub mnTbhCapt i onDi Tengah_Cl i ck( )
I f ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on f or a shape", "Capt i on",
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i ont heBl ockC
ol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i on = s
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
El se
MsgBox "Obj ect shoul d be sel ect ed! "
End I f
End Sub

4. Menambah caption titik/node dengan posisi di atas:

Pr i vat e Sub mnuTbhCapt i onDi t engah_Cl i ck( )
I f ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on f or a shape", "Capt i on" ,
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i onUpper )
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . sCapt i onUpper = s
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . bSet Upper Capt i onD
own = Fal se
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
52

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


El se
MsgBox "Obj ect shoul d be sel ect ed! "
End I f
End Sub

5. Menambah caption titik/node dengan posisi di bawah:

Pr i vat e Sub mnuAddCapt i onLower ToBl ock_Cl i ck( )
mnuAddCapt i onUpper ToBl ock_Cl i ck
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . bSet Upper Capt i onD
own = Tr ue
t heBl ockCol l ect i on( f r mPet a. shp( SELECTED_SHAPE) . Tag) . updat eShapeCapt i o
nPos
End Sub

6. Menambah caption jalan dengan posisi di tengah:
Pr i vat e Sub mnuTbhCapt i onJ al an_Cl i ck( )
I f ( PREV_SELECTED_SHAPE <> - 1) And ( SELECTED_SHAPE <> - 1) Then
Di ms As St r i ng
s = I nput Box( "Ent er t he capt i on")
t heLi neCol l ect i on. AddCapt i onToLi ne
f r mPet a. shp( PREV_SELECTED_SHAPE) . Tag,
f r mPet a. shp( SELECTED_SHAPE) . Tag, s
El se
MsgBox "Two obj ect s shoul d be sel ect ed! "
End I f
End Sub


3.4.2 Proses Graph

Data graph yang telah diinput pada form graph selanjutnya diproses untuk
mendapatkan matriks jarak dari graph tersebut. Berikut Prosedure pada proses graph:

Pr i vat e Sub cmdCal cDat a_Cl i ck( )
Di mi As I nt eger
Di mj As I nt eger
53

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Di mt oI ndex As I nt eger
f l xMap. Rows = f r mPet a. t heBl ockCol l ect i on. Count + 1
f l xMap. Col s = f r mPet a. t heBl ockCol l ect i on. Count + 1
I f f r mPet a. t heBl ockCol l ect i on. Count > 0 Then
f l xMap. Fi xedRows = 1
f l xMap. Fi xedCol s = 1
End I f
For i = 0 To f l xMap. Col s - 1
f l xMap. Col Wi dt h( i ) = 530
Next i
For i = 1 To f r mPet a. t heBl ockCol l ect i on. Count
f l xMap. r ow = i
f l xMap. col = 0
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = 0
f l xMap. col = i
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = i
For j = 1 To f l xMap. Col s - 1
f l xMap. Text Mat r i x( i , j ) = "0"
f l xMap. col = j
f l xMap. Cel l For eCol or = vbBl ack
f l xMap. Cel l Font Bol d = Fal se
Next j
For j = 1 To f r mPet a. t heLi neCol l ect i on. Count
I f f r mPet a. t heLi neCol l ect i on( j ) . sFr om =
f r mPet a. t heBl ockCol l ect i on( i ) . TagI D Then
t oI ndex =
f r mPet a. t heBl ockCol l ect i on. get I ndexFr omTag( f r mPet a. t heLi neCol l ect i on(
j ) . sTo)
f l xMap. col = t oI ndex
f l xMap. Text = f r mPet a. t heLi neCol l ect i on( j ) . sCapt i on
I f ( f l xMap. Text = "") Then f l xMap. Text = "1"
f l xMap. Cel l For eCol or = vbRed
f l xMap. Cel l Font Bol d = Tr ue
End I f
Next j
Next i
ReDi mj ar ak( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)
ReDi mvi si b( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)
54

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



For i = 1 To Me. f l xMap. Rows - 1
For j = 1 To Me. f l xMap. Col s - 1
j ar ak( i , j ) = f l xMap. Text Mat r i x( i , j )
I f j ar ak( i , j ) = 0 Then
vi si b( i , j ) = 0 '
El se
vi si b( i , j ) = Round( 1 / j ar ak( i , j ) , 2)
End I f

Next
Next
End Sub






3.5 Prosedure Algoritma Dijkstra

Berikut prosedure yang digunakan pada algoritma Dijkstra:

Di msr c As I nt eger
Di mdest As I nt eger
sr c = get I ndexOf TabName( sFr om)
dest = get I ndexOf TabName( sTo)
I f ( sr c = - 1) Or ( dest = - 1) Then
MsgBox "somet hi ng wr ong! ! ! "
Exi t Sub
End I f
Di mMAX As I nt eger
MAX = f l xMap. Col s

Di mcur r ent As I nt eger
Di mdi st _f c As I nt eger
Di mi As I nt eger
Di mmi n As I nt eger
Di mdo_sear ch As Bool ean
55

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


do_sear ch = Tr ue
cur r ent = sr c
di st _f c = 0
f l xS. Text Mat r i x( 1, cur r ent ) = "Tr ue"
f l xS. r ow = 1
f l xS. col = cur r ent
f l xS. Cel l For eCol or = vbRed
f l xS. Cel l Font Bol d = Tr ue
f l xDi st . Text Mat r i x( 1, cur r ent ) = 0
Do Whi l e do_sear ch
For i = 1 To MAX - 1
I f ( ( myVl ( f l xMap. Text Mat r i x( cur r ent , i ) ) <> 0) And _
( myVl ( f l xDi st . Text Mat r i x( 1, i ) ) >
myVl ( f l xMap. Text Mat r i x( cur r ent , i ) ) + di st _f c) ) Then
f l xDi st . Text Mat r i x( 1, i ) =
myVl ( f l xMap. Text Mat r i x( cur r ent , i ) + di st _f c)
f l xPat h. Text Mat r i x( 1, i ) = cur r ent
End I f
Next i
mi n = I NF
For i = 1 To MAX - 1
I f ( ( myVl ( f l xDi st . Text Mat r i x( 1, i ) ) < mi n) And ( f l xS. Text Mat r i x( 1, i )
= "Fal se") ) Then
mi n = myVl ( f l xDi st . Text Mat r i x( 1, i ) )
cur r ent = i
di st _f c = myVl ( f l xDi st . Text Mat r i x( 1, i ) )
End I f
Next i
f l xS. Text Mat r i x( 1, cur r ent ) = "Tr ue"
I f ( mi n = I NF) Then
do_sear ch = Fal se
End I f
Loop







56

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





















3.6 Flowchart Algoritma Dijkstra














Mulai
Tentukan Vs dan
Vt
Jalur=0 Tentukan Vs(V1)
sebagai T-node Permanen
Cari V2 sementara dengan bobot
terkecil dan tetapkan Predecessor
Ubah status V2 dan tetapkan
sebagai T-node
57

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Tidak


Ya








Gambar 3.17 Flowchart Algoritma Dijkstra




3.7 Flowchart Program

Adapun flowchart dari program untuk menentukan lintasan terpendek dengan
menggunakan algoritma Greedy dan Dijkstra adalah sebagai berikut:

T-
node=Vt
Lintasan terpendek ditemukan
Telusuri jalur Predecessor
Selesai
58

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Start
Tampilkan
Form Utama
Menu Graph
Tampilkan
Form Graph
Input Node Asal
dan Node
Tujuan
Cari Rute
Terpendek
Algoritma
Dijstra
Algoritma
Greedy
Cari Rute terpendek berdasarkan
algoritma
Yang dipilih
Tampilkan Hasil
Ya
Ya
Ya
Tidak
Ya
End
Tidak
Tidak

Gambar 3.18 Flowchart Aplikasi Algoritma Greedy dan Dijkstra


3.7.1 Halaman Utama

Pada halaman utama terdapat beberapa menu antara lain: judul aplikasi, menu utama
dan data graph.
59

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



J udu Aplikasi
Data Graph
Menu Utama

Gambar 3.19 Perancangan Diagram Halaman Utama



Gambar 3.20 Tampilan Output Halaman Utama




3.7.2 Halaman Komputasi

60

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Halaman komputasi adalah halaman untuk input yang dibutuhkan pada saat proses
pencarian jalur terpendek, dan hasil dari komputasi. Gambar 3.21 merupakan
diagram dari halaman komputasi.

Matriks J arak
Pilih Algoritma
Titik Awal
Titik Tujuan
Hasil Komputasi
Proses

Gambar 3.21 Perancangan Diagram Halaman Komputasi


Pada menu perancangan lintasan terpendek terdiri dari menu: Peta, graph, cari rute
terpendek, dan editor.


Gambar 3.22 Tampilan Menu Perancangan Lintasan Terpendek
Untuk menu Peta pada perancangan lintasan terpendek terdiri dari menu: Buka peta
dan hapus peta.

61

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009




Gambar 3.23 Tampilan Menu Peta

Untuk menu Graph pada perancangan lintasan terpendek terdiri dari menu: Buka
graph dan simpan graph.



Gambar 3.24 Tampilan Menu Graph

Untuk menu Cari Rute Terpendek pada perancangan lintasan terpendek terdiri dari
tampilan kalkulasi jarak dengan pemilihan algoritma Greedy atau Dijkstra.


62

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Gambar 3.25 Tampilan Menu Cari Lintasan Terpendek

Untuk menu Editor pada perancangan lintasan terpendek terdiri dari menu:

1. Titik terdiri dari:
a. Titik Baru
b. Ganti Warna Background
c. Ganti Warna Border
d. Ubah Ukuran


Gambar 3.26 Tampilan Menu Editor Titik

63

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


2. Jalan terdiri dari:
a. Garis
b. Panah


Gambar 3.27 Tampilan Menu Editor Jalan

3. Hapus terdiri dari:
a. Jalan
b. Titik


Gambar 3.28 Tampilan Menu Editor Hapus

4. Tambahkan Caption terdiri dari:
a. Titik terdiri dari Tengah, Atas, Bawah
64

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


b. Jalan

Gambar 3.29 Tampilan Menu Tambah Caption


3.7.3 Halaman Hasil

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:


65

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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
66

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



3.7.4 Kebutuhan Perangkat

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 3.12
Beda
Jarak
Lintasan
Terpendek Algoritma Greedy dan Dijktra
No. Nama File Jarak Lintasan Terpendek
Dijkstra Greedy
67

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009





0
10
20
30
40
50
60
70
1 2 3 4 5
Dijkstra Greedy
Jarak Lintasan Terpendek Algoritma
Greedy dan Dijkstra
J
a
r
a
k

L
i
n
t
a
s
a
n

T
e
r
p
e
n
d
e
k

Gambar 3.34 Grafik Jarak Lintasan Terpendek Algoritma Greedy dan Dijkstra













1 Coba 1. tzr 10 13
2 Coba 2.tzr 12 27
3 Coba 3.tzr 14 38
4 Coba 4.tzr 18 54
5 Coba 5.tzr 20 59
68

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009






BAB 4

KESIMPULAN DAN SARAN


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
69

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


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.

C.L.LIU, 1995. Dasar-dasar Matematika Diskrit, Jakarta. PT. Gramedia Pustaka
Utama.

Jek Siang, Jong, 2002. Matematika Diskrit dan Aplikasinya pada Ilmu Komputer,
Yogyakarta, Andi.

James, R. Evans et al Optimization for Network and Graph.

Kurniasari, Yeni, 2006. Penerapan Algoritma Greedy.

Lutfi, Hendratmono Arief, 2008. Algoritma Dijkstra untuk menemukan jarak
terpendek dengan menggunakan strategi greedy.

Prama, Irvan, 2006. Algoritma Greedy Untuk Mencari Lintasan Terpendek.

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.
70

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009



Townsend, Michael, 1987. Discrete Mathemathic : Applied Combinatorics and Graph
Theory, The Benjamin/Cummings Publishing Company, Inc.

Y. Fazmah, Arif, 2006. Desain dan Analisis Strategi, Bandung.

LAMPIRAN : LISTING PROGRAM




Opt i on Expl i ci t
Di msFr omAs St r i ng
Di msTo As St r i ng
Const I NF = 32767 ' i nf i ni t y, so bi g so f ar , i t shoul d end somewher e
anyway : )
Di msRESULT( 1 To 100) As St r i ng
Di mi RES_SI ZE As I nt eger
Pr i vat e Funct i on Tot al J ar ak( pat h As St r i ng) As Doubl e
Di mx1 As I nt eger , x2 As I nt eger
Tot al J ar ak = 0
Di mAr r Pat h( ) As St r i ng, a As I nt eger
Ar r Pat h = Spl i t ( pat h, " ")
For a = LBound( Ar r Pat h) To UBound( Ar r Pat h) - 2
I f a < UBound( Ar r Pat h) Then
x1 = Ar r Pat h( a)
x2 = Ar r Pat h( a + 1)
Tot al J ar ak = Tot al J ar ak + j ar ak( x1, x2)
End I f
Next
x1 = Ar r Pat h( UBound( Ar r Pat h) - 1)
x2 = Ar r Pat h( LBound( Ar r Pat h) )
Tot al J ar ak = Tot al J ar ak + j ar ak( x1, x2)
End Funct i on
Pr i vat e Funct i on Car i Ter pendek( awal As I nt eger )
' On Er r or GoTo er r handl e
Di mNc As I nt eger
Di ms As I nt eger , a As I nt eger , b As I nt eger , l As I nt eger , k As
I nt eger , X As I nt eger , j As I nt eger , u As
I nt eger , ndx As I nt eger
Di mN As I nt eger , kot adi pi l i h As I nt eger , i As I nt eger
Di mM As I nt eger
Di mp( ) As Si ngl e
Di mt ot P As Si ngl e
Di mJ s( ) As Doubl e
Di mq( ) As Doubl e
Di mT As I nt eger
Di mr As Doubl e
Di mkt As St r i ng, kt 2 As St r i ng
Di mt emu As Bool ean
Di mPanj angJ al ur ( ) As Doubl e
Di mJ l r Ter pendek( ) As Doubl e
Di mbt emp( )
Di mt emp As Doubl e, t emp2 As Doubl e
71

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


Di mHasi l ( ) As St r i ng
N = UBound( j ar ak) ' j l h
M = UBound( j ar ak)
Nc = 1
For a = 1 To N
For b = 1 To N
Tho( a, b) = Ti j
Dt ho( a, b) = 0
Next
Next
Nc = 1
ReDi mJ l r Ter pendek( Ncmax)
Di mol dt i mer As Si ngl e
ol dt i mer = Ti mer
Do
ReDi mTabu( N, N)
s = 0
l = 0
l = l + 1
For k = 1 To N
Tabu( k, l ) = k
Next
s = s + 1
ReDi mp( N)
For X = 1 To N - 1
T = X
ReDi mJ s( N)
For a = 1 To N
I f Tabu( a, T) <> 0 Then
J s( Tabu( a, T) ) = J s( Tabu( a, T) ) + 1
End I f
Next
kt = ""
For a = 1 To N
kt = kt & J s( a) & " "
Next
For j = 1 To N
t ot P = 0
For u = 1 To N
I f Not Car i Tabu( j , u, T) Then
t ot P = t ot P + Tho( Tabu( j , T) , u) ^ al pa *
vi si b( Tabu( j , T) , u) ^ Bet a
End I f
Next u
kt = ""
kt 2 = ""
For u = 1 To N
I f Car i Tabu( j , u, T) = Fal se Then
p( u) = ( Tho( Tabu( j , T) , u) ^ al pa * vi si b( Tabu( j ,
T) , u) ^ Bet a) / t ot P
El se
p( u) = 0
End I f
kt = kt & For mat ( p( u) , "#, ##0. 000") & " "
Next
' komul at i f
For u = 1 To N
I f u = 1 Then
q( u) = p( u)
El se
72

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


q( u) = q( u - 1) + p( u)
End I f
kt 2 = kt 2 & For mat ( q( u) , "#, ##0. 000") & " "
Next
' r andom
ul ang_r andom:
r = Rnd( 1)
t emu = Fal se
ndx = 1
Do Whi l e t emu = Fal se
I f r < q( ndx) Then
t emu = Tr ue
kot adi pi l i h = ndx
El seI f ( r > q( ndx) ) And ( r <= q( ndx + 1) ) Then
t emu = Tr ue
kot adi pi l i h = ndx + 1
End I f
ndx = ndx + 1
Loop
Tabu( j , T + 1) = kot adi pi l i h
kt = ""
For u = 1 To T + 1
kt = kt & ( Tabu( j , u) ) & " "
Next
Hasi l ( Nc, j ) = kt
Next j
T = T + 1
Next
ReDi mPanj angJ al ur ( N)
J l r Ter pendek( Nc) = 1. 79769313486232E+307
t emp = 0
For k = 1 To N
t emp = Hi t ungLk( k)
Panj angJ al ur ( k) = t emp
I f t emp < J l r Ter pendek( Nc) Then
J l r Ter pendek( Nc) = t emp
End I f
Next
For k = 1 To N
Panj angJ al ur ( k) = Hi t ungLk( k)
For s = 1 To N - 1
Dt ho( Tabu( k, s) , Tabu( k, s + 1) ) = _
Dt ho( Tabu( k, s) , Tabu( k, s + 1) ) + vi si b( Tabu( k, s) ,
Tabu( k, s + 1) ) / Panj angJ al ur ( k)
Next
Next
kt = ""
For i = 1 To N
kt = ""
For k = 1 To N
Tho( i , k) = r ho * Tho( i , k) + Dt ho( i , k)
kt = kt & For mat ( Tho( i , k) , "#, ##0. 0000") & " "
Next
Next
Nc = Nc + 1
DoEvent s
Loop Unt i l ( Nc > Ncmax)
Di mBandi ngJ ar ak As Doubl e, sk As I nt eger
Bandi ngJ ar ak = 1. 79769313486232E+307
t emp = 0
73

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


For a = LBound( Hasi l ) To UBound( Hasi l )
t emp = Tot al J ar ak( Hasi l ( a, awal ) )
I f t emp < Bandi ngJ ar ak Then
Bandi ngJ ar ak = t emp
sk = a
End I f
Next
Pr i vat e Funct i on konver si Hasi l ( ha As St r i ng) As St r i ng
makeAl l Li nes_Bl ack
Di mar r Ha( ) As St r i ng, Ka As St r i ng, a As I nt eger , sF As St r i ng, sT
As St r i ng
ar r Ha( ) = Spl i t ( ha, " ")
' MsgBox f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( 1) ) ) . sCapt i on

For a = LBound( ar r Ha) To UBound( ar r Ha) - 1
Ka = Ka & f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( a) ) ) . sCapt i on & "
- "
' Debug. Pr i nt f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( A) ) ) . sCapt i on
I f a = 0 Then
sF = f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( a) ) ) . sCapt i on
sT = f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( a) ) ) . sCapt i on
El se
sF = sT
sT = f r mPet a. t heBl ockCol l ect i on( I nt ( ar r Ha( a) ) ) . sCapt i on
r edLI NE sF, sT
sF = sT
End I f
' MsgBox Ka
Next
r edLI NE sF, sT
konver si Hasi l = Ka
End Funct i on
Pr i vat e Sub CbAl gor i t ma_KeyPr ess( KeyAsci i As I nt eger )
KeyAsci i = 0
End Sub
Pr i vat e Sub cmdCal cDat a_Cl i ck( )
Di mi As I nt eger
Di mj As I nt eger
Di mt oI ndex As I nt eger
f l xMap. Rows = f r mPet a. t heBl ockCol l ect i on. Count + 1
f l xMap. Col s = f r mPet a. t heBl ockCol l ect i on. Count + 1
I f f r mPet a. t heBl ockCol l ect i on. Count > 0 Then
f l xMap. Fi xedRows = 1
f l xMap. Fi xedCol s = 1
End I f
For i = 0 To f l xMap. Col s - 1
f l xMap. Col Wi dt h( i ) = 530
Next i
For i = 1 To f r mPet a. t heBl ockCol l ect i on. Count
f l xMap. r ow = i
f l xMap. col = 0
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = 0
f l xMap. col = i
f l xMap. Text = f r mPet a. t heBl ockCol l ect i on( i ) . sCapt i on
f l xMap. r ow = i
For j = 1 To f l xMap. Col s - 1
f l xMap. Text Mat r i x( i , j ) = "0"
f l xMap. col = j
f l xMap. Cel l For eCol or = vbBl ack
74

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


f l xMap. Cel l Font Bol d = Fal se
Next j
For j = 1 To f r mPet a. t heLi neCol l ect i on. Count
I f f r mPet a. t heLi neCol l ect i on( j ) . sFr om=
f r mPet a. t heBl ockCol l ect i on( i ) . TagI D Then
t oI ndex =
f r mPet a. t heBl ockCol l ect i on. get I ndexFr omTag( f
r mPet a. t heLi neCol l ect i on( j ) . sTo)
f l xMap. col = t oI ndex
f l xMap. Text = f r mPet a. t heLi neCol l ect i on( j ) . sCapt i on
I f ( f l xMap. Text = "") Then f l xMap. Text = "1" ' don' t
al l ow empt y! ! ! ! ( f or l i nes wi t h no capt i on)
f l xMap. Cel l For eCol or = vbRed
f l xMap. Cel l Font Bol d = Tr ue
End I f
Next j
Next i
' I nput J ar ak
ReDi mj ar ak( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)
ReDi mvi si b( Me. f l xMap. Rows - 1, Me. f l xMap. Rows - 1)
For i = 1 To Me. f l xMap. Rows - 1
For j = 1 To Me. f l xMap. Col s - 1
j ar ak( i , j ) = f l xMap. Text Mat r i x( i , j )
I f j ar ak( i , j ) = 0 Then
vi si b( i , j ) = 0 '
El se
vi si b( i , j ) = Round( 1 / j ar ak( i , j ) , 2)
End I f
Next
Next
End Sub
Pr i vat e Sub pr epar eFSP( )
Di mi As I nt eger
f l xS. Rows = 2
f l xDi st . Rows = 2
f l xPat h. Rows = 2
f l xS. Col s = f l xMap. Col s
f l xDi st . Col s = f l xMap. Col s
f l xPat h. Col s = f l xMap. Col s
I f f l xS. Col s > 1 Then
f l xS. Fi xedRows = 1
f l xDi st . Fi xedRows = 1
f l xPat h. Fi xedRows = 1
f l xS. Fi xedCol s = 1
f l xDi st . Fi xedCol s = 1
f l xPat h. Fi xedCol s = 1
End I f
For i = 0 To f l xS. Col s - 1
f l xS. Col Wi dt h( i ) = f l xMap. Col Wi dt h( i )
f l xDi st . Col Wi dt h( i ) = f l xMap. Col Wi dt h( i )
f l xPat h. Col Wi dt h( i ) = f l xMap. Col Wi dt h( i )
f l xS. Text Mat r i x( 0, i ) = f l xMap. Text Mat r i x( 0, i )
f l xDi st . Text Mat r i x( 0, i ) = f l xMap. Text Mat r i x( 0, i )
f l xPat h. Text Mat r i x( 0, i ) = f l xMap. Text Mat r i x( 0, i )
Next i
For i = 1 To f l xS. Col s - 1
f l xS. Text Mat r i x( 1, i ) = "Fal se"
f l xS. r ow = 1
f l xS. col = i
f l xS. Cel l For eCol or = vbBl ack
75

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009


f l xS. Cel l Font Bol d = Fal se
f l xDi st . Text Mat r i x( 1, i ) = "I NF"
f l xPat h. Text Mat r i x( 1, i ) = "0"
Next i
End Sub
Pr i vat e Sub cmdFi ndShor t Pat h_Cl i ck( )
I f Me. CbAl gor i t ma. Text = "Dj akst r a" Then
pr epar eFSP
Di msr c As I nt eger
Di mdest As I nt eger
sr c = get I ndexOf TabName( sFr om)
dest = get I ndexOf TabName( sTo)
I f ( sr c = - 1) Or ( dest = - 1) Then
MsgBox "somet hi ng wr ong! ! ! "
Exi t Sub
End I f
' wor ki ng wi t h f i r st r ow al ways!
f l xS. r ow = 1
f l xDi st . r ow = 1
f l xPat h. r ow = 1
Di mMAX As I nt eger
MAX = f l xMap. Col s
Opt i on Base 1
Publ i c Sub CboKot a_Cl i ck( )
Di mX As I nt eger
j l hKot a = CI nt ( CboKot a. Text )
j l hSemut = j l hKot a
I f CboKot a. Text <> "" Then
Fl ex. Rows = j l hKot a + 1
For X = 1 To j l hKot a
Fl ex. Text Mat r i x( X, 0) = X
Next
Fl ex. col = 2
Fl ex. r ow = 2
End I f
End Sub










76

Henny Syahriza Lubis : Perbandingan Algoritma Greedy Dan Dijkstra Untuk Menentukan Lintasan Terpendek, 2009.
USU Repository 2009

Anda mungkin juga menyukai