ANALISA PERBANDINGAN ANTARA ALGORITMA LS

ANALISA PERBANDINGAN ANTARA ALGORITMA LSD RADIX SORT YANG
MENGGUNAKAN QUEUE BIASA DAN YANG MENGGUNAKAN AMORTIZED QUEUE
Dennis Pratama Kamah ( 1306464562 ), dennis.pratama@ui.ac.id
Program Studi Ilmu Komputer, Fakultas Ilmu Komputer, Universitas Indonesia
Mei 2015

LATAR BELAKANG
Radix Sort merupakan salah satu metode non-comparison sorting yang sangat berguna dalam
hal pengurutan data dalam dunia nyata, seperti data yang bertipe string, bilangan bulat ( integer ), dan
sebagainya. Secara intuitif, proses pengurutan data, misalkan pada bilangan bulat, dilakukan dari digit
least significant dari bilangan-bilangan tersebut, kemudian urutkan secara iteratif hingga mencapai

digit most significant. 1 Proses dilakukan dari satu digit ke digit yang lain dibandingkan satu sama
lain. Proses pengurutan berdasarkan masing-masing digit dilakukan pada metode sorting lainnya,
baik itu dengan memanfaatkan comparison based sorting atau non-comparison based sorting.
Pemilihan metode pengurutan yang ada pun dapat mempengaruhi kompleksitas waktu dan memori
algoritma radix sort secara keseluruhan.
Kompleksitas pada seluruh non-comparison based sorting adalah O(n). Apabila pengurutan
pada masing-masing digit dilakukan dengan memanfaatkan comparison based sorting, seperti bubble
sort, insertion sort, maupun selection sort yang memiliki kompleksitas waktu sekitar O (m2), maka
secara otomatis kompleksitas waktunya adalah O(n + m2). Apabila pengurutan pada masing-masing

digit dilakukan dengan memanfaatkan comparison based sorting yang menggunakan prinsip divide
and conquer seperti quick sort dan merge sort yang memiliki kompleksitas waktu sekitar O (m log

m), maka secara otomatis kompleksitas waktunya adalah O(n + m log m). Dan apabila pengurutan
pada masing-masing digit dilakukan dengan memanfaatkan non-comparison based sorting seperti
counting sort,maka secara otomatis kompleksitas waktunya adalah O(n + m).

Cara lain selain memanfaatkan algoritma sorting biasa adalah dengan memanfaatkan struktur
data queue yang menggunakan array. Hal ini dapat membuat proses pengurutan data berdasarkan
digit tersebut dapat berjalan secara stabil (stable). Artinya pada data dengan nilai yang sama, posisi
relatif dari masing-masing data tetap. 2 Selain dengan menggunakan queue array biasa, queue yang
diamortized juga dapat dimanfaatkan dalam proses pengurutan. Amortized queue ini sendiri
memanfaatkan dua buah struktur data stack dalam hal operasi pop dan stack.
Oleh karena itu, di dalam paper ini akan dibahas beberapa perbedaan mendasar mengenai
kedua teknik pengurutan digit tersebut di dalam radix sort.

1
2

Cormen, Thomas H. Introduction to Algorithms. London: The MIT Press, 2009, halaman 197.

Ibid.

TUJUAN PENELITIAN
Penelitian di dalam paper ini dilakukan dengan dasar-dasar dan argumentasi-argumentasi yang jelas
dan valid serta bertujuan untuk :


Membandingkan kompleksitas waktu antara Radix Sort dengan Queue biasa dan Radix Sort



dengan Amortized Queue;



dengan Amortized Queue;

Membandingkan kompleksitas memori antara Radix Sort dengan Queue biasa dan Radix Sort

Mengetahui pengaruh penggunaan dua buah stack pada Amortized Queue dibandingkan

dengan penggunaan array pada Queue biasa dalam pengurutan data per digit di dalam Radix



Sort;
Meninjau prinsip Amortized dalam penggunaan dua buah stack pada Amortized Queue.

TINJAUAN PUSTAKA
Pada bagian ini hanya akan dicantumkan tinjauan pustaka untuk sumber referensi berupa paper
(artikel) yang terdapat pada jurnal-jurnal internasional :
I.

Bibliography Form
Canmei, Wei dan Yang Yahui. (2013) “On Radix and Straight Insertion Sort Programming
Based on Linked List and Queue Technique”. Computer Science & Education (ICCSE),
2013 8th International Conference on. 06, 1445-1449.

Summary
Tehnik Linked List dan Tehnik Queue merupakan dua buah tehnik yang sangat berguna
dalam membantu merealisasikan berbagai macam algoritma yang ada hingga saat ini.


