Implementasi Multiple Key Index pada Map Berbasis Struktur Pohon Right - Threaded AVL Menggunakan Java.

(1)

ABSTRAK

Map adalah struktur data umum dan bagian yang penting dari pemrograman komputer. Map memungkinkan kita untuk menyimpan data berupa pasangan kunci-nilai, sehingga pengguna dapat memasukkan data ke dalam map dengan menentukan pasangan kunci-nilai dan kemudian dapat mengambil nilai yang sesuai dengan kunci tertentu dari dalam map. Terdapat bahasa pemrograman yang berbeda mendukung map dalam berbagai cara, dalam hal ini bahasa pemrograman Java memiliki implementasi tersendiri dari map seperti TreeMap. TreeMap

menyimpan semua pasangan kunci-nilai ke dalam struktur data pohon yang disebut pohon red-black dan struktur tersebut diurutkan oleh kunci. TreeMap

menyimpan setiap pasangan kunci-nilai ke setiap node di pohon sehingga jumlah node dan pasangan kunci-nilai bernilai sama. Ada cara yang berbeda untuk menempatkan pasangan kunci-nilai dalam node yang setiap node di pohon menyimpan lebih dari satu pasangan kunci-nilai sehingga dapat mengurangi jumlah node dan dengan menggunakan struktur data pohon lain yang right-threaded AVL tree. Terakhir adalah memeriksa kinerja kecepatan eksekusi dan penggunaan memori menggunakan aplikasi sederhana.


(2)

ABSTRACT

Map is common data structures and important part of computer programming. A map allows us to store data as key-value pairs, so user can put data into the map by specifying a key-value pair and then can retrieve the value corresponding to a particular key from the map. There are different programming languages supported map in a different ways, in this case the Java Programming language had its own implementation of maps such as TreeMap. TreeMap stores all key-value pairs into a tree data structure called red-black tree and it is sorted by keys. TreeMap stores each key-value pairs into a single node in the tree thus the number of nodes and key-value pairs are equals. There are different way to put the key-value pairs in the nodes which is each node in the tree hold more than one key-value pairs so it can reduce the number of nodes and by using other tree data structures which is right-threaded AVL tree. Finally check the performance by the execution speed and memory usage by a simple application.


(3)

DAFTAR ISI

LEMBAR PENGESAHAN ... ii

PERNYATAAN ORISINALITAS LAPORAN PENELITIAN ... iii

PERNYATAAN PUBLIKASI LAPORAN PENELITIAN ... iv

PRAKATA ... v

ABSTRAK ... vii

ABSTRACT ... viii

BAB I PENDAHULUAN ... 1

1.1 Latar Belakang ... 1

1.2 Rumusan Masalah ... 2

1.3 Tujuan Penelitian ... 3

1.4 Batasan Masalah ... 3

1.5 Sistematika Pembahasan ... 4

BAB II LANDASAN TEORI ... 6

2.1 Struktur Data ... 6

2.2 Tipe Data Abstrak ... 6

2.3 Tipe Data Abstrak Map ... 7

2.4 Array ... 8

2.5 Tree ... 9

2.6 Binary Search Tree... 10

2.7 Struktur Pohon AVL ... 13

2.7.1 Deklarasi Node AVL Tree ... 15

2.7.2 Insert Node AVL Tree ... 15

2.7.3 Delete Node AVL Tree ... 20


(4)

2.7.5 Performansi AVL Tree ... 27

2.8 Struktur Pohon Right-Threaded Binary ... 28

2.8.1 Deklarasi Node RTBST ... 28

2.8.2 Penambahan Node RTBST ... 29

2.8.3 Penghapusan Node RTBST ... 30

2.8.4 Pencarian Node RTBST ... 33

2.8.5 Traversal RTBST ... 34

2.9 Right-Threaded AVL Tree ... 35

2.10 TreeMap ... 37

2.11 Bahasa Pemrograman Java... 38

2.11.1 Kelas dan Objek ... 38

2.11.2 Tipe data ... 39

2.11.3 Penggunaan Array pada Java ... 39

2.11.4 Bitwise Operator ... 40

2.11.5 Tipe Generic ... 43

2.11.6 Menghitung Waktu Proses pada Java ... 43

2.11.7 Menghitung Memori pada Java... 44

2.11.8 Javadoc ... 44

2.10.8 JUnit ... 45

BAB III ANALISIS DAN DESAIN... 46

3.1 Analisis ... 46

3.1.1 Analisis Interface Map ... 46

3.1.2 Analisis Interface Map.Entry ... 48

3.1.3 Analisis Interface SortedMap... 48

3.1.4 Analisis Interface NavigableMap... 49


(5)

3.2 Gambaran Keseluruhan ... 52

3.2.1 Persyaratan Antarmuka Eksternal ... 53

3.2.2 Antarmuka dengan Pengguna ... 53

3.2.3 Antarmuka Perangkat Keras ... 53

3.2.4 Antarmuka Perangkat Lunak ... 54

3.2.5 Fitur-fitur Perangkat Lunak ... 54

3.2 Desain Perangkat Lunak ... 60

3.2.5 Perancangan Tipe Data Abstrak Map ... 60

3.2.6 Pemodelan Perangkat Lunak ... 61

3.2.7 Desain Penyimpanan Data ... 79

3.2.8 Algoritma ... 84

4.2.7 Desain Antarmuka ... 106

