• Tidak ada hasil yang ditemukan

Implementasi dan Analisis Algoritma Bucket Sort, Strand Sort dan Quick Sort 2 Pivot Dalam Pensortiran Data yang Berjumlah Banyak

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi dan Analisis Algoritma Bucket Sort, Strand Sort dan Quick Sort 2 Pivot Dalam Pensortiran Data yang Berjumlah Banyak"

Copied!
14
0
0

Teks penuh

(1)

BAB 2

LANDASAN TEORI

2.1 Pengertian Algoritma

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar (Rosa dan Shalahuddin 2010). Kriteria Algoritma yang baik :

a. Tepat, benar, sederhana, standar dan efektif. b. Logis, terstruktur dan sistematis.

c. Semua operasi terdefinisi.

d. Semua proses harus berakhir setelah sejumlah langkah dilakukan.

e. Ditulis dengan bahasa yang standar dengan format pemrograman agar mudah untuk diimplementasikan dan tidak menimbulkan arti ganda.

(2)

2.2 Algoritma Pengurutan ( Sorting )

Algoritma merupakan urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu untuk memecahkan suatu masalah dalam rentang waktu tertentu. Sedangkan pengurutan adalah proses pengaturan sekumpulan objek berdasarkan urutan atau susunan tertentu, dapat berupa pengurutan menaik (ascending) atau menurun (descending).

Contoh, sebuah larik atau array terdiri dari kumpulan bilangan : [3,12,1,50,33,5,28]  Hasil pengurutan menaik (ascending) : [1,3,5,12,28,33,50]

 Hasil pengurutan menurun (descending) : [50,33,28,12,5,3,1]

Sebuah algoritma dikatakan baik jika menghasilkan nilai yang benar, efektif dan efisien. Efektif yaitu tepat sasaran, jelas dan tidak rancu dalam menjalankan aksi-aksinya serta menghasilkan data yang benar. Efisien yaitu penghematan proses dari sebuah algoritma, seperti running time dan penggunaan memori. Metode atau algoritma pengurutan dapat diklasifikasikan menjadi :

1. Metode atau algoritma pengurutan internal, yaitu pengurutan yang dilakukan di dalam larik itu sendiri. Datanya disimpan di dalam memori komputer. 2. Metode atau algoritma pengurutan eksternal, yaitu pengurutan yang datanya

disimpan di dalam disk storage. Metode ini disebut juga pengurutan arsip. Sedangkan berdasarkan kestabilan (stability), algoritma pengurutan dapat dibagi menjadi dua jenis, yaitu :

1. Metode pengurutan stabil (stable sorting algorithm), merupakan algoritma pengurutan yang menjaga/mempertahankan (maintenance) urutan dari beberapa elemen array yang bernilai sama.

(3)

melakukan perulangan dengan melakukan pemanggilan terhadap dirinya sendiri. Contoh algoritma pengurutan yang termasuk dalam skema iteratif, yaitu pengurutan apung (bubble sort) dan selection sort, Contoh algoritma pengurutan yang termasuk dalam skema rekursif, yaitu pengurutan merge (merge sort), pengurutan heap (heap sort) dan pengurutan cepat (quick sort). Tidak semua algoritma tersebut hanya

memiliki satu skema, misalnya algoritma pengurutan seleksi atau selection sort yang dapat menggunakan skema rekursif, namun di dalam penelitian ini selection sort yang dibahas menggunakan skema iteratif (Fanani 2008).

2.3 Kompleksitas Algoritma

Efisiensi sebuah algoritma tergantung dari beberapa hal, diantaranya adalah :  Kinerja CPU

 Kinerja Memori  Kinerja Disk  Kinerja Jaringan

Menurut Rao dan Ramses (2012), bahwa Algoritma memiliki kompleksitas yang merupakan acuan utama utama untuk mengetahui kecepatan dari sebuah algoritma. Kompleksitas dibagi menjadi tiga, yaitu:

1. Best case (Ω), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi terbaik.

2. Average case (�), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi sedang, biasanya inputnya secara acak.

3. Worst case (Ο), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi terburuk.

2.4 Growth Fuction

(4)

Tabel 1.1 Tabel Notasi Big O

Notasi Nama Contoh Aplikasi

O(1) Konstan Menentukan apakah suatu bilangan ganjil atau genap

O(log * n) Iterasi Logaritmik Algoritma pencarian Hopcraff dan Ullman untuk himpunan disjoint

O(log n) Logaritmik Pencarian dalam list terurut dengan Binary Search Algorithm

O((log n)c) Polilogaritmik Menentukan bilangan prima dengan AKS primality test