3

Algoritma pengurutan merupakan salah satu algoritma yang memanfaatkan dua teknik
tersebut. Paper ini membahas karakteristik dua tehnik tersebut dalam meningkatkan
efisiensi dari suatu perangkat lunak yang memanfaaatkan algoritma pengurutan tertentu.
Peer Opinion
Menurut saya, konsep mendasar yang saat manfaatkan sebagai bahan referensi paper yang
saya buat adalah mengenai tehnik queue, sedangkan saya tidak terlalu memeperhatikan
konsep mengenai tehnik linked list karena struktur data yang saya pergunakan pada radix
sort ini adalah queue berbasis array dan queue berbasis stack. Analisis yang terdapat di
dalamnya mencakup penggunaan queue pada radix sort serta perbandingannya apabila
digunakan pada tehnik pengurutan yang dilakukan secara linear. Hal ini dapat membantu
Canmei, Wei dan Yang Yahui. (2013) “On Radix and Straight Insertion Sort Programming Based on Linked List and
Queue Technique”. Computer Science & Education (ICCSE), 2013 8th International Conference on . 06, hlm.1445
3

saya di dalam menganalisis penggunaan teknik queue pada radix sort berbasis queue pada
di dalam paper yang saya buat ini.


II.

Bibliography Form
Nitesh, Manbir Singh, dan Rahul Yadav. (2014) “Research Paper on Stack and Queue”.
International Journal of Innovative Research in Technology. 01, 584-586.

Summary
Paper ini membahas tentang konsep stack dan queue di dalam struktur data. Kedua jenis
struktur data tersebut merupakan struktur data-struktur data yang memanfaatkan list
terurut. Stack sendiri merupakan struktur data dengan ukuran terbatas, dimana elemen
data yang ditambahkan dan dikeluarkan hanya data yang terdapat pada posisi top saja.
Operasi push menambahkan elemen ke top, operasi pop mengeluarkan elemen dari top.
Queue memiliki mekanisme yang hampir sama dengan stack, namun operasi enqueue
(push) dilakukan ke posisi front, sedangkan operasi dequeue (pop) dilakukan pada posisi
back. 4

Peer Opinion
Menurut pandangan pribadi saya, konsep-konsep materi yang terdapat dalam paper ini,
membantu saya dalam mengembangkan struktur data queue maupun queue yang
menggunakan dua buah stack. Konsep yang ada didalamnya juga membantu saya di dalam

menganalisa komplesitas waktu dan memori dalam operasi yang dilakukan terhadap
queue dan stack, serta bagaimana pengaruhnya apabila dua buah struktur tersebut
dimanfaatkan sebagai metode pengurutan berdasarkan digit pada elemen data di dalam
radix sort. Penyampaian konsep pada paper ini cukup padat dan jelas, sehingga saya dapat
memahami secara lebih lanjut bagaimana mengimplementasikan stack dan queue secara
berkelanjutan.

III.

Bibliography Form
Zhang, Yongcheng. (2008) “Radix Plus Length Based Insert Sort”. Computer and
Information Science, 2008. ICIS 08. Seventh IEEE/ACIS International Conference on . 08,

61-66.
Summary
Banyak aplikasi perangkat lunak yang bergantung pada efisiensi dari algoritma
pengurutan untuk mengurutkan satu himpunan besar string keys di dalam memori. Sebagai
Nitesh, Manbir Singh, dan Rahul Yadav. (2014) “Research Paper on Stack and Queue”. International Journal of
Innovative Research in Technology. 01, hlm.584
4


contoh, pengurutan records untuk basis data. Paper ini membahas algoritma radix sort
yang telah dikembangkan dengan berbasis pada algoritma insert sort (R-LI), untuk
mengurutkan sekumpulan data besar berisi string keys.

5

Algoritma ini merupakan

pengembangan algoritma R-S yang dirancang oleh M.DONALD Maclaren pada tahun
1966. Secara singkat, analisis performansinya di bahas secara mendetail di dalam paper
ini. 6
Peer Opinion
Menurut pandangan pribadi saya, konsep yang terdapat di dalam paper ini, membuktikan
bahwa konsep pada radix sort, yaitu fix-length, seperti integer key, dapat dimanfaatkan
untuk dasar pengurutan algoritma pengurutan lainnya, seperti insertion sort, quick sort,
merge sort, dan shell sort. Salah satu prinsip penting yang ada di dalam paper ini adalah
Three-Way Radix Quicksort, dimana mekanismenya seperti regular quicksort, dimana di

dalamnya dilakukan partisi pada inputnya, memisahkannya berdasarkan besar datanya,

