Professional Documents
Culture Documents
Abstract – Pengurutan sangat penting dalam Dalam beberapa kasus, pengurutan tanpa
Teknologi Informasi yang tak lepas dari pengolahan pembandingan ini memiliki kompleksitas waktu yang
data. Pemecahan permasalahan pengolahan data lebih baik daripada metode pengurutan dengan
dapat menjadi lebih efektif dan efisien bila data sudah pembandingan . Dan walaupun hal itu dapat terjadi
dalam keadaan terurut. Seperti dalam proses dengan berbagai batasan-batasan tertentu, eksplorasi
pencarian data (searching), algoritma pencarian lebih lanjut yang dilakukan semakin lama semakin
tingkat lanjut yang lebih efektif daripada cara membuat batasan-batasan tersebut berkurang, atau
konvensional seperti Binary Search ataupun dengan kata lain semakin lama, algoritma-algoritma
Interpolation Search membutuhkan data yang sudah pengurutan tanpa pembandingan ini semakin dapat
terurut. Contoh lain di mana data terurut dibutuhkan digunakan secara umum ( generalized ). Perbandingan
adalah dalam penggabungan data menggunakan antara Comparison Sort dengan Non Comparison Sort
metode merging. akan dibahas lebih jauh juga dalam makalah ini.
a1 :
a
2
>
4. COUNTING
=
SORT
a2 : 3 a 1 : 3
4.1. Ide Dasar Counting
a a Sort
= > = >
Untuk dapat melakukan pengurutan dengan counting
a1 : 3 a
sort rentang nilai untuk kumpulan data yang akan
‹1,2,3› ‹2,1,3› 2: 3
a a diurutkan harus diketahui, katakanlah k.
= = >
counting sort
‹1,3,2› ‹2,3,1›
setiap elemen jumlah elemen yang lebih kecil
x,
untuk menentukan posisi . Contoh sederhana saja,
jika terdapat 12 elemen yang lebih kecil daripada ,
maka akan mendapatkan posisinya di posisi 13.
comparison sort
secara umum. Kontrol, pergerakan data, dan aspek-
aspek lainnya yang terdapat dalam algoritma-
algoritma implementasinya diabaikan dalam x
pembuktian ini.
elemen yang nilainya sama dengan di posisi yang
sama.
ai a i j
rentang 1 = = Yang dalam contoh ini adalah 3. Counting
Sort
Misal data yang akan diurutkan adalah .
Counting sort array
kemungkinan terburuk terjadi bila jalur yang ditempuh k, Ci
adalah jalur paling panjang, atau dengan kata lain bila A
menempuh jarak sepanjang kedalaman dari pohon i array
tersebut. counting
disimpan.
n n n e
= ( log ) 1
C diterapkan dalam metode Radix sort .
1 0 0 0 0
1 2 3 4 5 Dalam proses ini kita mengakses elemen A[i],
kemudian memposisikannya di posisi sebagaimana
Langkah 2 : pembacaan kedua mendapat elemen tercatat dalam C[A[i]], kemudian kita mengurangkan
A[2] dengan isi 3, maka C[3] ditambah 1. C[A[i]] dengan 1, yang dengan jelas untuk
memberikan posisi untuk elemen berikutnya dengan
A yang isinya sama dengan A[i].
1 3 5 4 5 2 2 3 3 5
1 2 3 4 5 6 7 8 9 10 Proses ini memerlukan sebuah array bantu Byang
C
ukurannya sama dengan array A , yaitu n. Yang pada
1 0 1 0 0
awalnya semua B[i] diinisialisasi dengan nil.
1 2 3 4 5
B
Langkah 3 : pembacaan ketiga mendapat elemen
A[3] dengan isi 5, maka C[5] ditambah 1. - - - - - - - - - -
1 2 3 4 5 6 7 8 9 10
1 0 1 1 1
1 2 3 4 5
Langkah 2 : elemen A[9] adalah 3, maka karena C[3]
. adalah 6, maka B[6] diisi dengan 3, dan C[3]
. dikurangi 1.
.
A
Demikian dilakukan terus menerus hingga semua 1 3 5 4 5 2 2 3 3 5
elemen Atelah diakses. Hingga setelah langkah ke 10 1 2 3 4 5 6 7 8 9 10
Lalu array Cdiproses sehingga setiap elemen C, C[i] Langkah 3 : elemen A[8] adalah 3, maka karena C[3]
tidak lagi merepresentasikan jumlah elemen dengan adalah 5, maka B[5] diisi dengan 3, dan C[3]
nilai sama dengan i namun setiap C[i] menjadi dikurangi 1.
merepresentasikan jumlah
, elemen yang lebih kecil
atau sama dengan i A
. 1 3 5 4 5 2 2 3 3 5
Dan setelah proses tersebut dilakukan didapatkan C 1 2 3 4 5 6 7 8 9 10
sebagai berikut : B
C - - - - 3 3 - - - 5
1 3 6 7 10 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 C
Setelah C didapat dilakukan proses penempatan sesuai 1 3 4 7 9
dengan posisi yang didapat. Proses ini dilakukan 1 2 3 4 5
dengan menelusuri kembali A dari belakang. Mengapa
dari belakang? Karena kita mengharapkan hasil Langkah 3 : elemen A[7] adalah 2, maka karena C[2]
pengurutan yang stable , yang akan sangat penting adalah 3, maka B[3] diisi dengan 2, dan C[2]
dalam pengurutan data majemuk. Dan juga agar dapat dikurangi 1.
A kalang keempat membutuhkan waktu O (n).
1 3 5 4 5 2 2 3 3 5
1 2 3 4 5 6 7 8 9 10 Jadi secara total membutuhkan waktu O (k+n), yang
B seringkali dianggap k= O(n), sehingga waktu total
- - 2 - 3 3 - - - 5 yang dibutuhkan menjadi O (n).
1 2 3 4 5 6 7 8 9 10
C 4.4. Analisis mengenai Counting
1 2 4 7 9 Sort
1 2 3 4 5 Dengan contoh dan algoritma yang telah dibahas, jelas
. bahwa counting sort melakukan pengurutan tanpa
. melakukan pembandingan antardata.
.
Demikian proses dilakukan hingga elemen A[1] Syarat agar pengurutan ini dapat dilakukan adalah
selesai diproses, sehingga didapatkan hasil akhir diketahuinya rentang nilai data-datanya. Data-data
yang akan diurutkan juga harus berupa bilangan bulat
B (integer ).
1 2 2 3 3 3 4 5 5 5
1 2 3 4 5 6 7 8 9 10
Counting sort bisa efisien bila ktidak jauh lebih besar
daripada n. Di mana semakin besar kmaka memori
Yang telah berupa array dengan elemen-elemennya
tambahan yang diperlukan menjadi sangat besar.
terurut secara non-decreasing .
Contoh di mana counting sortdapat menjadi efisien
adalah bila mengurutkan siswa-siswa dalam sebuah
4.3. Algoritma dan Kompleksitas Waktu Countin
sekolah berdasar nilainya, dengan nilai adalah
Sor g
bilangan bulat dengan rentang 0..100. Dan contoh di
t
mana counting sort akan sangat buruk kinerjanya
Dari implementasi yang telah dilakukan tersebut,
adalah untuk data yang rentangnya sangat besar, misal
penulis mengimplementasikannya manjadi sebuah
dengan rentang 0..2 32 -1.
program menggunakan bahasaPascal sebagai berikut
:
Counting sort memiliki properti yang penting, yaitu
ke-stable-an. Di mana data-data dengan nilai yang
procedure CountingSort (A : TArray; sama akan diurutkan berdasar urutan kemunculan
var B : TArray); pada array asal. Properti ini sangat penting dalam
pengurutan data majemuk.
var
C : array [ 1 ..k] of byte;
i : integer; Dengan kompleksitas O(n), metode pengurutan ini
sangat cepat dan efektif. Yang diimbangi dengan
begin kelemahan yaitu dibutuhkan memori tambahan
sebagai arraybantu dalam prosesnya.
for i:= 1 to k do
C[i] := 0;
for i:= 1 to n do
4. RADIX
C[A[i]] := C[A[i]] + 1;
SORT
4.1. Ide dasar Radix Sort
for i:= 2 to k do
C[i] := C[i] + C[i- 1]; Sebelum memulai membahas lebih lanjut, akan lebih
baik jika diadakan penyamaan persepsi mengenai
for i:=n downto 1 do begin istilah radix, dalam makalah ini radix bermakna
B[C[A[i]]] := A[i]; harafiah posisi dalam angka [1]. Di mana
C[A[i]] := C[A[i]] - 1;
end ;
sederhananya, dalam representasi desimal, radix
adalah digitnya.
end ;
Ide dasar dari metode Radix sort ini adalah
mengkategorikan data-data menjadi subkumpulan-
Waktu yang dibutuhkan untuk mengurutkan data subkumpulan data sesuai dengan nilai radix-nya,
menggunakan counting sort bisa didapatkan dari mengkonkatenasinya, kemudian mengkategorikannya
perhitungan sebagai berikut : kembali berdasar nilai radixlainnya.
Kalang pertama membutuhkan waktu O(k), Dalam kenyataannya banyak sekali algoritma Radix
kalang kedua membutuhkan waktu O(n), sort yang berbeda-beda walaupun ide dasarnya sama,
kalang ketiga membutuhkan waktu O(k), dan ada yang menggunakan queue, ada yang
menggunakan bantuan algoritma pengurutan lain jangan lupa bahwa urutan pada tiap subkumpulan data
untuk mengurutkan data per kategori (dan yang biasa harus sesuai dengan urutan kemunculan pada
digunakan adalah counting sort [2]), ataupun kumpulan data.
menggunakan rekursif.
121 2 32 7 42 8 23 4 3 4 2 74 0 76 9 36 3 67
Selain itu, ada 2 macam Radix sort berdasarkan urutan
pemrosesan radix-nya, yaitu secara LSD ( Leas Kategori digit Isi
Significant Digit ) di mana pemrosesan dimulai tdari 0 -
radixyang paling tidak signifikan, dan satu lagi secara 1 -
MSD ( Most Significant Digit ), di mana pemrosesan 2 121, 823
dimulai dari radixyang paling signifikan. Namun 3 232, 434, 936
dalam makalah ini yang dibahas adalah LSD radix 4 742
sort , di mana langkah yang dilakukan lebih sederhana
5 -
dibanding dengan MSD radix sort yang dalam
6 367
pemrosesannya diperlukan penyimpanan track dari
7 274, 076
pemrosesan sebelumnya.
8 -
9 -
Agar relevan dengan topik utama makalah ini yang
mengedepankan pengurutan tanpa pembandingan,
Yang kemudian dikonkatenasi kembali menjadi
yang dibahas hanyalah radix sort yang dalam
prosesnya hanya menggunakan pengkategorian
berulang, tanpa menggunakan bantuan algoritma 121 823 232 434 936 742 367 274 076
pengurutan lain.
Kemudian langkah ketiga, atau langkah terakhir pada
4.2. Implementasi Radix Sort contoh ini adalah pengkategorian kembali berdasar
digit yang terkiri, atau yang paling signifikan :
Contoh implementasi yang akan dilakukan adalah
implementasi pada bilangan bulat positif 121 823 232 4 34 936 742 367 274 076
menggunakan salah satu algoritma pengurutan radix
sort . Kategori digit Isi
0 076
Contohnya adalah pengurutan sebuah kumpulan data 1 121
bilangan bulat dengan jumlah digit maksimal 3 : 2 232, 274
3 367
121 076 823 367 232 434 742 936 274 4 434
5 -
Pertama kali, data dibagi-bagi sesuai dengan digit 6 -
terkanan : 7 742
8 823
12107 682 336 723 243 474 293 627 4 9 936
{--- dikategorikan
fori:= 1 to n do
---} 5. KESIMPULAN
Enqueue (KatRadix [(B[i] div
pembagi) mod 10 ], B[i]); Dari bahasan di atas, dapat disimpulkan Algoritma
B[i] := 0; Pengurutan Tanpa Pembandingan ( Non-Comparison
Sorting ) adalah algoritma pengurutan yang cepat,
{--- dikonkat efektif, namun penggunaannya terbatas pada kasus-
ctr := 0;
---}
for i:= 0 to 9 do begin
kasus tertentu dan memerlukan memori tambahan
while ( NOTIsQueueEmpty dalam prosesnya.
(KatRadix[i])) do begin
ctr := ctr + 1; Dan secara umum kompleksitasnya adalah linier, di
B[ctr]:=DeQueue (KatRadix [i]); mana lebih baik daripada algoritma Pengurutan
end ; Dengan Pembandingan ( Comparison Sort ) yang
end ; memiliki lower-bound ( nlog n).
pembagi := pembagi * 10 ;
end ; Secara lebih mendalam, Counting Sort adalah
algoritma pengurutan efektif dan efisien yang
end ; melakukan pengurutan dengan ide dasar meletakkan
elemen pada posisi yang benar, di mana penghitungan
posisi yang benar dilakukan dengan cara menghitung
Dari algoritma di atas, dapat dihitung waktu yang (counting ) elemen-elemen dengan nilai lebih kecil
diperlukan untuk melakukan pengurutan atau sama dengan elemen tersebut. Dan memiliki
menggunakan metode radix sort. kompleksitas waktu linier .Walaupun tidak dapat
digunakan secara luas karena banyaknya batasan.
Kalang luar pertama : O (n)
Radix Sort melakukan pengurutan dengan cara
Kalang dalam pertama : O (1) mengkategorikan data sesuai dengan radix tertentu
Kalang dalam kedua : O(n) secara berulang-ulang. Memerlukan memori tambahan
Kalang dalam ketiga : O(n) yang berbanding lurus dengan d, di mana d adalah
Sehingga kompleksitasnya adalah O(n) radixyang digunakan. Memiliki kompleksitas waktu
linier juga seperti Counting Sort .
Semua itu kalang dalam tersebut terdapat dalam
kalang luar kedua, yang memiliki kompleksitas O (d).
Jadi secara keseluruhan prosedur Radix Sortdi atas DAFTAR
memiliki kompleksitas O(nd). REFERENSI
[1] DF Alfatwa, ER Syah P, FM Ahsan,
4.4. Analisis mengenai Radix Sort “Implementasi Algoritma Radix Sort dalam
Berbagai Kasus Bilangan Dibandingkan Algoritma
Dari langkah-langkah yang dilakukan dalam proses Pengurutan yang lain”. Bandung. 2005.
pengurutan menggunakan radix sort, jelas tampak
bahwa radix sort termasuk dalam kategori pengurutan [2] Thomas H. Cormen, Charles E. Leiserson, Ronald
tanpa pembandingan. L. Rivest, Introduction To Algorithms , McGraw-
Dalam contoh yang menggunakan bilangan desimal, Hill. 1990.
[3] Handbook UI, Algoritma-algoritma pengurutan
internal
http://ranau.cs.ui.ac.id/sda/archive/1998/handout/ha
ndout24.html
Tanggal akses : 29 Desember 2007 pukul 04.00
GMT +7