O(n) Linear Pencarian dalam list tidak terurut O(n log n) Linearitmik Mengurutkan list dengan Heapsort O(n2) Kuadratik Mengurutkan list dengan Insertion Sort

O(nc),c>1 Poliomial Pencarian shortest path dengan algoritma Floyd Warshall

O(cn) Eksponensia Pencarian solusi untuk traveling salesmen problem

O(n!) Faktorial Menyelesaikan traveling salesmen problem dengan menggunakan brute force

(5)

2.5 Notasi Asimptotik

Notasi asimptotik digunakan untuk menentukan kompleksitas suatu algoritma dengan melihat waktu tempuh (running time) sebuah algoritma. Waktu tempuh algoritma merupakan fungsi : N → R suatu algoritma dengan algoritma lainnya. Notasi asimptotik dapat dituliskan dengan beberapa simbol, yaitu :

 Notasi Big O, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas.  Notasi Little o, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas

atas namun tidak secara ketat terikat (not asymptotically tight).

 Notasi Theta (�), yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas dan bawah.

 Notasi Omega ( ), yaitu notasi asimptotik sebuah fungsi algoritma untuk batas bawah, notasi ini berlawanan dengan notasi little-o.

2.6 Algoritma Bucket Sort

(6)

Proses pengurutan yang dilakukan dengan menggunakan algoritma bucket sort adalah dengan cara membagi dan memecahkan himpunan array ke dalam beberapa ember (bucket) virtual secara merata. Setelah selesai maka dikumpulkan kembali ke array aslinya, sehingga mendapatkan susunan array yang sudah terurut.

Cara kerja algoritma bucket sort dapat dijelaskansebagai berikut :  Tentukan array yang ingin diurutkan.

 Tentukan jumlah bucket dan rentang masing-masing bucket.  Masukkan array tersebut ke dalam bucket yang telah ditentukan.  Di dalam masing-masing bucket, array tersebut di urutkan.

 Setelah itu keluarkan hasil urutan dari dalam bucket dan kembalikan ke array awal.

Kelebihan dari Bucket Sort:

1. Sebuah algortima yang stabil 2. Prosesnya cepat.

3. Hanya berlaku pada kisaran 0 sampai nilai maksimum (M).

4. Lebih terkhusus, dapat digunakan ketika kuncinya dapat digunakan sebagai penghitungan.

2.6.1 Pseudocode Algoritma Bucket Sort Tempt = array[arr.length][arr.length]; For (i=0, i<arr.length, i++){

Index = celling((arr[i]*arr.length)/max) If (temp[index].length=0)

Temp[index][0]=arr[i]; }

Else { j=0;

while (temp[index][j]<arr[i]) j++;

(7)

{

Swap(j, arr[i],temp[index]); }

Return temp[];

2.7 Algoritma Strand Sort

Strand Sort adalah sebuah algoritma pengurutan yang membandingkan dua elemen data. Pertama, mengurutkannya, kemudian mengecek elemen data berikutnya satu persatu dan membandingkannya dengan elemen data yang telah diurutkan. Ide dasar dari algortima Strand Sort ini adalah mencari tempat yang “tepat” untuk setiap elemen array, dengan cara sequential search. Proses ini kemudian menyisipkan sebuah elemen array yang diproses ke tempatnya yang seharusnya. Proses ini dilakukan sebanyak N-1 tahapan dengan indeks yang dimulai dari 0. Proses pengurutan dengan menggunakan algoritma Strand Sort dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data ke-2 sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil maka data tersebut disisipkan kedepan sesuai dengan posisi yang seharusnya.

Proses algoritma Strand Sort bertujuan untuk menjadikan bagian sisi kiri array terurutkan sampai dengan seluruh array berhasil diurutkan. Metode ini mengurutkan bilangan-bilangan yang telah dibaca dan berikutnya secara berulang akan menyisipkan bilangan-bilangan dalam array yang belum terbaca kesisi kiri array yang telah terurut. Strand Sort bekerja seperti banyak orang yang sedang mengurutkan kartu ditangan. Dimulai dengan tangan kiri yang kosong dan kartunya ditumpuk di meja. Selanjutnya kita ambil satu persatu kartu di meja dan diletakkan ditangan kiri dengan posisi yang benar (terurut). Untuk menemukan posisi yang benar, maka kita harus membandingkan satu persatu kartu yang ada (ditangan kiri) secara berurutan.

Kelebihan dan kekurangan Strand Sort : Kelebihan:

(8)

3. Jika list sudah terurut atau sebagian terurut maka algoritma Strand Sort akan lebih cepat daripada Quick Sort.

4. Prosesnya cepat dalam data yang sebagian sudah terurut. 5. Lebih cepat dibandingkan Bubble Sort dan Selection Sort.

6. Loop (Perulangan) pada Strand Sort sangat cepat, sehingga termasuk menjadi salah satu algoritma pengurutan tercepat dalam jumlah elemen yang sedikit. 7. Stabil

Kekurangan :

1. Banyaknya operasi yang diperlukan dalam mencari posisi yang tepat untuk elemen List.

2. Untuk List yang jumlahnya besar algoritma Strand Sort tidak praktis.

3. Jika List terurut terbalik sehingga setiap eksekusi dari perintah harus memindai dan mengganti seluruh bagian sebelum menyisipkan elemen berikutnya. - Membutuhkan metode tambahan.

2.7.1 Pseudocode Algoritma Strand Sort

For (i=1 to (array.length-1)) j=i-1; index;

(9)

j--; if (j<0) break; }