lebih kecil sama dengan, atau lebih besar.

RUANG LINGKUP PENELITIAN
Untuk membatasi hal-hal (variabel) yang berkenaan dengan penelitian pada paper ini, berikut saya
paparkan beberapa hal-hal yang menjadi titik berat penelitian pada paper ini :






Proses pengurutan digit per digit dilakukan hanya dengan menggunakan struktur data queue,
baik itu berbasis array maupun berbasis stack;
Setiap data pada pengujian, bertipe integer (bilangan bulat);
Setiap data sudah pasti memiliki jumlah digit yang sama, baik pada satuan, puluhan, ribuan,
puluh ribuan, dan seterusnya.

PEMBAHASAN
Tentu saja untuk membahas topik atau materi utama di dalamnya, kita membutuhkan mekanisme dua
algoritma radix sort yang menggunakan queue berbasis array dan queue berbasis dua stack

( amortized queue ). Implementasi queue dengan menggunakan array, saya tambahkan dengan
method tambahan, yaitu dequeueSemua(),yang saya lampirkan dan referensikan dari materi pada
courses “[REG] Struktur Data & Algoritma (A, B, C, D, E, F, Ekstensi) - Materi - Genap 2013/2014”
pada folder “Contoh Implementasi Stack dan Queue”, dimana source code-nya telah saya lampirkan

5

Zhang, Yongcheng. (2008) “Radix Plus Length Based Insert Sort”. Computer and Information Science, 2008. ICIS 08.

Seventh IEEE/ACIS International Conference on . 08, hal.61
6

Idem.

bersama dengan paper ini.
Sedangkan implementasi dari queue dengan menggunakan dua struktur data stack (implementasinya
terdapat di Java Library), saya mereferensi source code dari situs forum tanya jawab dalam hal
pemrograman, stackoverflow, yang sudah terlampir bersama dengan file paper ini. Secara umum
algoritma (cara berpikir) dari implementasi Amortized Queue dengan menggunakan stack adalah :
1. Buat dua buah stack, misal A dan B;

2. Proses enqueue / queue (memasukkan sebuah elemen ke dalam queue) adalah dengan
memasukkan mem-push elemen ke dalam stack B;
3. Dalam proses dequeue (mengeluarkan sebuah elemen dari dalam queue), ada dua
kemungkinan :
a. Jika stack B kosong, maka selama stack A tidak kosong, pop elemen dari stack A
kemudian push setiap elemen tersebut ke stack B, lalu kemudian pop sebuah elemen
dari stack B
b. Jika stack B tidak kosong, maka langsung pop sebuah elemen dari stack B

Sedangkan untuk algoritma Radix Sort itu sendiri saya merancangnya sendiri dengan mengacu pada
konsep radix sort yang terdapat di dalam paper karangan Canmei, Wei dan Yang Yahui. (2013) yang
berjudul “On Radix and Straight Insertion Sort Programming Based on Linked List and Queue
Technique” serta pada paper karangan Zhang, Yongcheng. yang berjudul “Radix Plus Length Based
Insert Sort”. Implementasi pada radix sort yang menggunakan queue berbasis array dan queue yang
berbasis stack kurang lebih sama dan hanya berbeda pada penggunaan queue yang ada. Kira-kira
pseudocode (cara berpikir) dari radix sort tersebut, antara lain :
1. Lakukan iterasi sebanyak jumlah digit pada data yang diurutkan;
2. Selama iterasi, lakukan pengurutan data dengan berdasarkan pada digit ke berapa
dari masing-masing data;
3. Ketika dilakukan pemeriksaan, apabila suatu digit sama dengan beberapa angka-angka

yang dimaksud maka push suatu data yang bersangkutan ke dalam queue untuk digit
tertentu (queue untuk digit 0, queue untuk digit 1, queue untuk digit 2, queue
untuk digit 3, dan seterusnya) berdasarkan nominal digit yang sedang diperiksa 7;
4. Setiap hasil pengurutan dari masing-masing digit, dimasukkan ke dalam suatu
struktur data array list of array list. Isi dari array list tersebut adalah juga
array list yang merupakan hasil pengurutan data berdasarkan digit satu ke digit
yang lain. Data dari suatu array list digunakan untuk pengurutan digit berikutnya;
5. Ketika semua digit telah diperiksa selama iterasi, maka hasil akhir data yang
terurut berada di dalam elemen terakhir arraylist.

Canmei, Wei dan Yang Yahui. (2013) “On Radix and Straight Insertion Sort Programming Based on Linked List and
Queue Technique”. Computer Science & Education (ICCSE), 2013 8th International Conference on . 06, hlm.1447
7