BAB IV PENGEMBANGAN PERANGKAT LUNAK ... 109

4.1 Implementasi Package ... 109

4.2 Implementasi Class ... 109

4.3 Implementasi Method ... 110

4.3.1 Implementasi Method pada Kelas IntKeySmallMap ... 110

4.3.2 Implementasi Method pada Kelas IntKeyArrayMap ... 112

4.3.3 Implementasi Method pada Kelas RightThreadedAVL ... 116

4.3.4 Implementasi Method pada Kelas IntKeyTreeMap ... 123

4.4 Implementasi Antarmuka Program Simulasi ... 130

4.4.1 Form Kelola Right-Threaded AVL Tree ... 130

4.4.2 Form Kelola Data ADT Map ... 130

4.4.3 Form View ADT Map ... 131

4.5 Antarmuka Program Testing ... 132


(6)

BAB V TESTING DAN EVALUASI SISTEM ... 134

5.1 Rencana Pengujian ... 134

5.2 Pelaksanaan Pengujian ... 134

5.2.1 Unit Testing ... 135

5.2.2 Black Box ... 140

5.2.3 Uji Performansi Map ... 144

5.3 Analisis Hasil Uji Performansi Map ... 153

5.4 Perbandingan Struktur AVL Tree dan Red-Black Tree ... 155

BAB VI KESIMPULAN DAN SARAN ... 156

6.1 Kesimpulan ... 156

6.2 Saran ... 157

DAFTAR PUSTAKA ... 159


(7)

DAFTAR GAMBAR

Gambar 2.1 Ilustrasi dari sebuah map. Key (label) mempunyai sebuah value

(diskette) dan dibungkus ke dalam entry (labeled diskette) lalu disusun ... 7

Gambar 2.2 Ilustrasi sebuah array (Zakaria, 2006) ... 9

Gambar 2.3 Struktur data pohon (Lafore, 2003) ... 9

Gambar 2.4 Istilah-istilah pada struktur data pohon ... 10

Gambar 2.5 Contoh pohon biner (Rosa, 2010) ... 11

Gambar 2.6 Binary search tree menggunakan bilangan ... 12

Gambar 2.7 Representasi Elemen Pohon Biner ... 12

Gambar 2.8 Representasi pohon biner (Rosa, 2010) ... 13

Gambar 2.9 Deklarasi node pada binary search tree ... 13

