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