Counting Sort.docx
February 27, 2018 | Author: Cubek's Habitcraig | Category: N/A
Short Description
Download Counting Sort.docx...
Description
1. Counting Sort Definisi atau pengertian counting sort secara etimologis (tata bahasa) berasal dari dua kata dalam bahasa Inggris, yaitu counting yang berarti menghitung atau mencacah dan sort yang berarti menyortir atau bisa diartikan menyusun. Sedangkan secara terminologis dalam dunia pemrograman, counting sort adalah sebuah teknik algoritma dalam mengurutkan data dari yang terkecil ke terbesar (ascending) atau dari yang terbesar ke terkecil (descending) dimana dalam proses pengurutan tersebut tidak ada tahapan pembandingan data. Oleh karena itu, counting sort dimasukkan ke dalam kategori non-Comparison Sort atau dalam bahasa Indonesia-nya pengurutan tanpa pembandingan. Dalam
prosesnya,
teknik
algoritma
counting
sort
melibatkan
pencacahan atau perhitungan bilangan data dan indeks array. Perhitungan tersebut mencakup penjumlahan dan pengurangan. Oleh karena itu, teknik algortima sorting ini dinamakan dengan counting sort. Algoritma ini diciptakan oleh Harold H. Seward pada tahun 1954. Counting Sort adalah algoritma pengurutan efektif dan efisien yang melakukan pengurutan dengan ide dasar meletakkan elemen pada posisi yang benar, di mana penghitungan posisi yang benar dilakukan dengan cara menghitung (counting) elemen-elemen dengan nilai lebih kecil atau sama dengan elemen tersebut. 1.1 Ide Dasar Counting Sort Untuk dapat melakukan pengurutan dengan counting sort rentang nilai untuk kumpulan data yang akan diurutkan harus diketahui, katakanlah k. Ide dasar dari counting sort adalah menentukan, untuk setiap elemen x, jumlah elemen yang lebih kecil daripada x, yang kemudian informasi ini digunakan untuk menentukan posisi x. Contoh sederhanannya jika ada 7 elemen yang lebih kecil dari x, maka x akan mendapatkan posisi di posisi 8.
1
1.2 Implementasi Counting Sort Misal array data yang akan diurutkan adalah A. Counting Sort membutuhkan sebuah array C berukuran k, yang setiap elemen C[i] merepresentasikan jumlah elemen dalam A yang nilainya adalah i. Di array inilah penghitungan (counting) yang dilakukan dalam pengurutan ini disimpan. Contoh 1 Pengurutan Secara Ascending: Terdapat array A, dengan n adalah 5, dimana rentang nilai setiap A[i] adalah 1...4 A
2
C
1
4
3
2
0
0
0
0
1
2
3
4
Pengurutan array-nya dilakukan secara linier, dengan menelusuri array A. Proses pengurutanya yaitu sebagai berikut : Langkah 1 :Pembacaan pertama mendapat elemen A[1] dengan isi 2, maka C[2] ditambah 1 A
2
1
4
3
C
0
1
0
0
2
1 2 3 4 Langkah 2 :Pembacaan kedua mendapat elemen A[2] dengan isi 1, maka C[1] ditambah1 A
2
1
4
3
C
1
1
0
0
1
2
3
4
2
2
Langkah 3 :Pembacaan ketiga mendapat elemen A[3] dengan isi 4, maka C[4] ditambah 1 A
2
1
4
3
C
1
1
0
1
2
1 2 3 4 Langkah 4 :Pembacaan keempat mendapat elemen A[4] dengan isi 3, maka C[3] ditambah1 A
2
1
4
3
C
1
1
1
1
1
2
3
4
2
Langkah 5 :Pembacaan kelima mendapat elemen A[5] denganisi 2, maka C[2] ditambah 1 A
2
1
4
3
C
1
2
1
1
2
1 2 3 4 Semua elemen A telah diakses. Sehingga didapatkan array C sebagai berikut. C
1
2
1
1
1
2
3
4
Kemudian array C diproses sehingga setiap elemen C, C[i] tidak lagi merepresentasikan jumlah elemen dengan nilai sama dengan i, namun setiap C[i] menjadi merepresentasikan jumlah elemen yang lebih kecil atau sama dengan i. Setelah proses tersebut dilakukan didapatkan C sebagai berikut:
3
C
1
3
4
5
1 2 3 4 Setelah C didapat, dilakukan proses penempatan sesuai dengan posisi yang didapat. Proses ini dilakukan dengan menelusuri kembali A dari belakang. Penelusuran dilakukan dari belakang karena kita mengharapkan hasil pengurutan yang stable, yang akan sangat penting dalam pengurutan data majemuk. Dalam
proses
ini
kita
mengakses
elemen
A[i],
kemudian
memposisikannya di posisi sebagai mana tercatat dalam C[A[i]], kemudian kita mengurangkan C[A[i]] dengan 1, yang dengan jelas untuk memberikan posisi untuk elemen berikutnya dengan yang isinya sama dengan A[i]. Proses ini memerlukan sebuah array bantu B yang ukurannya sama dengan array A, yaitu n. Yang pada awalnya semua B[i] diinisialisasi denganNIL. A
2
1
4
3
2
B
-
-
-
-
-
C
1
3
4
5
1 2 3 4 Langkah 1 : Elemen A[5] adalah 2, dan C[2] adalah 3, maka B[3] diisi dengan 2, dan C[2] dikurangi 1 A
2
1
4
3
2
B
-
-
2
-
-
1
3
4
5
1
2
3
4
C
4
C[2] setelah dikurangi 1 1
C
2
4
5
1 2 3 4 Langkah 2 : Elemen A[4] adalah 3, dan C[3] adalah 4, maka B[4] diisi dengan 3, dan C[3] dikurangi 1 A
2
1
4
3
2
B
-
-
2
3
-
1
2
4
5
1 2 C[3] setelah dikurangi 1
3
4
C
1
C
2
3
5
1 2 3 4 Langkah 3 : Elemen A[3] adalah 4, dan C[4] adalah 5, maka B[5] diisi dengan 4, dan C[4] dikurangi 1 A
2
1
4
3
2
B
-
-
2
3
4
1
2
3
5
1 2 C[4] setelah dikurangi 1
3
4
C
5
1
C
2
3
4
1 2 3 4 Langkah 4 : Elemen A[2] adalah 1, dan C[1] adalah 1, maka B[1] diisi dengan 1, dan C[1] dikurangi 1 A
2
1
4
3
2
B
1
-
2
3
4
C
1
2
3
4
1 2 C[1] setelah dikurangi 1
3
4
0
C
2
3
4
1 2 3 4 Langkah 5 : Elemen A[1] adalah 2, dan C[2] adalah 2, maka B[2] diisi dengan 2, dan C[2] dikurangi 1 A
2
1
4
3
2
B
1
2
2
3
4
C
2
3
4
1 2 C[1] setelah dikurangi 1
3
4
C
0
0
1
3
4
1
2
3
4
6
Setelah semua proses dilakukan maka akan diperoleh hasil akhir yang merupakan sebuah array dengan elemen-elemen yang sudah terurut secara ascending. Array tersebut yaitu. B
1
2
2
3
4
Contoh2 Pengurutan Secara Descending: Terdapat array A, dengan n adalah 5, dimana rentang nilai setiap A[i] adalah 1...4 A
2
1
4
3
C
0
0
0
0
2
1 2 3 4 Proses penempatan pada pengurutan Descending sama dengan proses penempatan pada pengurutan Ascending. Sehingga didapat array C yang sama dengan array C pada pengurutan Ascending, yaitu sebagai berikut. C
1
3
4
5
1 2 3 4 Setelah C didapat, dilakukan proses penempatan sesuai dengan posisi yang didapat. Prosesnya sama dengan proses pengurutan pada ascending. Namun
berbeda
dengan
ascending
proses
descending
pada
saat
menempatkan elemen pada array B indeks perhitungannya menggunakan rumus (n-C[A[i]])+1 Langkah 1 : Elemen A[5] adalah 2, dan C[2] adalah 3, maka dengan menggunakan rumus (n-C[A[i]])+1, di dapat indeks B adalah 3, sehingga B[3] diisi dengan nilai 2, dan C[2] dikurangi 1
7
A
2
1
4
3
2
B
-
-
2
-
-
1
3
4
5
1
2
3
4
C
C[2] setelah dikurangi 1 1
C
2
4
5
1 2 3 4 Langkah 2 : Elemen A[4] adalah 3, dan C[3] adalah 4, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 2, sehingga B[2] diisi dengan nilai3, dan C[3] dikurangi 1 A
2
1
4
3
2
B
-
3
2
-
-
C
1
3
4
5
1
2
3
4
C[3] setelah dikurangi 1
C
1
2
3
5
1
2
3
4
8
Langkah 3 : Elemen A[3] adalah 4, dan C[4] adalah 5, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 1, sehingga B[1] diisidengan nilai5, dan C[4] dikurangi 1 A
2
1
4
3
2
B
4
3
2
-
-
C
1
2
3
5
1
2
3
4
[4] setelah dikurangi 1
C
1
2
3
4
1
2
3
4
Langkah 4 : Elemen A[2] adalah 1, dan C[1] adalah 1, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 5, sehingga B[5] diisi dengan nilai1, dan C[1] dikurangi 1 A
2
1
4
3
2
B
4
3
2
-
1
C
1
2
3
4
1 2 C[1] setelah dikurangi 1
3
4
0
2
3
4
9
C 1 2 3 4 Langkah 5 : Elemen A[1] adalah 2, dan C[2] adalah 2, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 4, sehingga B[4] diisi dengan nilai2, dan C[2] dikurangi 1 A
2
1
4
3
2
B
4
3
2
2
1
C
0
2
3
4
1
2
3
4
C[3] setelah dikurangi 1
C
0
1
3
4
1 2 3 4 Setelah semua proses dilakukan maka akan diperoleh hasil akhir yang merupakan sebuah array dengan elemen-elemen yang sudah terurut secara procedure counting_sort_asc(input/output data : A : array of integer, Output B :Array Arraytersebut of integer) descending. yaitu. VAR
I : integer B 4 3 integer 2 C : array[1..k] of ALGORITMA for i 1 to k do c[i] 0 endfor Counting Sort 1.3 Algoritma
2
1
A. Algoritma Ascending for i Counting 1 toSort n do c[a[i]] endfor
c[a[i]] + 1
for i 1 to k do c[i] c[i]+c[i-1] endfor for i n downto 1 do b[c[a[i]]] a[i] c[a[i]] c[a[i]]-1 endfor
10
B. Algoritma Counting Sort Descending procedure counting_sort_asc(input/output data : A : array of integer, output B : Array of integer) VAR i : integer c : array [1..k] of integer ALGORITMA for i 1 to maks do c[i] 0 endfor for i 1 to maks do c[a[i]] c[a[i]] + 1 endfor for i 1 to maks do c[i] c[i]+c[i-1] endfor for i maks downto 1 do b[c[a[i]]] a[i] c[a[i]] c[a[i]]-1 endfor
11
1.4 Kompleksitas Waktu Algoritma Counting Sort a. Kompleksitas waktunya : 1. Operasi pengisian nilai yang terdiri dari a) C[i] 0 = k b) C[A[i]] C[A[i]]+1 = N c) C[i] C[i]+C[i-1] = k-1 d) B[C[A[i]]] A[i]= N e) C[A[i]] C[A[i]]-1= N Sehingga menjadi : k+N+k-1+N+N = 3N+2k-1 2. Operasi Penjumlahan a) C[A[i]] C[A[i]]+1 = N b) C[i] C[i]+C[i-1] = k-1 Sehingga menjadi : N+k-1 3. Operasi Pengurangan a) C[A[i]] C[A[i]]-1= N Sehingga menjadi : N Total kebutuhan waktunya : 3N+2k-1 + N+k-1 + N = 5N+3k-2 b. Kompleksitas waktu asimptotiknya : For i=1 to maks do C[i] 0 End For
---- O(1)
For i=1 to maks do C[A[i]] C[A[i]]+1 End For
---- O(1)
For i=1 to maks do C[i] C[i]+C[i-1] End For
---- O(1)
12
For i=maks downto 1 do b[c[a[i]]] a[i] c[a[i]] c[a[i]]-1 end for
---- O(1) ---- O(1)
Sehingga menjadi = k. O(1) + N. O(1) + (k-1). O(1) + N. {O(1) + O(1)} = O(k) + O(N) + O(k-1) + N. O(1) = O(k) + O(N) = O(n) 1.5 Kelebihan dan Kekurangan Counting Sort Keungggulan algoritma counting sort adalah dapat mengurutkan beberapa bilangan bulat (integer) dengan waktu yang lebih singkat karena tidak adanya proses pembandingan bilangan. Sedangkan kelemahan algoritma counting sort adalah menggunakan array yang terlalu banyak bila range bilangan sangat berjauhan sehingga akan menghabiskan memori yang cukup banyak. 1.6 Kesimpulan tentang counting sort Untuk melakukan pengurutan nilai yang paling sederhana dan paling mudah dimengerti adalah algoritma counting sort namun algoritma ini tidak efektif digunakan pada tabel dengan range yang besar. Dimana semakin besar k, maka kebutuhan memori menjadi sangat besar. Secara
lebih
mendalam, Counting Sort adalah algoritma pengurutan efektif dan efisien yang melakukan pengurutan dengan ide dasar meletakkan elemen pada posisi yang benar, di mana penghitungan posisi yang benar dilakukan dengan cara menghitung (counting)
elemen-elemen
dengan
nilai lebih kecil atau sama dengan elemen tersebut. Dan memiliki kompleksitas waktu linier O(n). Walaupun tidak dapat digunakan secara luas karena banyaknya batasan.
13
Daftar Pustaka Dominikus Damas Putranto. Pengkajian Algoritma Pengurutan-Tanpa Pembandingan Counting Sort dan Radix Sort. ITB (Diakses tanggal 25 November 2012) Fajar Hari Prabowo. Counting Sort|Algoritma Dasar Pengurutan. Fajar Hari Prabowo’s Blog (Diakses tanggal 25 November 2012) No Name. Counting Sort http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sortingII/countin gSort/countingSort.html (Diakses tanggal 28 November 2012) Tridayanti. 2012. Algoritma Counting Sort http://tridayanti.blogspot.com/2012/03/pengertian-algoritmasertakekurangan.html (Diakses tanggal 28 November 2012)
14
15
View more...
Comments