PERBANDINGAN PENGGUNAAN ALGORITMA
DIJKSTRA
DAN ALGORITMA
FLOYD-WARSHALL
UNTUK PENCARIAN
JALUR TERPENDEK PADA BUS TRANS JOGJA
Skripsi
Diajukan Untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Komputer
Program Studi Teknik Informatika
Oleh:
Agustinus Wikrama Darmadipta
095314053
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2013
i
SKRIPSI
PERBANDINGAN PENGGUNAAN ALGORITMA
DIJKSTRA
DAN ALGORITMA
FLOYD-WARSHALL
UNTUK PENCARIAN
JALUR TERPENDEK PADA BUS TRANS JOGJA
Oleh:
Agustinus Wikrama Darmadipta
NIM: 095314053
Telah disetujui oleh:
Dosen Pembimbing Tugas Akhir
Sri Hartati Wijono, S.Si., M. Kom. Tanggal: ………
ii
LEMBAR MOTTO
The dreams cannot come to you.
The only one who can make the distance between you and your dreams
getting closer is yourself.
SO GO CHASE IT!
iv
PUBLIKASI KARYA ILMIAH UNTUK KEPERLUAN AKADEMIS
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma:
Nama : Agustinus Wikrama Darmadipta
Nomor Mahasiswa : 095314053
Demi mengembangkan ilmu pengetahuan, saya memberikan kepada perpustakaan
Universitas Sanata Dharma karya ilmiah saya yang berjudul:
PERBANDINGAN PENGGUNAAN ALGORITMA DIJKSTRA DAN
ALGORITMA FLOYD-WARSHALL UNTUK PENCARIAN JALUR
TERPENDEK PADA BUS TRANS JOGJA
Beserta perangkat yang diperlukan. Dengan demikian saya memberikan kepada
Perpustakaan Universitas Sanata Dharma hak untuk menyimpan, mengalihkan dalam
bentuk media lain, mengelolanya dalam bentuk pangkalan data, mendistribusikan
secara terbatas, dan mempublikasikannya di Internet atau media lain untuk
kepentingan akademis tanpa perlu meminta izin dari saya maupun memberikan
royalti kepada saya selama tetap mencantumkan nama saya sebagai penulis.
Demikian pernyataan ini saya buat dengan sebenarnya.
Yogyakarta, 22 Agustus 2013
Agustinus Wikrama Darmadipta
vi
ABSTRACT
The confusing about how to decide what trayek someone must take in the case
of Bus Trans Jogja has became a problem for the user that want to go to a destination
from the source that he wanted in Yogyakarta. That problem made the writer want to
solve it by making an Android based mobile application that can give an advice to the
user of Bus Trans Jogja about the trayek that he must take to get to a destination by
the shortest path .
The shortest path is calculated using two shortest path algorithms, Dijkstra
and Floyd-Warshall algorithm. Dijkstra algorithm, using greedy as its method, on the
other way Floyd-Warshall algorithm using dynamic programming as it method. The
reason why using those two algorithm is because this research want to know which
algorithm that more optimal to be implemented in the case of the shortest path search
in the route of Bus Trans Jogja.
Comparisons that be used to decide the optimal algorithm are complexity of
asimptotik time and the running time of each algorithm. The validity that have given
by each algorithm is also a thing that decide the optimality of each algorithm.
viii
tidak menyerah dan selalu bersemangat untuk menyelesaikan tugas
akhir ini dengan baik dan tepat waktu.
5. Fransiskus Ageng Widodo dan Audris Evan Utomo, selaku teman
penulis yang telah membantu dalam menyelesaikan permasalahan
coding yang penulis alami sewaktu pembuatan aplikasi.
6. Ardha, Eki, Aden, Yosi, Surya, dan Fidi yang selalu menghibur
penulis dalam menyelesaikan tugas akhir ini sehingga penulis dapat
selalu ceria ketika mengerjakan tugas akhir bersama-sama di
laboratorium komputer basis data.
Yogyakarta, 22 Agustus 2013
Agustinus Wikrama Darmadipta
Penulis
x
3.4. Diagram Aktivitas ... 51
3.4.1. Diagram Aktivitas Menentukan Titik Awal ... 52
3.4.2. Diagram AktivitasMenentukan Titik Tujuan ... 52
3.4.3. Diagram Aktivitas Mencari Halte ... 53
3.4.4. Diagram Aktivitas Melihat Jalur Bus yang Ditempuh, Melihat Nilai Jarak yang Ditempuh, Melihat Saran Trayek Bus yang Harus Dipilih, dan Melihat Running Time Algoritma ... 54
3.4.5. Diagram Aktivitas Melihat Help ... 55
3.5. Diagram Sekuensial ... 55
3.5.1. Diagram Sekuensial Menentukan Titik Awal ... 55
3.5.2. Diagram Sekuensial Menentukan Titik Tujuan ... 56
3.5.3. Diagram Sekuensial Mencari Halte ... 56
3.5.4. Diagram Sekuensial Melihat Jalur Bus yang Ditempuh, Melihat Nilai Jarak yang Ditempuh, Melihat Saran Trayek Bus yang Harus Dipilih, dan Melihat Running Time Algoritma ... 57
3.5.5. Diagram Sekuensial Melihat Help ... 58
3.6. Diagram Kelas ... 59
3.7. Kelas Analisis ... 60
3.8. Operasi dan Atribut Tiap Kelas ... 63
3.9. Cara Pengujian... 72
3.10. Skenario Pengujian ... 73
3.11. Desain Antarmuka ... 78
3.11.1. Desain Antarmuka Tampilan Awal ... 79
3.11.2. Desain Antarmuka Jalur Terpendek Telah Ditemukan ... 79
3.11.3. Desain Antarmuka Tampilan Details ... 80
BAB IV :IMPLEMENTASI ... 81
4.1. Spesifikasi Perangkat Keras dan Lunak ... 81
4.2. Pengolahan Data ... 82
4.3. Implementasi Kelas Graph ... 83
4.3.1. Implementasi Metode Greedy dengan Algoritma Dijkstra ... 84
xii
Lampiran 8: Source Code Kelas TemporaryJalur_n_Jarak ... 154
Lampiran 9: Source Code Kelas PathOverlay ... 155
Lampiran 10: Source Code Kelas SitesOverlay ... 156
Lampiran 11: Source Code Kelas Help ... 166
Lampiran 12: Source Code Kelas MainActivity ... 166
Lampiran 13: Source Code Kelas Map ... 168
xiv
Gambar 4.1 Gambar Source Code untuk Algoritma Dijkstra ... 87
Gambar 4.2 Gambar Source Code untuk Algoritma Floyd-Warshall ... 89
Gambar 4.3 Gambar Source Code untuk Perpindahan Bus ... 92
Gambar 4.4 Gambar Source Code untuk Penghitungan Running Time Algoritma ... 93
Gambar 4.5 Tampilan Halaman Menu ... 94
Gambar 4.6 Title.xml ... 95
Gambar 4.7 Tampilan Halaman Peta ... 97
Gambar 4.8 activity_main.xml ... 98
Gambar 4.9 mydropdownstle.xml ... 99
Gambar 4.10 Tampilan Halaman Details ... 100
Gambar 4.11 Source Code Halaman Details ... 100
Gambar 4.12 Tampilan Halaman Help ... 101
Gambar 4.13 help.xml ... 108
Gambar 5.1Source Code Method getMin ... 116
Gambar 5.2Source Code Method adjust_sPath ... 117
Gambar 5.3 Source Code Method displayPaths ... 118
Gambar 5.4 Source Code Method findIndex ... 119
Gambar 5.5Source Code Method dijkstra ... 120
Gambar 5.6Source Code Method findIndex ... 121
Gambar 5.7Source Code Method deepCopyIntMatrix ... 122
Gambar 5.8Source Code Method Floyd ... 124
xvi
Tabel 3.10 Tabel Tanggung Jawab Kelas Analisis ... 63
Tabel 3.11 Tabel Operasi dan Atribut Kelas Graph ... 66
Tabel 3.12 Tabel Operasi dan Atribut Kelas Halte ... 67
Tabel 3.13 Tabel Operasi dan Atribut Kelas TemporaryJalur_n_Jarak ... 68
Tabel 3.14 Tabel Operasi dan Atribut Kelas MainActivity ... 68
Tabel 3.15 Tabel Operasi dan Atribut Kelas Map ... 70
Tabel 3.16 Tabel Operasi dan Atribut Kelas PathOverlay ... 70
Tabel 3.17 Tabel Operasi dan Atribut Kelas SitesOverlay ... 72
Tabel 3.18 Tabel Operasi dan Atribut Kelas Help ... 72
Tabel 3.19 Skenario Pengujian ... 78
Tabel 5.1 Tabel Hasil Pengujian ... 114
Tabel 5.2 Tabel Hasil Pengujian Running Time Kedua Algoritma ... 126
xviii
penelitian ini adalah algoritma yang masing-masing menggunakan
strategi/cara berpikir greedy dan dynamic programming (pemrograman
dinamis). Algoritma Dijkstra merupakan salah satu algoritma yang digunakan
dalam penelitian ini di mana cara kerja algoritma tersebut adalah
menggunakan strategi greedy. Algoritma jalur terpendek yang juga digunakan
dalam penelitian ini yang menggunakan strategi pemrograman dinamis adalah
algoritma Floyd – Warshall. Alasan digunakannya kedua algoritma tersebut
adalah kedua algoritma tersebut telah sering digunakan untuk kasus pencarian
jalur terpendek. Sebagai contoh algoritma Dijkstra pernah dilakukan dalam
penilitian kasus pencarian jalur terpendek yang ditempuh oleh sebuah taksi
(Noviani, Enik., dkk., 2012) dan pencarian jalur terpendek yang ditempuh
oleh dua transportasi umum di Jakarta, yakni Bus Trans Jakata dan KRL
commuter line (Arifianto, Sofyan., 2012). Algoritma Floyd – Warshall juga
telah sering digunakan dalam beberapa penlitian mengenai pencarian jalur
terpendek, seperti pada penilitian pencarian rute terpendek di kota Surabaya
(Purwananto, Yudhi., dkk., 2005) dan pencarian rute terpendek antar gedung
di suatu kampus (Fanani, Lutfi., 2012).
Kasus pencarian jalur terpendek yang digunakan dalam penelitian ini
adalah kasus pencarian jalur terpendek pada Bus Trans Jogja. Kasus Bus
Trans Jogja sesuai digunakan untuk pencarian jalur terpendek karena Bus
Trans Jogja memiliki total enam trayek di mana masing-masing trayek
memiliki jalur-jalur perjalanan yang berbeda untuk menuju suatu tempat
para pengguna tidak mengalami kebingungan dalam menentukan Bus Trans
Jogja yang harus dipakai guna mencapai suatu tujuan tertentu.
1.2. Rumusan Masalah
Seberapa optimal dan efisienkah penggunaan strategi berpikir greedy
(algoritma Dijkstra) dan pemrograman dinamis (algoritma Floyd – Warshall)
dalam kasus penentuan jalur terpendek yang ditempuh oleh Bus Trans Jogja?
Rumusan masalah di atas diselesaikan dengan mencari nilai dari Big
Oh dan waktu yang ditempuh oleh setiap algoritma dalam menyelesaikan
kasus pencarian jalur terpendek pada Bus Trans Jogja. Nilai Big Oh dan waktu
yang diperoleh kemudian akan dibandingkan satu sama lain untuk
menentukan algoritma mana yang paling optimal untuk kasus tersebut.
1.3. Tujuan Penelitian
Tujuan yang ingin dicapai dari penelitian ini adalah:
1. Untuk mendapatkan kompleksitas waktu asimtotik dan nilai kecepatan
waktu dari algoritma greedy dan pemrograman dinamis pada kasus
pencarian jalur terpendek pada Bus Trans Jogja.
1.4. Batasan Masalah
Batasan masalah dari penelitian ini adalah:
Trans Jogja. Kesesuaian tersebut diukur berdasarkan perbandingan dari Big
Oh dan waktu penyelesaian yang dihasilkan oleh masing-masing algoritma.
Manfaat yang lain yang diperoleh dari penelitian ini adalah sebuah
aplikasi berbasis android yang dapat digunakan oleh para pengguna Bus Trans
Jogja dalam menentukan bus yang harus dipakai dalam menuju ke suatu
tujuan tertentu. Aplikasi tersebut akan mampu memberikan keluaran berupa
saran kepada pengguna mengenai bus dengan trayek mana yang harus dipakai
guna menuju suatu tempat dengan cepat. Aplikasi tersebut diharapkan
memberi pertolongan kepada masyarakat pengguna Bus Trans Jogja, terutama
para wisatawan pengguna Bus Trans Jogja yang belum paham betul mengenai
jalur-jalur yang ditempuh oleh Bus Trans Jogja dalam mencapai suatu tujuan
tertentu.
satu algoritma yang mampu digunakan untuk menyelesaikan satu masalah.
Masalah yang timbul dari hal tersebut kemudian adalah dalam memilih
algoritma manakah yang paling optimal atau yang terbaik dalam
menyelesaikan masalah yang dihadapi tersebut. Menurut Suryadi MT (1996),
pemilihan algoritma terbaik dapat dilakukan dengan memperhatikan
kriteria-kriteria berikut ini:
1. ada output
Berdasarkan pada definisi algoritma bahwa algoritma
digunakan untuk menyelesaikan suatu masalah, maka berarti
suatu algoritma haruslah mempunyai output. Output tersebut
merupakan sebuah solusi dari masalah yang dipecahkan.
2. efektivitas dan efisiensi
Efektivitas suatu algoritma dapat dilihat dari solusi yang
dihasilkan. Solusi tersebut dikatakan efektif bila sesuai dengan
masalah yang dipecahkan dan mampu memecahkan masalah
tersebut. Jadi dapat dikatakan bahwa suatu algoritma dikatakan
efektif jika tepat guna.
Efisiensi suatu algoritma diukur berdasarkan waktu proses dan
penggunaan memory dalam menyelesaikan suatu masalah.
Semakin kecil waktu proses dan memory yang dibutuhkan
dalam menyelesaikan suatu masalah, maka semakin efisien
pula suatu algoritma tersebut.
tersusun dengan baik sehingga memudahkan untuk
dilakukannya pemeriksaan ulang terhadap algoritma tersebut.
Selain untuk hal tersebut, algoritma yang memiliki struktur
yang baik dapat memungkinkan memiliki waktu proses yang
relatif singkat.
Berdasarkan kelima hal di atas, maka algoritma yang baik dapat
didefinisikan sebagai suatu algoritma yang memiliki output yang tepat guna
(efektif) dalam waktu yang relatif singkat dan penggunaan memory yang
relative sedikit (efisien) dengan langkah yang berhingga dan prosesnya
berakhir dengan baik dalam keadaan diperoleh suatu solusi ataupun tidak
adanya solusi (Suryadi MT, 1996).
2.2. Pengertian Analisis Algoritma
Analisis algoritma dilakukan dengan memperhatikan dua hal, yaitu
waktu tempuh dan jumlah memory yang digunakan. Waktu tempuh memiliki
definisi sebagai waktu yang diperlukan suatu algoritma dalam mencari solusi
atas permasalahan yang diberikan. Waktu yang singkat memberi arti bahwa
algoritma yang digunakan efisien. Waktu tempuh yang diperlukan oleh suatu
algoritma menurut Suryadi MT (1996) dipengaruhi oleh beberapa hal, yaitu:
1. banyak langkah
Banyaknya langkah yang digunakan dalam suatu algoritma
akan menentukan cepat lambatnya proses yang dilakukan oleh
tidak sesuai, maka waktu tempuh yang digunakan algoritma
tersebut pun akan membesar (lambat).
Jumlah memory juga perlu diperhatikan dalam menganalisis suatu
algoritma agar suatu proses dapat berjalan lancar tanpa ada hambatan. Hal
yang mempengaruhi dalam pemakaian memory adalah jenis variable dan data
yang digunakan pada suatu algoritma. Oleh karena itu pengalokasian memory
perlu diperhitungan berdasarkan dua hal tersebut agar lambatnya waktu
tempuh yang terjadi karena kekurangan memory dapat dihindari.
Kompleksitas waktu asimtotik algoritma juga merupakan hal yang
peru diperhatikan dalam melakukan analisis terhadap suatu algoritma.
Kompleksitas waktu asimtotik algoritma dinyatakan dalam suatu fungsi F(N)
untuk kebutuhan waktu tempuh dan penyimpanan untuk sejumlah N masukan
data. Fungsi F(N) tersebutlah yang kemudian dinyatakan sebagai Big Oh. Jika
F(N) adalah fungsi Polinomial dalam N dengan derajat (tingkat) m, yang
ditulis dengan notasi:
F(N) = amNm + am-1Nm-1 + . . . + a1N + a0
maka Big Oh dari F(N) adalah Nm yang dinotasikan: F(N) = O(Nm) (Suryadi MT, 1996). Berikut ini adalah pengelompokan algoritma berdasarkan notasi
Big Oh :
Kelompok
Algoritma Nama
O(1) Konstan
berikut ini. Graf ini menggambarkan hubungan dari suatu tempat ke tempat
yang lain. Node menggambarkan suatu tempat dan vertex menggambarkan
bobot atau jarak yang menghubungkan antar tempat.
Gambar 2.1Contoh Graph (Dijkstra)
Langkah pertama yang dilakukan pada strategi ini adalah menentukan
titik awal dan titik tujuan (dalam kasus ini node satu adalah titik awal dan
node sepuluh adalah titik tujuan). Berangkat dari node satu, terdapat tiga jalur
yang dapat ditempuh yakni jalur dengan nilai jarak 300, 200, dan 350. Jalur
yang dipilih adalah jalur dengan nilai jarak 200 karena merupakan nilai yang
paling optimal (rendah) di antara ketiga nilai tersebut. Pemilihan jalur tersebut
menunjukkan bahwa node kedua yang dilalui adalah node tiga. Pada node
tiga, nilai jarak yang kemudian dipilih adalah nilai 280 yang kemudian
membawa menuju node enam dari nilai 350, 280, dan 410. Node delapan
kemudian menjadi tujuan berikutnya setelah melakukan pemilihan nilai jarak
yang paling optimal antara nilai 350 dan 380. Langkah berikutnya adalah
memilih satu-satunya nilai yang membawa ke tujuan akhir (node sepuluh),
yakni memilih jalur dengan nilai 380. Pencarian jalur terpendek menggunakan
7. d (7) = ?
8. d (8) = ?
9. d (9) = ?
10. d (10) = ?
1 - 3
Iterasi II (posisi awal di titik 3)
1. d(2) = min {d(2), d(3) + a(3,2)} = min (300, 200 + ?) = 300
Iterasi III (posisi awal di titik 2)
1. d(4) = min {d(2), d(2) + a(2,4)} = min (350, 300 + ?) = 350
2. d(5) = min {d(5), d(2) + a(2,5)} = min (550, 300 + 320) = 550
3. d(6) = min {d(6), d(2) + a(2,6)} = min (480, 300 + 350) = 480
4. d(7) = min {d(7), d(2) + a(2,7)} = min (610, 300 + 400) = 610
Iterasi VI (posisi awal di titik 5)
Iterasi VII (posisi awal di titik 7)
1. d(8) = min {d(8), d(7) + a(7,8)} = min (760, 550 + 210) = 760
2. d(9) = min {d(9), d(7) + a(7,9)} = min (780, 550 + 290) = 780
3. d(10) = min {d(10), d(7) + a(7,10)} = min (?, 550 + ?) = ?
1 – 3 – 5 – 8
Iterasi VIII (posisi awal di titik 8)
1. d(9) = min {d(9), d(8) + a(8,9)} = min (780, 760 + ?) = 780
2. d(10) = min {d(10), d(8) + a(8,10)} = min (?, 760 + 380) = 1140
1 – 3 – 5 – 9
Iterasi IX (posisi awal di titik 9)
1. d(10) = min {d(10), d(9) + a(9,10)} = min (1140, 780 + 280) =
1060
1 – 3 – 5 – 9 – 10
nilai yang terdapat pada vertex-vertex tersebut menggambarkan nilai jarak
antara satu node ke node yang lain.
Gambar 2.2 Contoh Graph (Pemrograman Dinamis)
Langkah pertama yang dilakukan adalah ambil salah satu node sebagai
tujuan, dalam hal ini node dengan label sepuluh adalah tujuan yang ingin
dicapai. Berangkat dari hal tersebut dapat dilihat bahwa untuk mencapai node
sepuluh tersebut perlu melalui node delapan atau sembilan. Berdasarkan hal
tersebut maka dihasilkanlah sebuah table berikut ini yang menggambarkan
langkah pertama.
Tabel 2.2 Langkah I Strategi Pemrograman Dinamis
Langkah yang dilakukan berikutnya adalah menentukan jalur
terpendek untuk menuju node delapan dan sembilan yang kemudian menuju
ke node tujuan. Jika berangkat melalui node lima maka nilai jarak yang
870 (200+670). Oleh karena itu, nilai jarak yang dipilih kemudian adalah 810.
Tabel yang menggambarkan hasil dari langkah ini adalah tabel 2.4:
Langkah
Tabel 2.4Langkah III Strategi Pemrograman Dinamis
Langkah keempat yang juga merupakan langkah terakhir untuk kasus
ini adalah menentukan nilai jalur terpendek jika melalui node satu. Nilai-nilai
jarak yang dihasilkan adalah 1130 (300+830), 1060 (200+860), dan 1160
(350+810). Berdasarkan nilai-nilai yang dihasilkan tersebut maka 1060 adalah
nilai yang dipilih. Tabel yang dihasilkan dari langkah ini adalah tabel 2.5:
Langkah
Tabel 2.5Langkah IV Strategi Pemrograman Dinamis
Nilai tersebut merupakan nilai akhir yang didapat dari kasus ini. Nilai
1060 juga merupakan nilai jarak terpendek yang dihasilkan untuk mencapai
node sepuluh dari node satu. Hal tersebut menunjukkan bahwa jalur
1-3-5-9-10 merupakan jalur yang harus ditempuh agar hasil yang dicapai adalah
optimal (jalur terpendek).
Salah satu algoritma pencarian jalur terpendek yang menggunakan
strategi pemrograman dinamis dalam cara penyelesaiannya adalah algoritma
9 ? ? ? ? ? ? ? ? 0 280
10 ? ? ? ? ? ? ? ? ? 0
Tabel 2.7Iterasi I Algoritma Floyd – Warshall
Iterasi II
Tabel 2.8 Iterasi II Algoritma Floyd – Warshall
5 ? ? ? ? 0 ? ? 210 230 ?
Tabel 2.11Iterasi V Algoritma Floyd – Warshall
Iterasi VI
Tabel 2.12Iterasi VI Algoritma Floyd – Warshall
Iterasi VII
1 2 3 4 5 6 7 8 9 10
1 0 300 200 350 550 480 550 760 780 ?
2 ? 0 ? ? 320 350 400 530 550 ?
1 0 300 200 350 550 480 550 760 780 1060
Tabel 2.15Iterasi IX Algoritma Floyd – Warshall
Iterasi X
Tabel 2.16Iterasi X algoritma Floyd – Warshall
Hasil jalur terpendek yang dihasilkan oleh algoritma ini untuk jalur
terpendek yang ditempuh dari node satu ke node sepuluh adalah 1060.
1. Jalur 1A
Tempat-tempat yang dilalui oleh jalur ini adalah Candi
Prambanan - Bandar Udara Adisutjipto - Jembatan Layang
Janti - Ambarrukmo Plaza - UIN Sunan Kalijaga - Saphir
Square - Bioskop XXI, Jl. Solo - Rumah Sakit Bethesda, Toko
Buku Gramedia, Hotel Novotel - Hotel Santika, Pizza Hut
Tugu Jogja - Kantor Kedaulatan Rakyat - Stasiun Tugu –
Jogjakarta - Jalan Malioboro (ada 3 buah halte) - Kantor Pos
Besar, Kraton, Alun-Alun Utara, Monumen 1 Maret, Benteng
Vredeburg - Taman Pintar, Taman Parkir Bank - Indonesia,
Pasar Beringhardjo, Gondomanan - Pasar Sentul (Jl. Taman
Siswa) - Taman Makan Pahlawan Kusumanegara - Balaikota
Jogjakarta - Kebun Binatang - Gembira Loka - Jogja Expo
Center - Jembatan Janti (kembali ke arah Kalasan, Bandar
Udara Adisutjipto sampai Terminal Prambanan)
2. Jalur 1B
Tempat-tempat yang dilalui oleh jalur ini adalah Terminal
Prambanan – Kalasan - Bandara Adisucipto – Maguwoharjo -
Janti (lewat bawah) - Blok O – JEC - Babadan Gedongkuning -
Gembira Loka – SGM - Pasar Sentul – Gondomanan - Kantor
Pos Besar - RS.PKU Muhammadiyah - Pasar Kembang –
Badran - Bundaran SAMSAT – Pingit – Tugu – Gramedia -
5. Jalur 3A
Tempat-tempat yang dilalui oleh jalur ini adalah Terminal
Giwangan – Tegalgendu - HS-Silver - Jl. Nyi Pembayun -
Pegadaian Kotagede – Basen – Rejowinangun - Babadan
Gedongkuning – JEC - Blok O - Janti (lewat atas) – Janti –
Maguwoharjo - Bandara ADISUCIPTO – Maguwoharjo -
Ringroad Utara - Terminal Condongcatur – Kentungan - MM
UGM – MirotaKampus – Gondolayu – Tugu – Pingit -
Bundaran SAMSAT – Badran – PasarKembang - Stasiun
TUGU – Malioboro - Kantor Pos Besar - RS PKU
Muhammadiyah – Ngabean - Jokteng Kulon - Plengkung
Gading - Jokteng Wetan – Tungkak – Wirosaban – Tegalgendu
- Terminal Giwangan.
6. Jalur 3B
Tempat-tempat yang dilalui oleh jalur ini adalah Terminal
Giwangan – Tegalgendu – Wirosaban – Tungkak - Jokteng
Wetan - Plengkung Gading - Jokteng Kulon – Ngabean - RS
PKU Muhammadiyah - Pasar Kembang – Badran - Bundaran
SAMSAT – Pingit – Tugu – Gondolayu - Mirota Kampus -
MM UGM – Kentungan - Terminal Condong Catur - Ringroad
Utara – Maguwoharjo - Bandara Adisucipto – Maguwoharjo -
JANTI (lewat bawah) - Blok O – JEC - Babadan
BAB III
ANALISA DAN PERANCANGAN SISTEM
Pada bab ini akan dijelaskan mengenai analisa dan perancangan sistem yang
digunakan dalam penelitian ini.
3.1. Deskripsi Kasus
Kasus penggunaan Bus Trans Jogja yang mungkin dihadapi oleh para
penumpangnya adalah ketidaktahuan untuk menentukan jalur Bus Trans Jogja
yang harus ditempuh guna mencapai tujuan yang dikehendaki. Selain hal itu,
penumpang bahkan juga mungkin tidak tahu trayek apa yang harus
ditumpangi dan perpindahan bus yang harus dilakukan guna mencapai titik
tujuannya dengan cepat. Berdasarkan hal tersebut salah satu solusi yang dapat
diberikan adalah membuat sebuah aplikasi untuk mencari jalur terpendek rute
Bus Trans Jogja dari satu titik awal ke satu titik tujuan. Selain kemampuan
mencari jalur terpendek, aplikasi yang dibuat juga harus mampu memberikan
saran berupa bus yang harus digunakan beserta perpindahan yang harus
dilakukan untuk menempuh jalur terpendek yang telah ditemukan.
Aplikasi akan dibuat untuk smartphone bersistem operasi Android.
Hal tersebut dilakukan agar aplikasi yang dibuat lebih optimal dalam
membantu penumpang karena mampu membantu penumpang pemilik
smartphone Android menentukan Bus Trans Jogja yang harus digunakan
secara mobile. Pertimbangan hal tersebut muncul karena dengan ukuran
34
gambar graph yang terbentuk berdasarkan posisi halte dan jarak antar halte
yang ada.
Gambar 3.1Graph Rute Bus Trans Jogja
Gambar 3.2Posisi Halte Bus Trans Jogja
12.Untuk int i = 1, selama i < jumlah vertex lakukan langkah dua
belas hingga langkah lima belas.
13.Jika vertex ke – i belum dikunjungi dan sPath ke – i <
jarakTerpendek maka lakukan langkah tiga belas dan empat
belas.
14.jarakTerpendek = sPath[i].getjarak().
15.minIndeks = i.
16.i++.
17.Buat dan inisialisasi variabel “min” = minIndeks.
18.Buat dan inisialisasi varaibel “minDist” =
sPath[min].getJarak().
19.Jika minDist = infinite, maka break. Jika tidak lakukan langkah
dua puluh dan 21.
20.vertSekarang = minIndeks.
21.jarakAwalKini = sPath[min].getJarak().
22.Tandai vertex sekarang bahwa dirinya sudah dikunjungi.
23.jumGraph++.
24.Buat dan inisialisasi variabel int “kolom” = 0.
25.Selama kolom < jumlah vertex, lakukan langkah 26 hingga 31.
26.Jika vertex dengan index kolom sudah dikunjungi, maka
kolom++ dan continue.
5. Untuk int i = 0, selama i < path.length lakukan langkah enam
hingga langkah sembilan.
6. Untuk int j = 0, selama j < path.length lakukan langkah tujuh
hingga langkah delapan.
7. Jika “jarak” sama dengan infinite, maka path[i][j] = -1, jika
tidak maka path[i][j] = i.
8. j++.
9. i++.
10.Untuk int i = 0, selama i < jumlah halte, lakukan langkah
sebelas hingga langkah dua belas.
11.path[i][i] = 1.
12.i++.
13.Untuk int i = 0, selama i < path.length lakukan langkah empat
belas hingga langkah 21.
14.Untuk int j = 0, selama j < path.length lakukan langkah lima
belas hingga langkah dua puluh.
15.Untuk int k = 0, selama k < path.length lakukan langkah enam
belas hingga langkah sembilan belas.
16.Jika jarak[j][i] + jarak[i][k] < jarak[j][k], lakukan langkah
tujuh belas dan delapan belas.
17.jarak[j][k] = jarak[j][i] + jarak[i][k].
18.path[j][k] = path[i][k].
9. Masukkan ke daftarTrayek edgeTrayek untuk nilai awal dan
tujuan yang telah ditentukan pada langkah tujuh dan delapan.
10.i++.
11.Inisialisasi bantu yang bertipe List<String> yang merupakan
nilai dari variabel daftarTrayek ke-0.
12.Inisialisasi variabel bertipe String baru dan perpindahanBus
bernilai empty string.
13.Untuk int i = 1, selama i kurang dari jalurPilihan.size maka
lakukan langkah empat belas hingga langkah 29.
14.Ubah nilai variabel baru menjadi empty string.
15.Untuk int j = 0, selama j kurang dari bantu.size, lakukan
langkah enam belas hingga sembilan belas.
16.Untuk int k = 0, selama k kurang dari daftarTrayek.get(i).size
lakukan langkah tujuh belas hingga delapan belas.
17.Jika nilai variabel bantu sama dengan daftarTrayek.get(i).get(k)
maka baru = baru + bantu.get(j).
18.j++.
19.j++.
20.Jika nilai variabel baru sama dengan empty String maka
lakukan langkah 21 hingga 25, jika tidak lakukan langkah 26.
21.Untuk j = 0, selama j kurang dari bantu.size lakukan langkah
22 hingga 24.
dengan solusi yang diperoleh melalui penghitungan manual. Kemiripan solusi
yang diberikan oleh sistem dengan solusi yang didapat secara manual akan
menjadi nilai ukur kebenaran dari solusi yang diberikan oleh sistem. Semakin
mirip solusi dari sistem dengan solusi yang didapat dari perhitungan manual,
maka semakin benar pula solusi yang diberikan oleh sistem. Penghitungan
manual akan dilakukan dengan cara:
1. Menentukan semua kemungkinan jalur yang mampu ditempuh dari
titik awal dan tujuan yang telah ditentukan, kemudian menghitung
jarak untuk setiap kemungkinan jalur yang didapat.
2. Membandingkan semua jarak untuk semua kemungkinan jalur yang
telah didapat.
3. Jalur dengan nilai jarak terkecillah yang kemudian dijadikan sebagai
solusi dalam penghitungan manual tersebut.
Hal terakhir yang kemudian dilakukan adalah membandingkan
kompleksitas waktu asimtotik dari masing-masing algoritma dan running
time-nya. Hal ini dilakukan untuk menentukan algoritma mana yang paling
optimal untuk digunakan dalam aplikasi yang dibuat. Algoritma yang palling
optimallah yang akan benar-benar digunakan dalam aplikasi yang akan dibuat
sehingga aplikasi benar-benar siap untuk dipublikasi dan digunakan oleh
masyarakat umum.
3. Aktor menyentuh kembali titik awal yang telah ditentukan sebelumnya.
2. Sistem telah menandai lokasi awal yang telah ditentukan oleh aktor.
4. Sistem memunculkan dialog apakah titik awal yang telah ditentukan sebelumnya oleh actor akan dibatalkan atau tidak.
Tabel 3.1Tabel Use Case Menentukan Titik Awal
b. Nama Use Case : Menentukan titik tujuan
Aktor : User (pengguna aplikasi)
Kondisi Awal : Titik awal telah ditentukan
Skenario :
Aksi Aktor Reaksi Sistem
1. Aktor touch titik tujuan yang berupa icon halte Bus Trans Jogja.
2. Sistem menandai lokasi yang telah ditentukan dan kemudian menampilkan jalur yang menghubungkan tiap halte. Tabel 3.2Tabel Use Case Menentukan Titik Tujuan
c. Nama Use Case : Melihat jalur bus yang ditempuh
Aktor : User (pengguna aplikasi)
Kondisi Awal : Titik awal dan tujuan telah ditentukan
Skenario :
bus yang harus dipilih aktor berdasarkan jalur terpendek yang telah diperoleh sistem. Tabel 3.5Tabel Use Case Melihat Saran Trayek Bus yang Harus
Dipilih
f. Nama Use Case : Melihat running time algoritma
Aktor : User
Kondisi Awal : Titik awal dan tujuan telah ditentukan
Skenario :
Aksi Aktor Reaksi Sistem
1. Aktor touch tombol
“Details”. 2. Sistem menampilkan running
time aloritma.
Tabel 3.6Tabel Use Case Melihat Running Time Algoritma
g. Nama Use Case : Mencari halte
Aktor : User
Kondisi Awal : -
Skenario :
Aksi Aktor Reaksi Sistem
1. Aktor mengisi
textfield yang ada dengan nama halte yang ingin dicari. 2. Aktor touch tombol
“Cari”.
3. Sistem menunjukkan halte yang dicari jika ada.
3.4.1. Diagram Aktivitas Menentukan Titik Awal
Gambar 3.4Diagram Aktivitas Menentukan Titik Awal
3.4.2. Diagram AktivitasMenentukan Titik Tujuan
Gambar 3.5Diagram Aktivitas Menentukan Titik Tujuan
3.4.4. Diagram Aktivitas Melihat Jalur Bus yang Ditempuh,
Melihat Nilai Jarak yang Ditempuh, Melihat Saran Trayek
Bus yang Harus Dipilih, dan Melihat Running Time
Algoritma
Gambar 3.7Diagram Akivitas Melihat Jalur Bus yang
Ditempuh, Melihat Nilai Jarak yang Ditempuh, Melihat Saran Trayek
Bus yang Harus Dipilih, dan Melihat Running Time Algoritma
3.5.2. Diagram Sekuensial Menentukan Titik Tujuan
Gambar 3.10Diagram Sekuensial Menentukan Titik Tujuan
3.5.3. Diagram Sekuensial Mencari Halte
Gambar 3.11Diagram Sekuensial Mencari Halte
Gambar 3.13Diagram Sekuensial Melihat Jalur Bus yang
Ditempuh, Melihat Nilai Jarak yang Ditempuh, Melihat Saran Trayek
Bus yang Harus Dipilih, dan Melihat Running Time Algoritma
Floyd-Warshall
3.5.5. Diagram Sekuensial Melihat Help
Gambar 3.16Diagram Kelas Perancangan Keseluruhan
3.7. Kelas Analisis
Tabel 3.9 dan 3.10 adalah tabel kelas-kelas analisis yang digunakan
pada sistem. Tabel ini menunjukkan jenis-jenis setiap kelas yang digunakan
dan tanggung jawab dari setiap kelas. Daftar attribut setiap kelas juga
dimasukkan dalam tabel ini.
TemporaryJalur_n_Jarak Membantu untuk menyimpan jarak dan jalur secara sementara yang digunakan dalam pencarian jalur terpendek dengan menggunakan
algoritma dijkstra.
double jarak private int from
MainActivity Menampilkan
halaman judul.
Map Menampilkan
tampilan peta. Membuat halte dan jarak antar halte. Membuat posisi-posisi halte dan pengguna pada peta.
MapView mapView MapController InputStream data Sheet sheet
PathOverlay Membuat jalur
terpendek pada peta.
Projection projection ArrayList<GeoPoint> ppoint
SitesOverlay Menampilkan
findIndex(String index) public Digunakan untuk
mencari index dari
node yang dicari
dengan masukan
berupa nama node.
getMin() public Digunakan untuk
mencari jalur yang
terpendek dengan
membandingkan dua
buah jalur. Fungsi ini
digunakan dalam
pencarian jalur
terpendek dengan
algoritma Dijkstra.
adjust_sPath() public Digunakan untuk
membentuk jalur
terpendek pada
pencarian jalur
terpendek dengan
algoritma Dijkstra.
displayPaths(int tujuan, int
awal)
public Digunakan untuk
menampilkan jarak
terpendek dan jalur
yang harus ditempuh
dalam pencarian jalur
terpendek dengan
algoritma Dijkstra.
dijkstra(String awal, String public Digunakan untuk
diperoleh.
Nama Atribut Visibility Tipe
INFINITE private integer
edge package double[][]
edgeTrayek package ArrayList<String>[][]
daftarVertex package Halte[]
jumlah_vertex package integer
tujuan package List<Halte>
sPath package TemporaryJalur_n_Jar
ak[]
jumGraph package integer
vertSkrg package integer
mulaiSmpSkrg package double
Tabel 3.11Tabel Operasi dan Atribut Kelas Graph
b. Kelas Halte
Nama Operasi Visibility Keterangan
getNama() public Digunakan untuk
mengambil nama dari
halte.
setNama(String nama) public Digunakan untuk
memberi nama sebuah
halte.
isInGraph() public Digunakan untuk
mengambil tanda sebuah
halte apakah sudah
dikunjungi atau belum.
setInGraph(boolean public Digunakan untuk
asal node
sementara.
Nama Atribut Visibility Tipe
jarak private double
from private integer
Tabel 3.13Tabel Operasi dan Atribut Kelas TemporaryJalur_n_Jarak
d. Kelas MainActivity
Nama Operasi Visibility Keterangan
onCreate(Bundle
savedInstanceState)
public Digunakan untuk
memanggil dan
menampilkan halaman
judul.
Nama Atribut Visibility Tipe
-
Tabel 3.14Tabel Operasi dan Atribut Kelas MainActivity
e. Kelas Map
Nama Operasi Visibility Keterangan
onCreate(Bundle
savedInstanceState)
protected Digunakan untuk
memanggil dan
menampilkan peta.
onCreateOptionsMenu(Menu
menu)
public Digunakan untuk
membuat menu pada
aplikasi.
onBackPressed() public Digunakan untuk
memberi action apa yang
harus dilakukan ketika
autoText package AutoCompleteTextView
Tabel 3.15Tabel Operasi dan Atribut Kelas Map
f. Kelas PathOverlay
Nama Operasi Visibility Keterangan
draw(Canvas canvas,
MapView mapView,
boolean shadow,
long when)
public Digunakan untuk
membuat gambar path
yang akan ditampilkan
di peta.
Nama Atribut Visibility Tipe
projection private Projection
ppoint private ArrayList<GeoPoint>
Tabel 3.16Tabel Operasi dan Atribut Kelas PathOverlay
g. Kelas SitesOverlay
Nama Operasi Visibility Keterangan
createItem(int index) protected Digunakan untuk
membuat objek
gambar (posisi dan
halte).
size() public Digunakan untuk
mengambil jumlahnya
objek gambar yang
dibuat.
addItem(OverlayItem
item)
public Digunakan untuk
menambahkan objek
gambar.
addFlag(int[] itemSize) public Digunakan untuk
int counter3 = -1 package integer
mapView package MapView
param package String
Tabel 3.17 Tabel Operasi dan Atribut Kelas SitesOverlay
h. Kelas Help
Nama Operasi Visibility Keterangan
onCreate(Bundle
savedInstanceState)
public Digunakan untuk
memanggil dan
menampilkan halaman
Help.
Nama Atribut Visibility Tipe
-
Tabel 3.18Tabel Operasi dan Atribut Kelas Help
3.9. Cara Pengujian
Pengujian dilakukan dengan dua macam. Pengujian pertama dilakukan
untuk menguji dari kebenaran sistem atau aplikasi yang telah dibuat.
Pengujian ini dilakukan dengan memberikan sejumlah kasus terhadap aplikasi
yang telah dibuat. Hasil yang diperoleh berdasarkan setiap kasus yang
diberikan kemudian akan dibandingkan dengan perhitungan manual untuk
kasus yang sama. Perbandingan tersebut dilakukan untuk menguji akurasi
kebenaran atas solusi jalur terpendek yang diberikan aplikasi. Setelah
perbandingan untuk mengetahui tingkat kebenaran dilakukan maka hal
berikutnya yang dilakukan adalah menghitung nilai kompleksitas waktu
titik awal. pada peta. disentuh akan
ditandai dengan ikon
baru sebagai titik
awal.
2 Membatalkan
titik awal.
Halte bus yang telah
ditentukan sebagai
titk awal
sebelumnya.
Muncul pesan
apakah titik awal
akan dibatalkan atau
tidak.
3 Menentukan
titik tujuan.
Halte bus yang ada
pada peta (selain
yang telah ditandai
sebagai titik awal).
Halte bus yang
disentuh akan
ditandai dengan ikon
baru sebagai titik
tujuan.
Muncul garis pada
peta yang
menghubungkan
antar halte yang
merupakan jalur
tempuh dari titik
awal ke titik tujuan.
4 Melihat jalur
bus yang
ditempuh.
Tombol “Details”
disentuh.
Rute jalur terpendek
yang harus ditempuh
menggunakan bus
akan muncul berupa
poin-poin.
Tampil total nilai
jarak terpendek yang
harus ditempuh
SUGIYONO 2
Tampil pesan bahwa
halte yang dicari
tidak diketahui.
Tampil pesan bahwa
halte yang dicari
tidak diketahui.
Tampil pesan bahwa
halte yang dicari
tidak diketahui.
Awal: SUDIRMAN
Naik 2B.
Awal: MT
HARYONO 2
(SMA 7)
Tujuan: TENTARA
PELAJAR 1 (SMP
Tabel 3.19Skenario Pengujian
3.11. Desain Antarmuka
Gambar-gambar berikut adalah rancangan dari antarmuka untuk sistem
yang akan dibuat.
3.11.3. Desain Antarmuka Tampilan Details
Gambar 3.19Desain Antarmuka Tampilan Details
4.2. Pengolahan Data
Data diperoleh dari Dinas Perhububungan Komunikasi dan
Informatika. Berdasarkan dari data yang diperoleh tersebut terdapat enam
trayek Bus Trans Jogja yang beroperasi hingga pada saati ini. Trayek tersebut
adalah trayek 1A, 1B, 2A, 2B, 3A, dan 3B. Halte yang aktif terdapat seratus
satu buah.
Data yang dibutuhkan adalah nama halte, posisi halte, dan jarak tiap
halte yang ditelusuri oleh masing-masing trayek. Data disimpan pada file
excel yang mengandung 3 sheet. Berikut ini adalah penjelasan dari kegunaan
masing-masing sheet:
1. Sheet I (Halte)
Sheet ini digunakan untuk menyimpan nama asli setiap halte.
Nama asli halte inilah yang kemudian akan dibentuk menjadi
node-node pada graph yang dibentuk. Sheet ini terdiri satu
kolom yang berisi nama-nama asli setiap halte.
2. Sheet II (Jarak)
Sheet ini digunakan untuk menyimpan jarak tiap halte. Pada sheet
ini terdapat lebih dari empat kolom. Kolom pertama digunakan
untuk menyimpan titik awal halte. Kolom kedua digunakan untuk
menyimpan titik tujuan halte. Kolom ketiga digunakan untuk
menyimpan jarak dari titik awal halte ke titik tujuan halte. Kolom
algoritma Dijkstra dan Floyd-Warshall. Penghitungan perpindahan bus
dilakukan pada gambar source code 4.3.3.
4.3.1. Implementasi Metode Greedy dengan Algoritma Dijkstra
Source code pada gambar 4.1 adalah source code dari yang
digunakan untuk mengimplementasikan algoritma dijkstra ke dalam
aplikasi. Source code menunjukkan bahwa dibutuhkan tiga method
bantuan dalam pengimplementasian algoritma dijkstra ke dalam
aplikasi. Tiga method bantuan yang digunakan, yakni method
getMin(), adjust_sPath(), dan displayPaths(int tujuan, int awal).
Method getMin() digunakan untuk menemukan nilai jarak
terpendek sementara untuk setiap node yang ada dalam graph. Jarak
terpendek ini digunakan sebagai pembanding dalam rangka
menemukan jarak terpendek setiap node yang sebenarnya. Method
adjust_sPath() digunakan untuk memberntuk jalur berdasarkan
jarak terpendeknya. Terakhir adalah method displayPaths(int tujuan,
int awal) yang digunakan untuk menampilkan hasil yang berupa
jarak terpendek bersama dengan jalur terpendek yang harus
ditempuh.
public int getMin() {
double jarakTerpendek = INFINITE;
int minIndeks = 0;
for (int i = 1; i < jumlah_vertex; i++) {
bantu = new
DecimalFormat("#.###").format(sPath[tujuan].getJarak())+":";
while (tujuan != awal) {
paths = daftarVertex[tujuan].getNama()
+ "\n" + paths;
tujuan =
findIndex(daftarVertex[sPath[tujuan].getFrom()]
.getNama());
}
paths = daftarVertex[awal].getNama() + "\n"
+ paths;
paths = bantu + paths;
}
return paths;
}
public String dijkstra(String awal, String tujuan) {
int a = findIndex(awal);
int b = findIndex(tujuan);
daftarVertex[a].setInGraph(true);
jumGraph = 1;
for (int i = 0; i < jumlah_vertex; i++) {
double jarakSementara = edge[a][i];
sPath[i] = new TemporaryJalur_n_Jarak(a,
jarakSementara);
}
while (jumGraph < jumlah_vertex) {
int minIndeks = getMin();
double minDist =
sPath[minIndeks].getJarak();
if (minDist == INFINITE) {
break;
} else {
vertSkrg = minIndeks;
int finish = findIndex(tujuan);
String paths, bantu;
int[][] path = new int[jumlahHalte][jumlahHalte];
for (int i = 0; i < path.length; i++) {
if (jarak[j][i] + jarak[i][k] <
jarak[j][k]) {
jarak[j][k] = jarak[j][i] +
jarak[i][k];
path[j][k] = path[i][k];
}
paths = daftarVertex[finish].getNama();
while (path[start][finish] != start) {
paths =
daftarVertex[path[start][finish]].getNama() + "\n" + paths;
public List<String> perpindahanBus2(StringTokenizer
stoken) {
List<String> answer = new ArrayList<String>();
List<String> jalurPilihan = new
ArrayList<String>();
while (stoken.hasMoreElements()) {
jalurPilihan.add(stoken.nextToken("\n"));
}
List<List> daftarTrayek = new ArrayList<List>();
for (int i = 0; i < jalurPilihan.size(); i++) {
if (i != 0) {
int awal =
findIndex(jalurPilihan.get(i - 1));
int tujuan =
findIndex(jalurPilihan.get(i));
daftarTrayek.add(edgeTrayek[awal][tujuan]);
}
}
List<String> bantu = daftarTrayek.get(0);
String baru = "";
String perpindahanHalte = "";
for (int i = 1; i < daftarTrayek.size(); i++) {
baru = "";
for (int j = 0; j < bantu.size(); j++) {
for (int k = 0; k <
daftarTrayek.get(i).size(); k++) {
if
(bantu.get(j).equals(daftarTrayek.get(i).get(k))) {
answer.add("Naik bus trayek: " +
Gambar 4.3Gambar Source Code untuk Perpindahan Bus
4.4. Implementasi Penghitungan Running Time Sebuah Algoritma pada
Kelas SitesOverlay
Penghitungan running time algoritma dilakukan pada kelas
SitesOverlay dengan memanfaatkan syntax System.nanoTime() yang
diletakkan di awal sebelum pemanggilan algoritma dan di akhir sesudah
pemanggilan algoritma. Hal ini dilakukan untuk memeperoleh waktu mulai
dan waktu selesai jalannya sebuah algoritma. Waktu selesai kemudian harus
dikurangi dengan waktu mulai agar mendapatkan lawa waktu yang diperlukan
bagi sebuah algoritma untuk melakukan penghitungan. Lama waktu yang
didapat kemudian dibagi dengan satu juta untuk mendapatkan waktu dalam
satuan milliseconds. Gambar 4.4 adalah gambar yang berisi source code untuk
penghitungan running time setiap algoritma yang digunakan dalam sistem.
startTime = System.nanoTime();
bantuToken = new StringTokenizer(graph.dijkstra(awal[i],
tujuan[j]),":");
finishTime = System.nanoTime();
belakang, sedangkan tiga button digunakan untuk mengakses
halaman peta dan Help. Gambar 4.5 adalah gambar dari hasil
halaman menu yang telah dibuat dan gambar 4.6 adalah source
code yang digunakan untuk membuat halaman menu.
Gambar 4.5Tampilan Halaman Menu
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/androi
d"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:src="@drawable/title" />
menggunakan MapView dari Google yang telah diisi API Key
-nya. Pada halaman ini juga digunakan AutoCompleteTextView
yang digunakan untuk menginputkan nama halte yang akan
dicari oleh pengguna. File “activity_main.xml” juga
menggunakan file xml lain yang bernama
“mydropdownstyle.xml” yang digunakan untuk merubah warna
text dan latar belakang pada AutoCompleteTextView yang
digunakan. Berikut ini adalah gambar 4.7, 4.8, dan 4.9 yang
merupakan tampilan dari halaman peta dan source code dari
file xml dari “activity_main.xml” dan “mydropdownstyle.xml”.
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="@string/Detail" />
<LinearLayout
android:id="@+id/zoomControls1"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="vertical" >
</LinearLayout>
<AutoCompleteTextView
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/button1"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/search" />
</RelativeLayout>
Gambar 4.8activity_main.xml
Gambar 4.10Tampilan Halaman Details
AlertDialog.Builder dialog = new
AlertDialog.Builder(context);
dialog.setTitle("Details by "+ param + "
Algorithm");
dialog.setMessage("JARAK: "+ jarak
+ " km\nTIME ELAPSED: "
+ new DecimalFormat("#.###").format((finishTime -
startTime) / 1000000)
+ " ms\n---"
+ "\nJALUR:\n" + paths
+ "\n---\nSARAN:\n"
+ sarans);
dialog.setPositiveButton("OK", null);
dialog.show();
Gambar 4.11Source Code Halaman Details
4.5.4. Implementasi Halaman Help
Tampilan halaman “Help” dibuat dengan membuat
sebuah file xml bernama “help.xml”. Halaman ini
2 Membatalka
n titik awal.
Halte bus yang
telah ditentukan
sebagai titk awal
sebelumnya.
Muncul pesan
apakah titik awal
akan dibatalkan
atau tidak.
Muncul pesan
apakah titik awal
akan dibatalkan
atau tidak.
3 Menentukan
titik tujuan.
Halte bus yang ada
pada peta (selain
yang telah ditandai
sebagai titik awal).
Halte bus yang
disentuh akan
ditandai dengan
ikon baru sebagai
titik tujuan.
Muncul garis pada
peta yang
menghubungkan
antar halte yang
merupakan jalur
tempuh dari titik
awal ke titik
tujuan.
Halte bus yang
disentuh akan
pada peta yang
menghubungkan
antar halte yang
merupakan jalur
tempuh dari titik
awal ke titik
bus akan muncul
berupa
poin-Tampil total nilai
jarak terpendek
yang harus
Tampil total nilai
jarak terpendek
yang harus
RINGROAD
ke posisi halte
RINGROAD
UTARA
(KENTUNGAN)
User diarahkan
ke posisi halte
SUGIYONO 2
bahwa halte yang
dicari tidak
diketahui.
Tampil pesan
bahwa halte yang
dicari tidak
diketahui.
Tampil pesan
bahwa halte yang
dicari tidak
diketahui.
Tampil pesan
bahwa halte
yang dicari tidak
diketahui.
Tampil pesan
bahwa halte
yang dicari tidak
diketahui.
Tampil pesan
bahwa halte
yang dicari tidak
diketahui.
1 Menguji Awal: Jarak: 4,604 km Dijkstra:
KOREM) -SANATA
Tabel 5.1Tabel Hasil Pengujian
public int getMin() {
double jarakTerpendek = INFINITE; O(1)
int minIndeks = 0; O(1)
for (int i = 1; i < jumlah_vertex; i++) { n
if (!daftarVertex[i].isInGraph()&&
sPath[i].getJarak() < jarakTerpendek){
jarakTerpendek = sPath[i].getJarak(); O(1)
minIndeks = i; O(1)
}
}
return minIndeks; O(1)
}
Gambar 5.1Source Code Method getMin
Berdasarkan gambar 5.1 method getMin memiliki
kompleksitas waktu asimtotik O(n). Hal tersebut diperoleh melalui
perhitungan berikut:
O(1)+O(1)+(n.(O(1)+O(1)))+ O(1)
= O(1)+O(1)+(n.O(1))+O(1)
= O(1)+O(1)+O(n)+O(1)
= O(n)
Gambar 5.2 adalah hasil penghitungan kompleksitas waktu
asimtotik tiap baris source code yang dimiliki oleh method
adjust_sPath.
public void adjust_sPath() {
int kolom = 0; O(1)
bantu = new
DecimalFormat("#.###").format(sPath[tujuan].getJarak())+":";O(1)
while (tujuan != awal) { n
paths = daftarVertex[tujuan].getNama() + "\n" +
paths; O(1)
tujuan =
findIndex(daftarVertex[sPath[tujuan].getFrom()] .getNama());O(1)
}
paths = daftarVertex[awal].getNama() + "\n" +
paths; O(1)
paths = bantu + paths; O(1)
}
return paths; O(1)
}
Gambar 5.3Source Code Method displayPaths
Kompleksitas waktu asimtotik dari method displayPaths adalah:
O(1)+O(1)+(O(1)+(n.(O(1)+O(1)))+O(1)+O(1))+O(1)
= O(1)+O(1)+(O(1)+O(n)+O(1)+O(1))+O(1)
= O(1)+O(1)+O(n)+O(1)
= O(n)
public int findIndex(String index) {
int a = 0; O(1)
while (a < jumlah_vertex) { n
if
(index.equals(daftarVertex[a].getNama())) {
return a; O(1)
} else {
sPath[i] = new TemporaryJalur_n_Jarak(a,
jarakSementara); O(1)
}
while (jumGraph < jumlah_vertex) { n
int minIndeks = getMin(); O(n)
double minDist =
sPath[minIndeks].getJarak(); O(1)
if (minDist == INFINITE) {
break;
} else {
vertSkrg = minIndeks; O(1)
mulaiSmpSkrg =
return displayPaths(b, a); O(n)
}
Gambar 5.5Source Code Method dijkstra
Penghitungan kompleksitas waktu asimtotik algoritma
Dijkstra berdasarkan gambar 5.3 adalah O(n2). Penghitungan yang dilakukan untuk memperoleh hasil tersebut adalah:
O(n)+O(n)+O(1)+O(1)+(n.(O(1)+O(1)))+(n.(O(n)+O(1)+(O(1)
+O(1))+O(1)+O(1)+O(n)))+O(1)+(n.O(1))+O(n)
= O(n)+O(n)+O(1)+O(1)+O(n)+O(n2)+O(1)+O(n)+O(n)
Kompleksitas waktu asimtotik untuk method findIndex
berdasarkan pada gambar 5.6 adalah O(1)+n.O(1)+O(1) = O(n).
Analisis hasil nilai Big Oh untuk setiap baris source code
yang dimiliki oleh method deepCopyIntMatrix tertuang pada
gambar 5.7
public static double[][] deepCopyIntMatrix(double[][] input) {
if (input == null)
Gambar 5.7Source Code Method deepCopyIntMatrix
Kompleksitas waktu asimtotik untuk method deepCopyMatrix
berdasarkan pada gambar 5.7 adalah O(1) + O(1) + n.O(1) = O(n).
Setelah memperoleh nilai Big Oh dari method findIndex
dan deepCopyIntMatrix, penghitungan nilai Big Oh method floyd
dilakukan. Penghitungan nilai Big Oh dari method floyd dilakukan
dengan melihat gambar 5.8.
public String floyd(String awal, String tujuan) {
double[][] jarak = this.deepCopyIntMatrix(edge);O(n)
}
paths = daftarVertex[start].getNama() + "\n" + paths; O(1)
paths = bantu + paths; O(1)
return paths;
O(1)
}
Gambar 5.8Source Code Method Floyd
Dengan menggunakan gambar 5.8, penghitungan kompleksitas
waktu asimtotik dari algoritma Floyd-Warshall adalah:
O(n)+O(n)+O(n)+O(1)+(n.(n.(O(1)+O(1))))+(n.O(1))+(n.O(1))+(n
.(n.(n.((O(1)+O(1))))))+O(1)+O(1)+n.(O(1)+O(1))+O(1)+O(1)+O
(1)
=
O(n)+O(n)+O(n)+O(1)+O(n2)+O(n)+O(n)+O(n3)+O(1)+O(n)+O(1 ))+O(1)+O(1)+O(1)
= O(n3)
5.3. Pengujian dan Analisa Hasil Perbandingan Running Time Algoritma
Dijkstra dan Floyd-Warshall
Pengujian running time masing-masing algoritma dilakukan dengan
menggunakan sepuluh kasus. Pengujian direpresentasikan melalui tabel 5.2.
Kolom pertama adalah nomor uji, kolom kedua merupakan titik awal, kolom
kedua merupakan titik tujuan, kolom keempat merupakan running time
algoritma Dijkstra, dan kolom terakhir merupakan running time algoritma
UTARA (INSTIPER
Tabel 5.2Tabel Hasil Pengujian Running Time Kedua Algoritma
Berdasarkan tabel 5.2, dari sepuluh kasus yang diberikan, algoritma
Dijkstra mampu memberikan solusi lebih cepat dari algoritma
Floyd-Warshall untuk semua kasus yang diberikan. Hal tersebut dikarenakan
algoritma Dijkstra mempunyai kompleksitas waktu asimtotik (Big Oh) yang
BAB VI
KESIMPULAN DAN SARAN
Pada bab ini akan dibahas mengenai kesimpulan dan saran dari penelitian
yang telah dibuat.
6.1. Kesimpulan
Kesimpulan dari penelitian yang telah dilakukan adalah:
1. Penggunaan metode greedy dan metode pemrograman dinamis yang
masing-masing diwakili oleh algoritma Dijkstra dan Floyd-Warshall
mampu memberikan solusi yang tepat pada kasus pencarian jalur
terpendek pada Bus Trans Jogja.
2. Algoritma Dijkstra dan algoritma Floyd-Warshall mampu
diimplementasikan dalam sistem pencarian jalur terpendek untuk kasus
Bus Trans Jogja karena mampu memberikan solusi jalur terpendek yang
tepat.
3. Running time dari algoritma Dijkstra lebih cepat daripada running time
dari algoritma Floyd-Warshall dalam memberikan solusi kepada
pengguna. Hal tersebut juga Nampak pada kompleksitas waktu asimtotik
dari algoritma Dijkstra yang lebih sederhana, yakni O(n2) dibandingkan dengan kompleksitas waktu asimtotik dari algoritma Floyd-Warshall
yang adalah O(n3).
128