net/publication/294051110
CITATIONS READS
0 4,173
1 author:
Pradana Setialana
Universitas Gadjah Mada
2 PUBLICATIONS 0 CITATIONS
SEE PROFILE
All content following this page was uploaded by Pradana Setialana on 12 February 2016.
Abstract
Binary search trees are better at displaying data, find data, update data and delete data than a circular double
linked list which is only good in entering data. But the low level of complexity of the program double circular
linked list is its own advantages of the binary search tree that has a high level of program complexity.
Keywords: binary search tree, circular double linked list, efficient data structures, fast run time, difference
between tree and linked list.
Fig. 1. Setiap node yang terdiri atas dua elemen, data integer, dan elemen rujukan ke node berikutnya
1.3 Tree umum dari binary tree adalah binary search tree.
Binary search tree memiliki sifat-sifat yaitu subtree
Tree adalah adalah suatu struktur data yang
sebelah kiri memiliki nilai yang lebih rendah
digunakan secara luas yang menyerupai struktur
daripada node kunci. Sedangkan subtree sebelah
pohon dengan sejumlah simpul yang terhubung.
kanan memiliki nilai yang lebih tinggi daripada
Sedangkan pohon biner (binary tree) adalah sebuah
node kunci [2].
pohon struktur data dimana setiap simpul memiliki
paling banyak dua anak. Secara khusus anaknya
dinamakan kiri dan kanan. Penggunaan secara
2. Metodologi Incel Core i5 430M, RAM 2 GB, ATI Mobiliti
Radeon HD 5470 dengan VRAM 512 MB.
Metodologi penilitian untuk menganalisis Terdapat dua kondisi daya listrik notebook yaitu
persamaan, perbedaan, dan keefisien linked list dan kondisi power saver (menggunakan kemampuan
tree adalah processor sedikit) dan kondisi high performance –
Intel Turbo Bost (Menggunakan kemampuan penuh
1. Membandingkan cara kerja masing-masing processor). Untuk setiap kondisi daya listrik
fungsi berdasarkan flowchart terdapat 2 percobaan. Hasil dari penghitungan
dalam millisecond. Sehingga untuk waktu eksekusi
2. Membandingkan komplektifitas setiap dibawah millisecond yaitu dalam hitungan
program. nanosecond maka akan tercetak 0 ms.
mulai
mulai
T
last.setNext(newNode)
newNode.setNext(first) newNode.setPrev(last)
first.setPrev(newNode)
last.setNext(newNode)
newNode.setNext(last)
first.setPrev(newNode)
first.setPrev(last) newNode.setNext(first)
selesai selesai
Fig. 4. Flowchart insertFirst (kiri) dan insertLast (kanan) pada circular double linked list
mulai
current ß root
true T selesai
parent ß current
nim.compareTo(current.
Y current ß current.leftChild
nimMahasiswa)<0
T
return
parent.rightChild ß newNode
Kondisi Daya Percobaan Circular Double Linked List Binary Search Tree
Power Saver Percobaan 1 113 ms 168 ms
Percobaan 2 115 ms 128 ms
High Performance Percobaan 1 56 ms 64 ms
Percobaan 2 54 ms 66 ms
Tabel 1. Perbandingan waktu eksekusi memasukan data
indek.getDataMahasiswa() Y
indek ß indek.getNext()
T Indek<>last.getNext()
"Tidak ada
data"
selesai
Fig. 6. Method get_all. Menampilkan semua data dari depan pada circular double linked list
mulai
mulai
localRoot.displayNode() inOrder(localRoot.leftChild)
localRoot <> null Y preOrder(localRoot.leftChild) localRoot <> null Y localRoot.displayNode()
preOrder(localRoot.rightChild) inOrder(localRoot.rightChild)
T T
selesai selesai
mulai
postOrder(localRoot.leftChild)
localRoot <> null Y postOrder(localRoot.rightChild)
localRoot.displayNode()
selesai
Dari flowchart tersebut dapat diambil membutuhkan memory yang besar dan alur kerja
kesimpulan bahwa untuk menampilkan data pada yang lebih rumit. Untuk membandingkan kecepatan
circular double linked list hanya dengan menggeser waktu eksekusi dari kedua program yaitu dengan
pointer indek ke node berikutnya kemudian menampilkan data sejumlah 6969 data mahasiswa
menampilkan node tersebut. Sehingga alur kerjanya yang sama dengan data yang dimasukan pada
cukup sederhana. Sedangkan pada binary search method insert. Tabel perbandingan waktu eksekusi
tree untuk menampilkan data secara traversal program ada pada Tabel 2.
menggunakan rekrusif. Hal ini tentunya
Kondisi Daya Percobaan Circular Double Linked List Binary Search Tree
get_all preOrder inOreder postOrder Rata-rata
Power Saver Percobaan 1 647 ms 601 ms 541 ms 564 ms 568 ms
Percobaan 2 561 ms 601 ms 463 ms 429 ms 497 ms
High Performance Percobaan 1 347 ms 504 ms 410 ms 502 ms 472 ms
Percobaan 2 454 ms 502 ms 380 ms 318 ms 400 ms
Tabel 2. Perbandingan waktu eksekusi menampilkan data
3.3 Mencari Data search tree menyimpan data secara urut karena pada
awal memasukan data, setiap data dibandingkan
Pada tahap ini kedua program akan diuji
terlebih dahulu mana data yang memiliki nilai yang
perbandingan dari masing-masing program.
lebih tinggi atau rendah. Seperti dalam Figure 8 dan
Circular double linked list memiliki kelemahan
Figure 9, dalam kasus ini adalah data mahasiswa
pada tahap ini yaitu data yang ada disimpan tidak
sehingga pencarian dilakukan berdasarkan
urut karena urutan data hanya berdasarkan dari
nimMahasiswa. Pada Figure 8 tersebut, terlihat
urutan memasukan data. Data yang terurut akan
bahwa metode pencarian data sama dengan linear
memiliki kecepatan pencarian yang lebih cepa
search. Yaitu pencarian data secara beruntun
daripada data yang tidak terurut. Sedangkan binary
dengan membandingkan setiap node. Setiap String nim tidak cocok. Pembandingan String nim tersebut
getNim pada node indeks di bandingkan dengan akan terus berlangsung hingga indeks kembali ke
String cari. Indeks tersebut adalah node yang node terakhir.
berubah ke node berikutnya jika pada node tersebut
mulai
indeks ß first
cek ß true
"data
ditemukan : "
"data tidak
indeks.getNext() ß first Y
ditemukan"
indeks.getDataMahasiswa()
T
cek ß false
Fig. 8. Flowchart method getData untuk mencari data pada circular double linked list
mulai
current ß root
current.nimMahasiswa.com
T selesai
pareTo(key)<>0
key.compareTo(current.ni
Y current ß current.leftChild
mMahasiswa)<0
current ß current.rightChild
return current
Fig. 9. Flowchart method find(String key) untuk mencari data pada binary search tree
Flowchart pada Figure 8 merupakan dari compareTo = 0 yang menandakan bahwa data
flowchart untuk mencari data pada circular double ditemukan. Hal ini tentunya menggunakan waktu
linked list. Pada flowchart tersebut diketahui bahwa terlalu lama karena data yang berupa String tersebut
untuk mencari data, circular double linked list harus harus dibandingkan satu persatu hingga sejumlah
membandingkan setiap nimMahasiswa hingga nilai data yang ada yaitu 6969 data. Berbeda dengan
binary search tree yang terdapat pada Figure 8. akan dilakukan pada subtree sebelah kanan. Hal ini
Karena data pada binary search tree sudah terurut menyebabkan tidak semua data dibandingkan
dan tersusun maka cara mencari data hanya dengan sehingga memungkinkan pencarian lebih cepat.
membandingkan dengan node current. Jadi jika Untuk lebih jelasnya terdapat tabel uji waktu
data yang dicari memiliki nilai lebih rendah eksekusi program pada Tabel 3. Waktu yang
daripada current maka pencarian akan beralih ke menunjukan 0 ms berarti bahwa waktu eksekusi
subtree sebelah kiri, tetapi jika data yang dicari kurang dari millisecond yaitu berkisar nanosecond.
lebih tinggi daripada node current maka pencarian
Kondisi Daya Percobaan Circular Double Linked List Binary Search Tree
Power Saver Percobaan 1 2 ms 0 ms
Percobaan 2 4 ms 0 ms
High Performance Percobaan 1 3 ms 0 ms
Percobaan 2 2 ms 0 ms
Tabel 3. Perbandingan waktu eksekusi mencari data
3.4 Mengupdate Data berdasarkan nimMahasiswa kemudian jika data
tersebut ditemukan maka data namaMahasiswa,
Pada dasarnya metode mengupdate data
jurusanMahasiswa dan ipkMahasiswa dapat
hampir sama dengan mencari data. Hanya saja
dirubah. Sehingga alur update data juga tidak jauh
ketika data ditemukan maka data tersebut kemudian
berbeda dengan alur pencarian. Seperti pada Figure
dirubah ataupun ditambahkan. Tahap untuk update
10 dan Figure 11.
data yaitu dengan mencari data yang ingin diupdate
mulai
indeks ß first
cek ß true
"data tidak
indeks.getNext() ß first
ditemukan"
"Data berhasil
di update "
cek ß false
indeks.getDataMahasiswa()
indeks ß indeks.getNext()
selesai
Fig. 10. Flowchart method updateData untuk mengupdate data pada circular double linked list
mulai
current ß root
current.nimMahasiswa.com
T selesai
pareTo(key)<>0
key.compareTo(current.ni
Y current ß current.leftChild
mMahasiswa)<0
current ß current.rightChild
"Data tidak
current ß null Y
ditemukan"
current.namaMahasiswa ß nama
current.jurusanMahasiswa ß jurusan
current.ipkMahasiswa ß ipk
Fig. 11. Flowchart method update untuk mengupdate data pada binary search tree
Pada flowchart tersebut dapat dilihat kemungkinan hasil waktu eksekusi dari kedua
bahwa untuk mencari data yang akan diupdate program tidak akan berbeda jauh dari hasil waktu
menggunakan cara yang sama dengan yang eksekusi program. Untuk lebih detailnya mengenai
digunakan pada method mencari. Dari Figure 10 waktu eksekusi dapat dilihat pada Tabel 4.
dan Figure 11 tersebut dapat dilihat bahwa
Kondisi Daya Percobaan Circular Double Linked List Binary Search Tree
Power Saver Percobaan 1 2 ms 0 ms
Percobaan 2 3 ms 0 ms
High Performance Percobaan 1 1 ms 0 ms
Percobaan 2 2 ms 0 ms
Tabel 4. Perbandingan waktu eksekusi update data
3.5 Menghapus Data indeks.getNext().setPrev (indeks.getPrev()).
Sedangkan untuk menghapus node pada binary
Cara untuk menghapus data dari kedua
search tree lebih rumit dan lebih kompleks daripada
program adalah dengan mencari terlebih dahulu
circular double linked list. Hal ini karena posisi
data yang ingin dihapus. Jika data tersebut
node dalam binary tree harus urut dan sesuai
ditemukan maka data tersebut akan dihapus. Untuk
struktur binary search tree. Ketika terjadi
menghapus data pada circular double linked list
penghapusan node, maka posisi node yang dihapus
adalah dengan menyambungkan node sebelum dan
tersebut harus digantikan oleh node dimana node
setelah node yang akan dihapus (Figure 12). Syntax
tersebut sesuai dengan struktur dari binary search
untuk menyambungkan adalah
tree. Untuk lebih jelasnya dapat dilihat pada Figure
indeks.getPrev().setNext (indeks.getNext()) dan
13.
mulai
indeks ß first
cek ß true
Y
T
"data berhasil
di delete"
"data tidak
indeks.getNext() ß first Y
ditemukan"
indeks.getPrev().setNext
indeks <> first && (indeks.getNext())
Y
indeks <> last indeks.getNext().setPrev
(indeks.getPrev())
T
T
cek ß false
"data berhasil
removeLast();
T di delete"
indeks ß
indeks.getNext()
"data berhasil
di delete"
selesai
Fig. 12. Flowchar menghapus data pada circular double linked list.
mulai
current ß root
parent ß root
isLeftChild ß true
Y
Y
parent ß current
isLeftChild ß true T
key.compareTo(current.nimMahasiswa)<0 Y
current ß current.leftChild
T
isLeftChild ß false
current ß current.rightChild
parent.rightChild ß null
B
T
Fig. 13.1 Flowchart fungsi untuk menghapus data pada binary search tree
A
successor ß
current.rightChild ß null T current.leftChild ß null T
getSuccessor(current)
Y Y
parent.leftChild ß
current ß root Y root ß null isLeftChild Y current ß root Y root ß successor
current.rightChild
T T
T
parent.leftChild ß parent.rightChild ß
isLeftChild Y
current.leftChild current.rightChild parent.leftChild ß
isLeftChild Y
successor
T
T
parent.rightChild ß
parent.rightChild ß successor
current.leftChild
B
return true successor.leftChild ß current.leftChild
selesai
Fig. 13.2 Flowchart fungsi untuk menghapus data pada binary search tree
Penghupusan node pada binary search tree 2. Mengganti nilai node yang akan dihapus
sangat komplek dan lebih rumit daripada dengan nilai minimum yang ditemukan
penghapusan node pada circular double linked list. tersebut (Figure 15)
Pada binary search tree erdapat berbagai macam
3. Hapus node dengan nilai minimum
kondisi node yang akan dihapus yaitu ketika node
tersebut (Figure 16)
tersebut merupakan leaf atau tidak mempunyai
anak, node tersebut memiliki 1 anak di kanan, node Untuk memahami tahapan menghapus node
tersebut memiliki 1 anak di kiri dan node tersebut yang memiliki dua anak tersebut dapat dilihat
memiliki 2 anak. Terdapat tiga tahap untuk pada Figure 14, Figure 15 dan Figure 16 yang
menghapus node yang memiliki 2 anak [3]. mensimulasukan penghapusan node 12.
1. Cari nilai minimum node pada subtree
sebelah kanan (Figure 14)
Fig. 14. Nilai minum dari subtree sebelah kanan adalah 19
4. Hasil Penelitian
berubah. Sedangkan perbedaanya adalah linked list
Dari berbagai perbandingan dalam penelitian
merupakan strukur data linear sedangkan binary
tersebut dapat diketahui perbedaan, persamaan serta
search tree merupakan strukur data hirarkis [4].
kelebihan dan kekurangan dari struktur data circular
Hasil dari waktu eksekusi program pada Tabel 6
double linked list dan binary search tree. Persamaan
digunakan untuk analisis serta mengambil
dari tree dan linked list adalah sama-sama struktur
kesimpulan mengenai struktur data circular double
data dinamis yaitu jumlah komponennya dapat
linked list dan binary search tree.
Percobaan Fungsi Circular Double Linked List Binary Search Tree
Percobaan 1 – Memasukan Data 113 ms 168 ms
Power Saver Menampilkan Data 647 ms 568 ms
Mencari Data 2 ms 0 ms
Update Data 2 ms 0 ms
Delete Data 3 ms 0 ms
Percobaan 2 – Memasukan Data 115 ms 128 ms
Power Saver Menampilkan Data 561 ms 497 ms
Mencari Data 4 ms 0 ms
Update Data 3 ms 0 ms
Delete Data 2 ms 0 ms
Percobaan 1 – High Memasukan Data 56 ms 64 ms
Performance Menampilkan Data 347 ms 472 ms
Mencari Data 3 ms 0 ms
Update Data 1 ms 0 ms
Delete Data 1 ms 0 ms
Percobaan 2 – High Memasukan Data 54 ms 66 ms
Performance Menampilkan Data 454 ms 400 ms
Mencari Data 2 ms 0 ms
Update Data 2 ms 0 ms
Delete Data 1 ms 0 ms
Tabel 6. Perbandingan waktu eksekusi program untuk semua fungsi.
Dari Tabel 6 tersebut maka dapat dianalisis : 2. Fungsi menampilkan data – Waktu
eksekusi rata-rata untuk traversal pada
1. Fungsi memasukan data – Waktu eksekusi binary search tree lebih cepat daripada
pada binary search tree lebih lama waktu eksekusi fungsi menampilkan data
daripada circular double linked list. Ini dari depan pada circular double linked list.
dikarena data yang masuk pada binary Hal ini dikarenakan binary search tree
search tree langsung diurutkan dan disusun menggunakan rekrusif untuk menampilkan
sesuai struktur tree sedangkan untuk data. Tetapi penggunaan rekrusif
circular double linked list data yang masuk menyebabkan memory yang lebih besar
langsung ditempatkan dalam node-node dan sulit untuk dipahami [5].
yang tersambung begitu saja sesuai urutan
memasukan data. Tetapi fungsi 3. Fungsi mencari data – Waktu eksekusi
memasukan file pada binary tree lebih binary search tree lebih cepat daripada
rumit daripada circular double linked list circular double linked list bahkan
(Figure 5). kecepatan eksekusi kurang dari hitungan
millisecond (nanosecond) sehingga pada 5. Fungsi menghapus data – Sama dengan
ujicoba selalu menampilkan nilai 0 ms. Ini mengupdate, waktu eksekusi binary search
disebabkan karena dalam proses mencari tree lebih cepat dari circular double linked
data yang dicari tidak dibandingkan satu list karena fungsi ini menggunakan fungsi
persatu dengan setiap node. Sedangkan yang sama dari mencari. Hanya saja fungsi
pada circular double linked list data delete pada binary search tree sangat rumit
dibandingkan satu persatu hingga waktu dikarenakan ketika node dihapus jangan
yang digunakan lebih lama. sampai mengubah struktur dan urutan dari
binary search tree sehingga terganti
4. Fungsi mengupdate data – Waktu eksekusi pergantian posisi pada node. Tetapi walau
binary search tree lebih cepat daripada tingkat kerumitan dari fungsi menghapus
circular double linked list karena fungsi node tinggi tetapi waktu eksekusi tetap
dari update sendiri sama dengan mencari. lebih cepat daripada binary search tree.
Jika data yang akan diupdate ditemukan
maka akan dilakukan perubahan pada data Untuk lebih jelasnya mengenai analisis terdapat
itu. pada Tabel 7.
Tabel 7. Analisis circular double linked list dan binary search tree.
5. Kesimpulan 6. Referensi
Dari hasil penelitian tersebut maka dapat [1] Wikipedia. “Daftar Bertaut”. http:// id.wikipedia.org/wiki
/Daftar_bertaut (diakses tanggal 27 Desember 2011)
diambil kesimpulan bahwa pengujian kecepatan
waktu eksekusi bergantung pada spesifikasi
[2] Wikipedia. “Pohon Biner”. http://id.wikipedia.org/ wiki/
komputer yang digunakan. Semakin tinggi Pohon_biner (diakses tanggal 27 Desember 2011)
spesifikasi komputer maka waktu eksekusi akan
semakin cepat. Dalam konteks ini data yang [3] Algolist. “Binary Search Tree Removing Node”.
diujikan adalah data mahasiswa yang terdiri dari http://www.algolist.net/Data_structures/ Binary_search
nim, nama, jurusan serta ipk yang memiliki tipe _tree / Removal. (diakses tanggal 28 Desember 2011)
data String. Untuk waktu eksekusi, binary tree
[4] Nusinau. “Dianita Struktur Data”. http:// www.nusinau
lebih unggul daripada circular double linked list .com/ dianita-struktur-data/ (diakses tanggal 28 Desember
dari menampilkan data, mencari data, update data 2011)
dan delete data. Sedangkan untuk memasukan data,
circular double linked list lebih cepat. Dilihat dari [5] Unikom. “Recrusive”. http://elib.unikom.ac.id/files/
alur fungsi dan kerumitan program maka binary disk1/392/jbptunikompp-gdl-dianaeffen-19571-9-
pertemua-9.pdf (diakses tanggal 28 Desember 2011)
search tree lebih kompleks dan lebih rumit daripada
circular double linked list.