Atau secara umum, bentuk pseudocode dari radix sort yang terdapat di dalam buku karangan Cormen,
Thomas H. pada 2009 yang berjudul Introduction to Algorithms, yaitu :
RADIX-SORT(A,d)
For i = 1 to d
Use a stable sort to sort array A on digit i

Tak lupa juga bahwa, saya mereferensikan pseudocode dari implementasi operasi enqueue dan
dequeue pada queue yang menggunakan array, yaitu :

ENQUEUE(Q,x)
Q[Q.tail] = x
if Q.tail == Q.length
Q.tail = 1
else Q.tail = Q.tail + 1

DEQUEUE(Q,x)
X = Q[Q.head]
if Q.head == Q.length
Q.head = 1
else Q.head = Q.head + 1
Return x

Sumber : Nitesh, Manbir Singh, dan Rahul Yadav. (2014) “Research Paper on Stack and Queue”.
International Journal of Innovative Research in Technology. 01, hal 585.

Apabila melihat dari konsep amortized pada queue yang memanfaatkan dua buah stack, konsep ini
sendiri mengarah ke kompleksitas proses yang dilakukan secara bertahap dan sedikit demi sedikit,
tidak dilakukan secara keseluruhan, melainkan dilakukan secara parsial (mengangsur). Komputasi
yang dilakukan pada saat tersebut bukan berarti dilakukan terpisah-pisah secara eksplisit, melainkan
kompleksitasnya yang tidak bertambah secara signifikan.

8

Secara umum, konsep amortized dapat

mengurangi kompleksitas waktu operasi selanjutnya yang ingin dilakukan dikarenakan telah terlebih
dahulu dilakukan secara parsial pada operasi sebelumnya. Hal ini jelas terlihat bahwa penggunaan
dua stack pada Amortized Queue.
Salah satu stack, dalam dunia nyata, diibaratkan sebagai kotak masuk sedangkan stack lainnya
sebagai kotak keluar. Selama kotak keluar belum penuh, maka data-data yang ada akan tetap
8

http://www.cs.cmu.edu/afs/cs/academic/class/15750-s01/www/notes/lect0123

dimasukkan ke dalam kotak masuk. Hal ini sesuai dengan fungsi kotak masuk yang hanya menerima
data saja, tanpa memikirkan masalah pengeluaran data. Prinsip amortized terjadi ketika kotak keluar
penuh, dimana secara otomatis kotak keluar mem-pop keluar isi data teratasnya (top), lalu kemudian
kotak masuk memasukkan data (push) ke dalam kotak keluar. Hal ini memperlihatkan kedua operasi
yang meskipun memiliki kompleksitas O(n) dan O(m), namun seolah-olah keduanya memiliki
kompleksitas O(n) saja dikarenakan pencegahan penuhnya data pada salah satu data. Hal ini berlaku
pada proses array doubling maupun stack doubling ketika data hampir penuh.

PENGUJIAN DAN HASIL
Spesisfikasi dari tools yang saya gunakan dalam pengujian algoritma radix sort berbasis queue dan
algoritma berbasis radix sort berbasis dua stack, antara lain :
Sistem Operasi

: Windows 8.1 Pro

Processor

: Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz

Installed memory (RAM)

: 8.00 GB (7,90 GB usable)

IDE Editor dan Kompiler

: NetBeans IDE 8.0

Tools Bahasa

: Java 8 Update 45

Pengujian akan dilakukan dengan beberapa kondisi yaitu dengan menggunakan jumlah data yang
berbeda-beda serta jumlah digit setiap data yang berbeda-beda. Untuk menghitung besar runtime pada
masing-masing algoritma, saya meletakkan kode berikut pada awal dimulai dijalankan algoritma
radix sort (setelah proses penginputan data selesai) :
final float startTime = System.nanoTime();

Dan juga, saya meletakkan kode lainnya pada akhir proses algoritma radix sort (setelah proses
pencetakan hasil akhir pada arraylist terakhir) :
final float duration = System.nanoTime() - startTime;
System.out.println(duration / 1000000000);

Durasi akhir di atas dibagi dengan bilangan 1000000000 untuk mengkonversinya ke dalam bentuk
detik. Setiap perbedaan kondisi yang ada, dikombinasikan satu sama lain agar diperoleh hasil yang
lebih valid. Berikut adalah hasil runtime (dalam satuan detik atau second) terhadap pengujian
algoritma radix sort dengan queue berbasis array terhadap data dengan kondisi tertentu :
Banyak Data / 6

12

18

25

32

Banyak Digit
10

0.006291456 0.006291456