Swap(i,index)

2.8. Algoritma Quick Sort 2 Pivot

Quicksort merupakan Algoritma Sorting yang dikembangkan oleh Tony Hoare yang, secara kasus rata-rata, membuat pengurutan O(n log n) untuk mengurutkan n item. Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya daripada algoritma O(n log n) yang lainnya. Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).

Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak merupakan algoritma sorting yang stabil. Algoritma seleksi memilih jumlah list k yang terkecil, masalah ini merupakan yang paling mudah secara umumnya daripada sorting. Algoritma seleksi yang sederhana teatpi efektif bekerja hampir sama seperti quicksort, kecuali yang daripada memanggil rekursif pada kedua sublist, algoritma ini hanya membuat satu pemanggilan rekursif ekor pada sublist yang mengandung elemen yang diinginkan. Perubahan kecil ini menurunkan kerumitan rata-rata pada linear atau O(n) kali, dan membuatnya menjadi Algoritma In-Place. Ragam algoritma ini membawa worst case turun menjadi O(n).

(10)

menjadi pilihan sebagai elemen pivot. Dalam algoritma ini digunakan 2 Pivot, dan pivotnya bisa dipilih secara acak ataupun berurutan. Sayangnya, ini menyebabkan perilaku worst-case pada array yang telah diurut, yang merupakan penggunaan kasus yang sering dipakai. Masalah ini dengan mudah diselesaikan dengan memilih salah satu dari index acak untuk pivot, memilih indek tengah dari partisi atau (secara khusus untuk partisi panjang) memilih median dari elemen awal, tengah, dan akhir dari partisi untuk pivot

Memilih elemen pivot juga rumit dengan dengan kehadiran dari Integer Overflow. Jika indeks batas dari subarray yang diurutkan cukup besar, ungkapan naif untuk indeks tengah, (kiri + kanan)/2, akan menyebabkan luapan dan memberikan indeks pivot yang salah. Masalah ini dapat terselesaikan dengan menggunakan, sebagai contoh, kiri + (kanan-kiri)/2 pada indeks elemen tengah, pada masalah dari aritmatika kompleks. Masalah yang sama muncul pada beberapa metode yang lain dari pemilihan elemen pivot

Algoritma quick sort mengurutkan dengan sangat cepat, namun algoritma ini sangat komplex dan diproses secara rekursif. Sangat memungkinkan untuk menulis algoritma yang lebih cepat untuk beberapa kasus khusus, namun untuk kasus umum, sampai saat ini tidak ada yang lebih cepat dibandingkan algoritma quick sort.

Quick Sort merupakan suatu algoritma pengurutan data yang menggunakan teknik pemecahan data menjadi partisi-partisi, sehingga metode ini disebut juga dengan nama partition exchange sort. Untuk memulai irterasi pengurutan, pertama-tama sebuah elemen dipilih dari data, kemudian elemen-elemen data akan diurutkan diatur sedemikian rupa.

Langkah-langkah algoritma Quick Sort 2 Pivot :

 Pilih nilai pivot. Kita ambil nilai di awal, ditengah, maupun diakhir secara acak (random) elemen sebagai sebagai nilai dari pivot, dalam algoritma ini menggunakan 2 elemen yang menjadi pivotnya.

(11)

 Urutkan semua bagian (kiri/kanan) elemen dari data tersebut.  Selanjutnya akan menghasilkan data yang sudah terurut Kelebihan:

Algoritma Quicksort memiliki kompleksitas O(n log n) dimana pada prakteknya lebih cepat dari algoritma pengurutan lainnya.

Kekurangan:

Pada kemungkinan terburuknya, algoritma Quicksort ini dapat memiliki kompleksitas O(n2). Meskipun ini sangat langka terjadi