Gambar 2.10 (a) AVL tree; (b) bukan AVL tree (simpul tidak seimbang ... 14

Gambar 2.11 AVL tree dengan simbol bantu (Sanjaya, 2005) ... 15

Gambar 2.12 Deklarasi node pada AVL tree link[0] merupakan anak kiri ... 15

Gambar 2.13 Penambahan node n pada anak kiri dari node p membuat balance factor node p dan parent dari node p ... 16

Gambar 2.14 Deklarasi pointer dan algoritma pencarian lokasi untuk ... 17

Gambar 2.15 Penempatan pointer tambahan t dan s pada ... 17

Gambar 2.16 Proses update balance factor dimulai dari s turun ... 18

Gambar 2.17 Algoritma insert pada AVL tree (Walker, 2008) ... 18

Gambar 2.18 Algoritma metode insert_balance (Walker, 2008) ... 19

Gambar 2.19 Ilustrasi insertion pada AVL tree (Walker, 2008) ... 20

Gambar 2.20 Deklarasi pointer dan algoritma pencarian lokasi node yang akan dihapus pada AVL tree (Walker, 2008) ... 21

Gambar 2.21 Algoritma delete pada AVL tree (Walker, 2008)... 22

Gambar 2.22 Algoritma penghapusan node pada AVL tree (Walker, 2008) ... 22

Gambar 2.23 Algoritma metode remove_balance (Walker, 2008) ... 23

Gambar 2.24 Ilustrasi deletion pada AVL tree (Walker, 2008) ... 24

Gambar 2.25 Single rotate arah kanan pada AVL tree ... 25

Gambar 2.26 Single rotate arah kiri pada AVL tree ... 25


(8)

Gambar 2.28 Double rotate arah kanan pada AVL tree ... 26

Gambar 2.29 Double rotate arah kiri pada AVL tree ... 26

Gambar 2.30 Algoritma double rotate pada AVL tree ... 26

Gambar 2.31 Algoritma metode adjust_balancee ... 27

Gambar 2.32 Right-threaded binary tree (Walker, 2008) ... 28

Gambar 2.33 Right-threaded binary tree (Walker, 2008) ... 28

Gambar 2.34 Proses insert pada right-threaded binary ... 29

Gambar 2.35 Proses remove situasi ke-1 pada right-threaded ... 30

Gambar 2.36 Proses remove situasi ke-2 pada right-threaded ... 31

Gambar 2.37 Proses remove situasi ke-3 pada right-threaded ... 32

Gambar 2.38 Proses remove situasi ke-4 pada right-threaded ... 33

Gambar 2.39 Algoritma pencarian pada right-threaded ... 34

Gambar 2.40 Algoritma traversal pada right-threaded ... 34

Gambar 2.41 Deklarasi node pada right-threaded AVL tree ... 35

Gambar 2.42 Single rotation ke arah kanan pada ... 35

Gambar 2.43 Single rotation ke arah kiri pada ... 36

Gambar 2.44 Double rotation ke arah kanan pada ... 36

Gambar 2.45 Double rotation ke arah kiri pada ... 36

Gambar 2.46 Metode untuk menghitung waktu dalam ... 43

Gambar 2.47 Algoritma untuk menghitung waktu dalam Java (Knudsen, 2005). 44 Gambar 2.48 Metode untuk menghitung memori ... 44

Gambar 2.49 Algoritma untuk menghitung memori ... 44

Gambar 3.50 Struktur Interface pada Java Collections Framework ... 46

Gambar 3.51 Kelas-kelas implementasi Map di dalam Java Collections Framework (Naftalin, 2007) ... 37

Gambar 3.52 Red-black tree dengan jumlah 14 elemen dan maksimum tinggi 5 (Collins, 2011) ... 51

Gambar 3.53 Use Case diagram program simulasi ... 62

Gambar 3.54 Aktivitas pengolahan data right-threaded AVL tree ... 63

Gambar 3.55 Aktivitas tambah data right-threaded AVL tree ... 64

Gambar 3.56 Aktivitas hapus data AVL tree ... 65


(9)

Gambar 3.58 Aktivitas hapus semua data right-threaded AVL tree ... 66

Gambar 3.59 Aktivitas melihat data right-threaded AVL tree ... 66

Gambar 3.60 Aktivitas pengolahan data ... 67

Gambar 3.61 Aktivitas tambah data ... 68

Gambar 3.62 Aktivitas hapus data ... 69

Gambar 3.63 Aktivitas cari data ... 70

Gambar 3.64 Aktivitas ubah data ... 71

Gambar 3.65 Aktivitas melihat struktur tree ADT map ... 72

Gambar 3.66 Aktivitas upload data file ... 73

Gambar 3.67 Class diagram IntKeySmallMap ... 74

Gambar 3.68 Class diagram IntKeyArrayMap ... 75

Gambar 3.69 Class diagram RightThreadedAVL ... 76

Gambar 3.70 Class diagram IntKeyAVLMap ... 77

Gambar 3.71 Class diagram MiniBench ... 78

Gambar 3.72 Class diagram data uji coba ... 79

Gambar 3.73 Representasi penyimpanan pada kelas ... 80

Gambar 3.74 Representasi penyimpanan pada kelas IntKeyArrayMap ... 81

Gambar 3.75 Penyimpanan pada kelas RightThreadedAVL ... 82

Gambar 3.76 Penyimpanan pada kelas IntKeyTreeMap ... 83

Gambar 3.77 Representasi proses masukkan key dan value dalam kelas IntKeySmallMap ... 84

Gambar 3.78 Proses input key dan value dalam kelas IntKeyArrayMap... 87

Gambar 3.79 Proses penyimpanan key pada kelas RightThreadedAVL ... 92

Gambar 3.80 Proses input key dan value dalam kelas IntKeyTreeMap... 100

Gambar 3.81 Menghitung key dalam suatu NodeEntry ... 106

Gambar 3.82 Form kelola right-threaded AVL tree ... 107

Gambar 3.83 Form kelola customer ... 107

Gambar 3.84 Form view ADT map ... 108

Gambar 4.85 Tampilan form kelola right-threaded AVL tree ... 130

Gambar 4.86 Tampilan form kelola data ADT map ... 131

Gambar 4.87 Tampilan form kelola ADT map ... 131


(10)

Gambar 4.89 Tampilan program tester menu pilih tipe generic ... 132 Gambar 4.90 Tampilan output hasil pengetesan ... 132 Gambar 4.91 Tampilan output hasil pengetesan di simpan ke dalam sebuah file133 Gambar 4.92 Tampilan Javadoc kelas IntKeyTreeMap... 133 Gambar 5.93 Sample data Integer-Customer dengan random key ... 145


(11)

DAFTAR TABEL

Tabel 2.1 Contoh penggunaan dan hasil operasi pada map dengan key bertipe

integer dan value bertipe single character (Goodrich, 2010) ... 8

Tabel 2.2 Performansi kompleksitas kecepatan operasi pada AVL tree (Goodrich, 2010) ... 27

Tabel 2.3 Konstruktor di dalam kelas TreeMap (Schildt, 2007) ... 38

Tabel 2.4 Tipe data bilangan bulat pada Java (Schildt, 2007) ... 40

Tabel 2.5 Bitwise operator di java (Schildt, 2007) ... 40

Tabel 2.6 Tabel Logical Operator (Schildt, 2007) ... 41

Tabel 2.7 Metode Assertion pada JUnit (Minella, 2008) ... 45

Tabel 3.8 Metode-metode di dalam Interface Map (Schildt, 2007)... 47

Tabel 3.9 Metode-metode di dalam Interface Map.Entry (Schildt, 2007) ... 48

Tabel 3.10 Metode-metode di dalam Interface SortedMap (Schildt, 2007) ... 49

Tabel 3.11 Metode di dalam Interface NavigableMap (Schildt, 2007) ... 49

Tabel 3.12 Metode di dalam Interface NavigableMap (lanjutan) ... 50

Tabel 3.13 Performansi kompleksitas kecepatan operasi pada red-black tree (Goodrich, 2010) ... 51

Tabel 4.14 Implementasi package ... 109

Tabel 4.15 Implementasi class ... 109

Tabel 4.16 Fungsi-fungsi pendukung pada IntKetSmallMap ... 112

Tabel 4.17 Fungsi-fungsi pendukung pada IntKeyArrayMap ... 116

Tabel 4.18 Fungsi-fungsi pendukung pada RightThreadedAVL ... 123

Tabel 4.19 Fungsi-fungsi pendukung pada IntKeyTreeMap ... 128

Tabel 5.20 Pengujian halaman right-threaded AVL ... 141

Tabel 5.21 Pengujian halaman data ADT Map ... 142

Tabel 5.22 Pengujian halaman ADT Map Tree ... 143

Tabel 5.23 Pengujian program test performansi map ... 143

Tabel 5.24 Pengujian performansi penggunaan memori pada dua buah map .... 146

Tabel 5.25 Pengujian performansi penggunaan memori pada dua buah map .... 147

Tabel 5.26 Pengujian performansi penggunaan memori pada dua buah map .... 147


(12)

Tabel 5.28 Pengujian performansi kecepatan waktu pada dua buah map ... 149

Tabel 5.29 Pengujian performansi kecepatan waktu pada dua buah map ... 150

Tabel 5.30 Pengujian performansi kecepatan waktu pada dua buah map ... 151

Tabel 5.31 Pengujian performansi kecepatan waktu pada dua buah map ... 152

Tabel 5.32 Hasil rata-rata pengujian alokasi memori pada kelas TreeMap dan IntKeyTreeMap ... 153

Tabel 5.33 Hasil rata-rata pengujian kecepatan waktu pada kelas TreeMap dan IntKeyTreeMap ... 153

Tabel 5.34 Rangkuman perbandingan antara TreeMap pada Java dan IntKeyTreeMap ... 154


(13)

DAFTAR PROGRAM

Kode Program 3.1 Deklarasi kelas Entry di dalam TreeMap ... 52

Kode Program 3.2 Deklarasi kelas IntKeySmallMap ... 80

Kode Program 3.3 Deklarasi kelas IntKeyArrayMap ... 81

Kode Program 3.4 Deklarasi kelas RightThreadedAVLTree ... 82

Kode Program 3.5 Deklarasi kelas RightThreadedAVL ... 83

Kode Program 4.6 Implementasi metode put() pada IntKeySmallMap ... 111

Kode Program 4.7 Implementasi metode remove() pada IntKeySmallMap ... 111

Kode Program 4.8 Implementasi metode get() pada IntKeySmallMap ... 112

Kode Program 4.9 Implementasi metode put() pada IntKeyArrayMap ... 112

Kode Program 4.10 Implementasi metode remove() pada IntKeyArrayMap ... 113

Kode Program 4.11 Implementasi metode get() pada IntKeyArrayMap ... 114

Kode Program 4.12 Implementasi metode iterator() pada IntKeyArrayMap... 115

Kode Program 4.13 Implementasi metode get() pada ... 116

Kode Program 4.14 Implementasi metode get() pada ... 117

Kode Program 4.15 Implementasi metode insert() pada RightThreadedAVL ... 117

Kode Program 4.16 Implementasi metode insertbalanceFactor() pada RightThreadedAVL... 118

Kode Program 4.17 Implementasi metode remove() pada RightThreadedAVL . 119 Kode Program 4.18 Implementasi metode removeBalanceFactor() pada RightThreadedAVL... 120

Kode Program 4.19 Implementasi metode adjustBalanceFactor() pada RightThreadedAVL... 121

Kode Program 4.20 Implementasi metode singleRotate() pada RightThreadedAVL... 121

Kode Program 4.21 Implementasi metode doubleRotate() pada RightThreadedAVL... 121

Kode Program 4.22 Implementasi metode search() pada RightThreadedAVL .. 122

Kode Program 4.23 Implementasi metode get() pada NodeEntry ... 123

Kode Program 4.24 Implementasi metode get() pada NodeEntry ... 123


(14)

Kode Program 4.26 Implementasi metode remove() pada IntKeyTreeMap ... 125

Kode Program 4.27 Implementasi metode get() pada IntKeyTreeMap ... 127

Kode Program 4.28 Implementasi metode iterator() pada IntKeyTreeMap... 127

Kode Program 5.29 Deklarasi kelas untuk unit testing dengan JUnit... 135

Kode Program 5.30 Deklarasi fungsi tesMethodPut() ... 136

Kode Program 5.31 Deklarasi fungsi testReturnMethodPut() ... 136

Kode Program 5.32 Deklarasi fungsi testMethodRemove() ... 137

Kode Program 5.33 Deklarasi fungsi testReturnMethodRemove() ... 137

Kode Program 5.34 Deklarasi fungsi testMethodSize() ... 138

Kode Program 5.35 Deklarasi fungsi testKeySet() ... 138

Kode Program 5.36 Deklarasi fungsi testValues() ... 139


(15)

BAB I

PENDAHULUAN

1.1 Latar Belakang

Pada masa kini komputer mengalami perkembangan yang sangat cepat untuk memberikan kemudahan dalam mengakses, menyimpan dan mendapatkan berbagai informasi. Seiring meningkatnya kecanggihan teknologi komputer tersebut, maka jumlah informasi yang perlu disimpan ke dalam sebuah komputer semakin bertambah. Dengan bertambahnya jumlah informasi tersebut, maka perangkat komputer pun harus memiliki daya tampung dan daya kelola data yang lebih baik.

Di dalam sebuah komputer, terdapat salah satu media penyimpanan data sementara yang dinamakan Random Access Memory (RAM). Proses penyimpanan data di dalam memori tersebut menggunakan aturan yang disebut struktur data. Memori komputer diakses langsung oleh Central Processing Unit (CPU) sehingga dapat memproses data dengan sangat cepat, akan tetapi daya tampung di dalamnya sangat terbatas. Maka dari itu, diperlukan konsep struktur data yang tepat, agar data dapat disimpan dan diproses dengan baik oleh memori dan CPU di dalam komputer. Stuktur data mempunyai peranan penting di dalam proses pengembangan aplikasi komputer, terutama aplikasi yang berguna untuk memproses data dalam jumlah yang banyak. Konsep struktur data banyak diterapkan pada beberapa bahasa pemograman komputer, salah satunya adalah Java.

Di dalam bahasa pemograman Java, struktur data diterapkan di dalam Java Collections Framework. Di dalam framework tersebut terdapat sebuah interface Map yang berguna untuk menyimpan data berupa pasangan key-value atau disebut entry. Pasangan key-value sering digunakan di dalam berbagai aplikasi, salah satu contohnya yaitu untuk mengelola data mahasiswa. Key digunakan sebagai nomor induk mahasiswa dan value berupa data lengkap mahasiswa tersebut, sehingga untuk mengakses data seorang mahasiswa, hanya


(16)

2

diperlukan key sebagai acuan. Salah satu kelas yang mengimplementasi interface Map di dalam Java adalah kelas TreeMap. Pada kelas TreeMap, masing-masing entry atau pasangan key-value disimpan di dalam node pada yang disusun ke dalam struktur data red-black tree yang berbasis binary search tree, sehingga jumlah node sama dengan jumlah pasangan key-value. (Collins, 2011).

Hal ini mengakibatkan semakin banyak jumlah key-value yang disimpan, maka semakin banyak jumlah node pada struktur pohon tersebut. Oleh karena itu di dalam penelitian ini akan dibuat sebuah tipe data abstrak map yang mempunyai cara kerja mirip dengan TreeMap. Perbedaan dari tipe data abstrak map yang akan dibuat ini adalah node dapat menyimpan lebih dari satu pasang key-value. Pasangan key-value di dalam node tersebut akan disimpan menggunakan struktur array. Masing-masing node tersebut selanjutnya dibentuk ke dalam struktur data right-threaded AVL tree yang merupakan gabungan dari struktur data AVL tree dan right-threaded tree (Pfaff, 2007). AVL tree sendiri merupakan salah satu jenis struktur pohon seimbang selain red-black tree (McAllister, 2010).

Tipe data abstrak map yang telah dibuat tersebut kemudian akan diuji coba bersama dengan kelas TreeMap pada Java. Proses uji coba akan dilakukan dengan mengukur kecepatan waktu dalam memproses penambahan, pencarian dan penghapusan data. Selain itu juga dilakukan pengukuran penggunaan memori, sehingga dapat dilakukan analisis untuk melalukan perbandingan dari kedua tipe map tersebut dilihat dari waktu proses dan kebutuhan memori yang digunakan.

1.2 Rumusan Masalah

Melihat latar belakang yang telah diuraikan di atas, terdapat beberapa permasalahan yang dihadapi, diantaranya:

1. Bagaimana pengembangan struktur data right-threaded AVL tree beserta implementasi program simulasi dari struktur data tersebut.

2. Bagaimana pengembangan sebuah tipe data abstrak map berbasis right-threaded AVL tree dengan konsep satu node di dalam struktur tree tersebut dapat menyimpan lebih dari satu pasang key-value beserta program


(17)

3

3. Bagaimana implementasi perangkat lunak sederhana untuk mengukur kecepatan waktu eksekusi dan penggunaan memori pada tipe data abstrak map yang telah dikembangan dan juga pada kelas TreeMap di dalam Java serta analisis perbandingan terhadap kedua tipe data map tersebut berdasarkan hasil pengukuran yang telah dilakukan.

1.3 Tujuan Penelitian

Berikut ini merupakan tujuan dari penelitian yang akan dicapai di dalam tugas akhir ini untuk menjawab rumusan masalah yang ada, diantaranya:

1. Mendesain dan mengimplementasikan struktur data right-threaded AVL tree beserta program simulasinya.

2. Mendesain dan mengembangkan sebuah tipe data abstrak map yang dapat menyimpan dan memproses data berupa key-value berbasis struktur data right-threaded AVL tree beserta dengan program simulasinya.

3. Mengukur pengunaan waktu dan memori antara kelas TreeMap di dalam Java dan tipe data abstrak map yang telah dibuat di dalam tugas akhir ini. 4. Menganalisis hasil pengukuran waktu dan memori untuk memperoleh

perbandingan dari tipe data abstrak map yang telah dibuat dengan kelas TreeMap pada Java.

1.4 Batasan Masalah

Terdapat beberapa batasan masalah yang akan diterapkan di dalam penelitian ini, diantaranya:

1. Key yang digunakan pada program simulasi struktur data right-threaded AVL tree bertipe integer.

2. Key yang digunakan pada tipe data abstrak map bertipe integer. 3. Value yang digunakan pada tipe data abstrak map bertipe generic.

4. Aplikasi simulasi untuk menguji coba struktur right-threaded AVL tree dan tipe data abstrak map berbasis Graphical User Interface atau GUI


(18)

4

5. Aplikasi untuk menghitung waktu eksekusi dan memori pada komputer berbasis console.

6. Pengukuran waktu eksekusi dilakukan pada fungsi penyimpanan, penghapusan dan pengambilan key-value.

7. Pengukuran kebutuhan memori pada komputer dilakukan pada fungsi penyimpanan key-value.

8. Sample data yang digunakan oleh program simulasi pada tipe data abstrak map berupa data customer dengan volume maksimal 10000 data.

9. Sample data yang digunakan pada aplikasi pengukuran waktu dan memori terdiri dari 3 jenis data yang dibedakan berdasarkan tipe value, yaitu: Customer, String dan Double, sedangkan key dari masing-masing value seluruhnya bertipe integer.

10.Semua sample data dibuat ke dalam beberapa file yang berekstensi .csv. 11.Batasan perangkat keras yang digunakan untuk mengukur kecepatan

waktu eksekusi dan penggunaan memori yaitu:  Processor Intel Core i5 M 520 2.40 GHz  Memory (RAM) 4.00 Gb

1.5 Sistematika Pembahasan

Sistematika penyajian dalam laporan tugas akhir ini adalah sebagai berikut:

 BAB I PENDAHULUAN

Bab 1 terdiri atas Latar Belakang, Rumusan Masalah, Tujuan, Batasan Masalah dan Sistematika Pembahasan.

 BAB II LANDASAN TEORI

Bab 2 membahas teori-teori yang mendasari dan mendukung di dalam pembuatan tugas akhir ini. Teori-teori ini diambil dari pustaka yang diperlukan.


(19)

5

 BAB III ANALISIS DAN DESAIN

Bab 3 berisi analisis perangkat lunak yang sudah ada dan desain perancangan tipe data abstrak.

 BAB IV PENGEMBANGAN PERANGKAT LUNAK

Bab 4 berisi implementasi class/modul yang telah diidentifikasi dari hasil analisis dan desain.

 BAB V TESTING DAN EVALUASI SISTEM

Bab 5 berisi rencana dan pelaksanaan pengujian program yang berupa unit testing dan black box.

 BAB VI KESIMPULAN DAN SARAN

Bab 6 mencakup kesimpulan dan saran yang dirumuskan dari hasil penelitian.


(20)

BAB VI

KESIMPULAN DAN SARAN

6.1 Kesimpulan

Berdasarkan hasil analisis dan pengembangan tipe data abstrak map dan program simulasi yang telah selesai dilakukan, maka dapat diambil beberapa kesimpulan.

1. Struktur data right-threaded AVL tree telah berhasil dikembangkan beserta dengan program simulasi yang berbasis GUI. Dengan berhasilnya pengembangan struktur right-threaded AVL tree ini maka dapat memudahkan dalam proses pembuatan tipe data abstrak map selanjutnya. 2. Tipe data abstrak map berhasil dikembangkan beserta program simulasi

yang berbasis GUI.

3. Penggunaan right-thread pada struktur AVL tree bisa memudahkan

implementasi fungsi iterator() pada kelas IntKeyTreeMap

4. Program pengetesan kebutuhan memori dan kecepatan waktu untuk

mengukur performansi dari tipe data abstrak map berhasil dikembangkan. Dengan adanya program tersebut dapat memudahkan dalam menganalisis performansi tipe data abstrak tersebut berdasarkan hasil yang didapat.

5. Dari hasil pengujian sebanyak 10000 data, IntKeyTreeMapmemerlukan

hanya 13% memori dari jumlah memori pada kelas TreeMap atau memori

yang dibutuhkan oleh IntKeyTreeMap 87% lebih hemat dibandingkan

dengan kelas TreeMap pada Java.

6. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada

fungsi insert(), menunjukkan bahwa IntKeyTreeMap membutuhkan

kecepatan waktu eksekusi rata-rata 3% lebih cepat dari kelas TreeMap

pada Java.

7. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada


(21)

158

membutuhkan kecepatan waktu eksekusi rata-rata 33% lebih cepat dari kelas IntKeyTreeMap.

8. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada

fungsi get(),menunjukkan bahwa kelas IntKeyTreeMap membutuhkan

kecepatan waktu eksekusi rata-rata 75% lebih cepat dari kelas TreeMap

pada Java.

9. Jika terdapat aplikasi yang dibangun dengan bahasa pemograman Java memerlukan sebuah tipe map yang menghasilkan key secara terurut dan mengutamakan kecepatan dalam proses insertion dan deletion, maka

TreeMap merupakan pilihan yang tepat.

10. Jika terdapat aplikasi yang dibangun dengan bahasa pemograman Java memerlukan sebuah tipe map yang menghasilkan key secara terurut dan mengutamakan kecepatan dalam proses retrieving dan penggunaan

memori yang lebih sedikit, maka IntKeyTreeMap merupakan pilihan

yang tepat.

11.Kekurangan dari kelas IntKeyTreeMap adalah keterbatasan key yang hanya bisa digunakan dengan tipe integer dan kelas tersebut akan menunjukkan hasil yang maksimal apabila key disusun secara sequence atau reverse.

6.2 Saran

Saran yang diberikan untuk pengembangan lebih lanjut dari tipe data abstrak ini antara lain.

1. Mengganti tipe data yang menjadi prefix pada NodeEntry di dalam kelas

IntKeyTreeMap menjadi tipe long, sehingga jumlah maksimal penyimpanan key-value dalam satu node menjadi 64 pasang.

2. Membandingkan performansi seluruh fungsi-fungsi selain put(), get() dan remove(), serta mengoptimalkan kecepatan waktu proses pada fungsi-fungsi lainnya selain tiga fungsi-fungsi yang disebutkan tadi.


(22)

159

4. Membuat sebuah konsep map dapat menyimpan satu atau lebih key yang bernilai sama, sehingga jika terdapat key yang sama, maka value dari key sebelumnya tidak ditimpa atau diganti dengan value dari key yang baru.


(23)

DAFTAR PUSTAKA

Almedia, Marco., Reis, Rogerio (2006). Efficient Representation of Integer Sets. Porto: Universidade do Porto.

Collins, J., William (2011). Data Structures and the Java Collections Framework 3rd edition. California: John Wiley & Sons, Inc.

Dwi, Prasetyo, Didik (2007). 150 Rahasia Pemograman Java. Jakarta: Elex Media Komputindo

Goodrich, T., Michael, Tamassia, Roberto (2010). Data Structures & Algorithms in Java 4th edition. California: John Wiley & Sons, Inc.

Haahr, Mads (2010). Random Number. http://www.random.org/ (diakses tanggal 12 Juli 2013)

Jenkins, S., Michael (1998). Abstract Data Types in Java. New York: McGraw-Hill.

Li, Sing, Knudsen, Jonathan (2005). Beginning J2ME: From Novice to Professional 3rd edition. New York: Appress.

Lafore, Robert (2002). Data Structures & Algorithms in Java 2nd edition. Indianapolis: Sams.

Minella, Michael (2008). JUnit and EasyMock. New York: Dzone, Inc.

Naftalin, Maurice., Wadler, Philips (2007). Java Generics and Collections. California: O’Reilly Media, Inc.


(24)

161

Oracle (2013). Java Platform SE 7 Documentation.

http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html (diakses tanggal 1 Mei 2013)

Oracle (2013). The Java Tutorials. http://docs.oracle.com/javase/tutorial/ (diakses tanggal 1 Januari 2013)

Pfaff, Ben (2007). An Introduction to Binary Search Trees and Balanced Trees. Michigan: GNU Free Documentation License.

Pinho, Vasco. Generate Test Data for Your Database.

http://www.databasetestdata.com/ (diakses tanggal 5 Juli 2013)

Schildt, Herbert (2007). The Complete Reference Java 7th edition. New York: McGraw-Hill.

Shalahudin, M., S., A., Rosa (2010). Modul Pembelajaran Struktur Data. Bandung: Modula.

Supardi, Yuniar (2007). Pemograman Database dengan Java dan MySQL. Jakarta: Elex Media Komputindo.

Walker, Julienne (2008). AVL trees.

http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx (diakses tanggal 28 Mei 2013)

Williams, McAllister (2010). Data Structures and Algorithms Using Java. Canada: John and Bartlett Publisher.


(1)

5

Universitas Kristen Maranatha  BAB III ANALISIS DAN DESAIN

Bab 3 berisi analisis perangkat lunak yang sudah ada dan desain perancangan tipe data abstrak.

 BAB IV PENGEMBANGAN PERANGKAT LUNAK

Bab 4 berisi implementasi class/modul yang telah diidentifikasi dari hasil analisis dan desain.

 BAB V TESTING DAN EVALUASI SISTEM

Bab 5 berisi rencana dan pelaksanaan pengujian program yang berupa unit testing dan black box.

 BAB VI KESIMPULAN DAN SARAN

Bab 6 mencakup kesimpulan dan saran yang dirumuskan dari hasil penelitian.


(2)

157

Universitas Kristen Maranatha

BAB VI

KESIMPULAN DAN SARAN

6.1 Kesimpulan

Berdasarkan hasil analisis dan pengembangan tipe data abstrak map dan program simulasi yang telah selesai dilakukan, maka dapat diambil beberapa kesimpulan.

1. Struktur data right-threaded AVL tree telah berhasil dikembangkan beserta dengan program simulasi yang berbasis GUI. Dengan berhasilnya pengembangan struktur right-threaded AVL tree ini maka dapat memudahkan dalam proses pembuatan tipe data abstrak map selanjutnya. 2. Tipe data abstrak map berhasil dikembangkan beserta program simulasi

yang berbasis GUI.

3. Penggunaan right-thread pada struktur AVL tree bisa memudahkan implementasi fungsi iterator() pada kelas IntKeyTreeMap

4. Program pengetesan kebutuhan memori dan kecepatan waktu untuk mengukur performansi dari tipe data abstrak map berhasil dikembangkan. Dengan adanya program tersebut dapat memudahkan dalam menganalisis performansi tipe data abstrak tersebut berdasarkan hasil yang didapat. 5. Dari hasil pengujian sebanyak 10000 data, IntKeyTreeMapmemerlukan

hanya 13% memori dari jumlah memori pada kelas TreeMapatau memori yang dibutuhkan oleh IntKeyTreeMap 87% lebih hemat dibandingkan dengan kelas TreeMappada Java.

6. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada fungsi insert(), menunjukkan bahwa IntKeyTreeMap membutuhkan kecepatan waktu eksekusi rata-rata 3% lebih cepat dari kelas TreeMap pada Java.

7. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada fungsi remove(),menunjukkan bahwa kelas TreeMap pada Java


(3)

158

Universitas Kristen Maranatha

membutuhkan kecepatan waktu eksekusi rata-rata 33% lebih cepat dari kelas IntKeyTreeMap.

8. Kecepatan waktu eksekusi yang diuji coba menggunakan 10000 data pada fungsi get(),menunjukkan bahwa kelas IntKeyTreeMap membutuhkan kecepatan waktu eksekusi rata-rata 75% lebih cepat dari kelas TreeMap pada Java.

9. Jika terdapat aplikasi yang dibangun dengan bahasa pemograman Java memerlukan sebuah tipe map yang menghasilkan key secara terurut dan mengutamakan kecepatan dalam proses insertion dan deletion, maka TreeMapmerupakan pilihan yang tepat.

10. Jika terdapat aplikasi yang dibangun dengan bahasa pemograman Java memerlukan sebuah tipe map yang menghasilkan key secara terurut dan mengutamakan kecepatan dalam proses retrieving dan penggunaan memori yang lebih sedikit, maka IntKeyTreeMap merupakan pilihan yang tepat.

11.Kekurangan dari kelas IntKeyTreeMap adalah keterbatasan key yang hanya bisa digunakan dengan tipe integer dan kelas tersebut akan menunjukkan hasil yang maksimal apabila key disusun secara sequence atau reverse.

6.2 Saran

Saran yang diberikan untuk pengembangan lebih lanjut dari tipe data abstrak ini antara lain.

1. Mengganti tipe data yang menjadi prefix pada NodeEntrydi dalam kelas IntKeyTreeMap menjadi tipe long, sehingga jumlah maksimal penyimpanan key-value dalam satu node menjadi 64 pasang.

2. Membandingkan performansi seluruh fungsi-fungsi selain put(), get() dan remove(), serta mengoptimalkan kecepatan waktu proses pada fungsi-fungsi lainnya selain tiga fungsi-fungsi yang disebutkan tadi.


(4)

159

Universitas Kristen Maranatha

4. Membuat sebuah konsep map dapat menyimpan satu atau lebih key yang bernilai sama, sehingga jika terdapat key yang sama, maka value dari key sebelumnya tidak ditimpa atau diganti dengan value dari key yang baru.


(5)

160

Universitas Kristen Maranatha

DAFTAR PUSTAKA

Almedia, Marco., Reis, Rogerio (2006). Efficient Representation of Integer Sets. Porto: Universidade do Porto.

Collins, J., William (2011). Data Structures and the Java Collections Framework

3rd edition. California: John Wiley & Sons, Inc.

Dwi, Prasetyo, Didik (2007). 150 Rahasia Pemograman Java. Jakarta: Elex Media Komputindo

Goodrich, T., Michael, Tamassia, Roberto (2010). Data Structures & Algorithms

in Java 4th edition. California: John Wiley & Sons, Inc.

Haahr, Mads (2010). Random Number. http://www.random.org/ (diakses tanggal 12 Juli 2013)

Jenkins, S., Michael (1998). Abstract Data Types in Java. New York: McGraw-Hill.

Li, Sing, Knudsen, Jonathan (2005). Beginning J2ME: From Novice to

Professional 3rd edition. New York: Appress.

Lafore, Robert (2002). Data Structures & Algorithms in Java 2nd edition. Indianapolis: Sams.

Minella, Michael (2008). JUnit and EasyMock. New York: Dzone, Inc.

Naftalin, Maurice., Wadler, Philips (2007). Java Generics and Collections.


(6)

161

Universitas Kristen Maranatha

Oracle (2013). Java Platform SE 7 Documentation.

http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html (diakses tanggal 1 Mei 2013)

Oracle (2013). The Java Tutorials. http://docs.oracle.com/javase/tutorial/ (diakses tanggal 1 Januari 2013)

Pfaff, Ben (2007). An Introduction to Binary Search Trees and Balanced Trees. Michigan: GNU Free Documentation License.

Pinho, Vasco. Generate Test Data for Your Database.

http://www.databasetestdata.com/ (diakses tanggal 5 Juli 2013)

Schildt, Herbert (2007). The Complete Reference Java 7th edition. New York: McGraw-Hill.

Shalahudin, M., S., A., Rosa (2010). Modul Pembelajaran Struktur Data. Bandung: Modula.

Supardi, Yuniar (2007). Pemograman Database dengan Java dan MySQL. Jakarta: Elex Media Komputindo.

Walker, Julienne (2008). AVL trees.

http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx (diakses tanggal 28 Mei 2013)

Williams, McAllister (2010). Data Structures and Algorithms Using Java. Canada: John and Bartlett Publisher.


Dokumen yang terkait

Rancangan Model Algoritma Pohlig–Hellman Multiple-Key Berdasarkan Algoritma R.S.A. Multiple-Key

2 49 94

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR)

0 0 1

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR)

0 0 9

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR)

0 0 2

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR) 646m99 chapter I

0 0 5

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR) 646m99 chapter II

0 0 24

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR) 646m99 chapter III

0 1 32

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR) 646m99 chapter V

0 0 1

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR)

0 0 1

Implementasi penyeimbangan pohon AVL dengan menggunakan struktur data pascal - Diponegoro University | Institutional Repository (UNDIP-IR)

0 0 10