0.009437184 0.006291456 0.007340032

20

0.008388608 0.009437184

0.007340032 0.013631488 0.01048576

30

0.009437184 0.009437184

0.012582912 0.011534336 0.017825792

40

0.012582912 0.013631488

0.016777216 0.016777216 0.023068672

50

0.014680064 Infinite Time

Infinite Time Infinite Time Infinite Time

Dan berikut adalah hasil runtime (dalam satuan detik atau second) terhadap pengujian algoritma radix
sort dengan queue berbasis stack terhadap data dengan kondisi tertentu :

Banyak Data / 6

12

18

25

32

Banyak Digit
10

0.006291456 0.009437184

0.009437184 0.007340032 0.01048576

20

0.007340032 0.008388608

0.009437184 0.008388608 0.016777216

30

0.01048576

0.01048576

40

0.019922944 0.013631488

0.011534336 0.018874368 0.017825792

50

0.013631488 Infinite Time

0.022020096 Infinite Time Infinite Time

0.017825792

0.012582912 0.017825792

Apabila diperhatikan pada hasil pengujian pada kedua kotak di atas, terdapat persamaan bahwa ada
waktu pada saat program tidak dapat langsung mengeluarkan output yang diinginkan dikarenakan
jumlah data maupun jumlah digit yang terlalu besar. Hal ini memperlihatkan bahwa terjadi penuhnya
data yang terdapat di dalam queue itu sendiri, meskipun memang nantinya isi dari queue dari itu
sendiri akan di-dequeue keluar dari queue. Akan tetapi, dikarenakan intensitas penggunaan memori
yang cukup tinggi, hal ini menyebabkan operasi-operasi yang dilakukan secara terus-menerus pada
memori menyebabkan suatu overflow pada memori. 9

KESIMPULAN
Berdasarkan atas hasil dari pengujian terhadap data dengan karakteristik yang berbeda-beda pada
kedua cara pendekatan algoritma radix sort berdasarkan cara pengurutan digit-digit nya, maka dapat
ditarik beberapa kesimpulan penting yang nantinya dapat membantu terwujudnya tujuan penelitian
dari pembuatan paper ini sendiri, sebagai berikut :


Kompleksitas waktu antara radix sort yang menggunakan array dengan radix sort yang
menggunakan Amortized array yang menggunakan dua buah stack, tidak terlalu jauh berbeda.
Keduanya sama-sama memiliki kesamaan dalam hal keterbatasan banyak data yang dapat
diurutkan berdasarkan jumlah digitnya;

9

Canmei, Wei dan Yang Yahui. (2013) “On Radix and Straight Insertion Sort Programming Based on Linked List and

Queue Technique”. Computer Science & Education (ICCSE), 2013 8th International Conference on . 06, hlm 1448.



Kompleksitas dari radix sort yang menggunakan dua buah stack jauh lebih tinggi ketimbang
kompleksitas memori dari radix sort yang menggunakan array biasa dikarenakan
pengalokasian memori yang cukup banyak terlalu dalam hal perancangan struktur data array
untuk dua stack sekaligus, pada masing-masing digit. Dapat dikatakan bahwa kompleksitas



radix sort dengan dua stack dua kali lebih tinggi ketimbang radix sort dengan array biasa;
Prinsip amortized tidak terlalu berpengaruh secara signifikan pada pembuatan queue,
terutama dikarenakan tidak terlalu terlihat jelas pada running time program, meskipun



memang tetap dibutuhkan dalam hal perancangan algoritma-algoritma yang lain;
Penggunaan dua buah stack hanya dapat membuat praktis pembuatan dari queue itu sendiri,
meskipun nantinya membutuhkan kompleksitas memori yang cukup besar.

DAFTAR PUSTAKA
Canmei, Wei dan Yang Yahui. (2013) “On Radix and Straight Insertion Sort Programming Based on
Linked List and Queue Technique”. Computer Science & Education (ICCSE), 2013 8th International
Conference on. 06, 1445-1449.

Cormen, Thomas H. (2009). Introduction to Algorithms. London: The MIT Press.
Nitesh, Manbir Singh, dan Rahul Yadav. (2014) “Research Paper on Stack and Queue”. International
Journal of Innovative Research in Technology. 01, 584-586.

Zhang, Yongcheng. (2008) “Radix Plus Length Based Insert Sort”. Computer and Information
Science, 2008. ICIS 08. Seventh IEEE/ACIS International Conference on. 08, 61-66.

http://www.cs.cmu.edu/afs/cs/academic/class/15750-s01/www/notes/lect0123 (diakses pada 29 Mei
2015, pukul 23.00 )