2.8.1 Pseudocode Quick Sort 2 Pivot Algoritma Quick Sort 2 Pivot (A,lo,hi) is If lo < hi then

P:= partition (A,lo,hi) Quicksort (A,lo,P-1) Quicksort (A,P+1,hi) Algoritma partition (A,lo,hi) is Pivot:= A[hi]

i:= lo //place for swapping for j:= lo to hi-1 do

if A[j] <= pivot then swap A[i] with A[j] i:= i+1

swap A[i] with A[hi] return i

2.9 Struktur Data

(12)

direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol. Secara garis besar tipe data dapat dikategorikan menjadi :

1. Tipe data sederhana/dasar a. Tipe data sederhana tunggal

Integer Real

Boolean, dan Karakter

b. Tipe data sederhana majemuk misalnya string 2. Struktur data, meliputi :

a. Struktur data sederhana  Array

Record

b. Struktur data majemuk, yang terdiri dari:  Linier : Stack, Queue, List dan Multilist  No Linier : Pohon Biner (tree) dan Graph

Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efesien dan sederhana. Struktur data yang ′′standar′′ yang biasanya digunakan dibidang informatika adalah List, Multilist, Stack (Tumpukan), Queue (Antrian), Tree ( Pohon ), Graph ( Graf ). Struktur data yang penulisan bahas

dalam tesis ini adalah struktur data sederhana yaitu array dan struktur data majemuk yaitu list ( Wahyudi 2004 ).

a. Array

(13)

b. List

Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. List dapat dimanfaatkan secara effektif sesuai dengan keperluan. List juga dapat benar – benar dihapus / dibersihkan dari memory. List sebenarnya merupakan suatu type data tersendiri. Di bahasa Visual Studio 2010 Ultimate, List bisa berupa suatu Class ataupun Record. Ciri – ciri utama dari List adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data dan pointer untuk menunjukkan ke list berikutnya ( Sanjaya 2001).

Tabel 1.2 Perbedaan mendetail antara Array dan List

Array List

1.Pengaksesan bersifat Statis

2.volumenya selalu tetap tidak tergantung pada jumlah data

3.alokasi memori dilakukan pada saat array didefinisikan.

4.pembebasan memori dilakukan pada saat program berhenti.

5.Cara akses bersifat random dengan menggunakan nomor index.

1.Pengaksesan bersifat Dinamis

2.ukurannya berubah-ubah disesuaikan dengan kebutuhan.

3.alokasi memori ditentukan pada saat data baru dibuat.

4.pembebasan memori dilakukan setiap ada penghapusan data.

5.Cara akses ke masing-masing class data dilakukan secara linier (selalu dimulai dari elemen pertama).

2.10 Penelitian Terdahulu

(14)

Penelitian yang dilakukan oleh Tjaru & Setia (2009) yang berjudul Kompleksitas Algoritma Pengurutan Strand Sort dan selection Sort, yang menerengakan bahwa algoritma pengurutan data dengan selection sort merupakan algoritma pengurutan paling buruk dari kedua metode pengurutan tersebut.

Gambar

Tabel 1.1 Tabel Notasi Big O
Tabel 1.2 Perbedaan mendetail antara Array dan List

Referensi

Dokumen terkait

Pada penelitian ini akan di analisa perbandingan algortima pengurutan data, yaitu: bubble sort, merge sort, dan quick sort untuk mendapatkan waktu proses yang

Klasifikasi algoritma pengurutan berdasarkan proses pengurutan terdiri dari: exchange sort, selection sort, insertion sort, merge sort, dan non comparison

Pada penelitian ini akan di analisa perbandingan algortima pengurutan data, yaitu: bubble sort, merge sort, dan quick sort untuk mendapatkan waktu proses yang baik dalam

Persebaran data yang akan diurut sangat memengaruhi kompleksitas/kemangkusan waktu algoritma, karena dengan metoda pengurutan Quick Sort ini jenis persebaran data

permasalahan yang berkaitan dengan proses pengurutan, yaitu algoritma Strand Sort,. Sieve Sort dan

Penelitian yang dilakukan oleh Sareen (2013) yang berjudul Comparison of Sorting Algorithms (On the Basis of Average Case) dimana metode merge sort dan pengurutan lain

Banyaknya Penelitian mengenai perbandingan kecepatan antara algoritma Quicksort dan Bucket sort, seperti yang dilakukan oleh Audy dalam jurnalnya

Pada penelitian ini akan di analisa perbandingan algortima pengurutan data, yaitu: bubble sort, merge sort, dan quick sort untuk mendapatkan waktu proses yang baik dalam