• Tidak ada hasil yang ditemukan

Perbandingan penggunaan algoritma dijkstra dan algoritma floyd warshall untuk pencarian jalur terpendek pada bus trans jogja

N/A
N/A
Protected

Academic year: 2017

Membagikan "Perbandingan penggunaan algoritma dijkstra dan algoritma floyd warshall untuk pencarian jalur terpendek pada bus trans jogja"

Copied!
194
0
0

Teks penuh

(1)

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

(2)
(3)

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

(4)
(5)

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

(6)
(7)

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

(8)
(9)

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

(10)
(11)

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

(12)
(13)

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

(14)
(15)

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

(16)
(17)

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

(18)
(19)

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

(20)
(21)

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

(22)
(23)

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:

(24)
(25)

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.

(26)
(27)

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.

(28)
(29)

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

(30)
(31)

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

(32)
(33)

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

(34)
(35)

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

(36)
(37)

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

(38)
(39)

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

(40)
(41)

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

(42)
(43)

9 ? ? ? ? ? ? ? ? 0 280

10 ? ? ? ? ? ? ? ? ? 0

Tabel 2.7Iterasi I Algoritma Floyd – Warshall

Iterasi II

Tabel 2.8 Iterasi II Algoritma Floyd – Warshall

(44)
(45)

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 ?

(46)
(47)

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.

(48)
(49)

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 -

(50)
(51)

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

(52)
(53)

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

(54)
(55)

gambar graph yang terbentuk berdasarkan posisi halte dan jarak antar halte

yang ada.

Gambar 3.1Graph Rute Bus Trans Jogja

(56)
(57)

Gambar 3.2Posisi Halte Bus Trans Jogja

(58)
(59)

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.

(60)
(61)

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

(62)
(63)

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.

(64)
(65)

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.

(66)
(67)

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 :

(68)
(69)

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.

(70)
(71)

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

(72)
(73)

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

(74)
(75)

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

(76)
(77)

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

(78)
(79)

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.

(80)
(81)

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

(82)
(83)

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

(84)
(85)

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

(86)
(87)

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

(88)
(89)

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

(90)
(91)

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

(92)
(93)

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

(94)
(95)

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

(96)
(97)

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.

(98)
(99)

3.11.3. Desain Antarmuka Tampilan Details

Gambar 3.19Desain Antarmuka Tampilan Details

(100)
(101)

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

(102)
(103)

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++) {

(104)
(105)

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;

(106)
(107)

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;

(108)
(109)

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

(110)
(111)

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();

(112)
(113)

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" />

(114)
(115)

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

(116)
(117)

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

(118)
(119)

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

(120)
(121)
(122)
(123)
(124)
(125)
(126)
(127)
(128)
(129)

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

(130)
(131)

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:

(132)
(133)

KOREM) -SANATA

Tabel 5.1Tabel Hasil Pengujian

(134)
(135)

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)

(136)
(137)

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 {

(138)
(139)

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)

(140)
(141)

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)

(142)
(143)

}

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

(144)
(145)

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

(146)
(147)

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

(148)

Gambar

gambar graph yang terbentuk berdasarkan posisi halte dan jarak antar halte

Referensi

Dokumen terkait

Berikut ini merupakan hasil laporan jumlah penjualan produk dan total Total Pembayaran untuk setiap nama agen per tahun dalam bentuk tabel pada Microsoft Office

Untuk melaksanakan tugas sebagaimana dimaksud dalam Pasal 34 Dinas Pekerjaan Umum mempunyai fungsi menyusun program dibidang Pekerjaan Umum sesuai dengan

Puji dan Syukur kepada Tuhan Yang Maha Esa atas berkatnya yang berlimpah kepada penulis sehingga penulis dapat menyelesaikan penulisan skripsi ini sebagai salah satu syarat

Tahap ini merupakan pengujian system, yang terdiri dari beberapa langkah yang harus dilakukan seperti menghubungkan modem dengan modul Gammu SMS server ,

Untuk memudahkan operator/pengguna mengetahui kondisi genset seperti tegangan dan arus serta menyalakan dan mematikan genset dari jarak jauh maka dibuatlah sebuah sistem

ELLY ARLIANI, M.Si. ttrKrsMrANl'rNI,

Keterkaitan antara pembiayaan murabahah dengan tingkat perolehan Sisa Hasil Usaha (SHU) bagi KJKS Yadul Ulya Samarinda adalah pengaruh dari margin tersebut

Dengan mengetahui proses komunikasi tersebut maka akan diketahui pola komunikasi mana yang pas digunakan oleh guru agama dalam menyampaikan materi pendidikan Agama Islam