Algoritma Bucket sort

July 17, 2017 | Author: Supriyanto | Category: N/A
Share Embed Donate


Short Description

Berisi konsep dari algoritma bucket sort....

Description

Penerapan Algoritma Bucket Sort Untuk melakukan Pengurutan n buah Bilangan Mata Kuliah Pemrosesan Paralel

OLEH : SUPRIYANTO (G651090191) OKE HENDRADHY (G651090101) KAMALUDDIN MAHFUDZ (G651090231)

DEPARTEMEN ILMU KOMPUTER SEKOLAH PASCASARJANA INSTITUT PERTANIAN BOGOR BOGOR 2010

KATA PENGANTAR

Puji syukur kehadirat Allah SWT, atas berkat rahmat dan hidayah-Nya kami dapat menyelesaikan tugas mata kuliah pemrosesan paralel ini. Tulisan ini akan membahas penerapan algoritma bucket sort secara sekuensial dan paralel. Algoritma paralel dirancang dalam rangka untuk mengoptimalkan (mempercepat) proses pengurutan n buah bilangan. Algoritma bucket sort sendiri merupakan variasi dari berbagai macam algoritma pengurutan dengan prinsip divide dan conquer, yaitu membagi n buah bilangan yang akan diurutkan menjadi m buah sub proses untuk diselesaikan. Setelah proses pengurutan di sub masalah selesai maka solusi digabungkan ke dalam proses aslinya. Penulis menyadari dalam penyusunan makalah ini masih banyak kekurangan. Kritik dan saran demi kemajuan di kemudian hari sangat kami harapkan.

Hormat Kami,

Tim Penulis

i

DAFTAR ISI

KATA PENGANTAR ..................................................................................................................... i DAFTAR ISI.................................................................................................................................... i PENDAHULUAN .......................................................................................................................... 1 A. Latar Belakang .................................................................................................................... 1 B.

Tujua ................................................................................................................................... 2

LANDASAN TEORI ...................................................................................................................... 3 A. Algoritma Divide and Conquer ........................................................................................... 3 B.

Bucket Sort .......................................................................................................................... 3

METODE ........................................................................................................................................ 5 PEMBAHASAN ............................................................................................................................. 6 A. Prinsip Kerja Algoritma Bucket Sort .................................................................................. 6 B.

Pseudocode Algoritma Bucket Sort .................................................................................... 7

C.

Kompleksitas Algoritma Bucket Sort Sekuensial ............................................................... 7

KESIMPULAN DAN SARAN....................................................................................................... 8 A. Kesimpulan ......................................................................................................................... 8 B.

Saran.................................................................................................................................... 8

DAFTAR PUSTAKA ..................................................................................................................... 9

i

PENDAHULUAN

A. Latar Belakang Sorting (pengurutan) adalah proses mengurutkan n buah bilangan dalam urut menaik (ascending) atau urut menurun (descending) (Cormen, 2001). Proses mengurutkan 2 buah bilangan merupakan proses membandingkan bilangan tersebut dengan operator pembanding yang kemudian dilakukan proses tukar posisi (exchange position) sesuai dengan operator pembandingnya apakan bilangan tersebut di urut secara ascending atau di urutkan secara descending. Proses tersebut berlanjut sampai dengan n buah bilangan dapat terurut sempurna. Algoritma mengurutkan suatu array memiliki variasi yang cukup banyak tergantung dari teknik mengurutkan array tersebut sehingga menghasilkan suatu kompleksitas waktu proses mengurutkan yang berbeda-beda. Pada mesin sekuensial yaitu proses mengurutkan suatu array oleh hanya satu buah prosesor, mengurutkan n buah bilangan merupakan proses mengurutkan yang rutin prosesnya mengantri melalui urutan waktu (t) tertentu dalam prosesor. Kompleksitas waktu pengurutan diuji dalam keadaan terburuk (worstcase) dan keadaan rata-rata (average case), sehingga menghasilkan notasi O (Big Oh) dan notasi Ω (Big Omega), dan memiliki variasi yang tergolong dalam 3 kategori sorting, yaitu : comparison sort, not comparison sort dan external sort (Sedgewick, 1998). Pada mesin paralel, yaitu proses yang memanfaatkan n buah prosesor sebagai media proses sorting, n bilangan yang akan di sorting di pecah terlebih dahulu melalui teknik foster (Grama, 2003), yang selanjutnya di bandingkan antar bilangan yang ada dimasing-masing prosesor yang kemudian di satukan kembali dalam keadaan terurut. Tentunya proses ini menghasilkan algoritma yang secara prinsip lebih cepat di bandingkan proses sekuential, karena masalah yang ada di pecah-pecah terlebih dahulu dalam sub masalah yang lebih kecil untuk kemudian di proses. Akan tetapi faktor lain dapat menghasilkan kondisi sebaliknya, karena dengan semakin menaiknya jumlah prosesor yang digunakan maka semakin menaik juga kebutuhan akan komunikasi antar prosesor yang ada. Hal ini dapat menyebabkan bahwa tidak setiap penambahan jumlah prosesor dapat meningkatkan waktu proses dari suatu algoritma sorting paralel. Salah satu algoritma sorting yang cukup menarik untuk di uji pada kondisi sekuential maupun kondisi paralel adalah algoritma bucket sort (Grama, 2003). Algoritma ini memiliki teknik yang cukup menarik karena algoritma ini akan memilah elemen array n dalam suatu interval [a, b] dibagi menjadi subintervals sama besar m dalam suatu bucket, setiap bucket akan berisikan n/m buah bilangan untuk kemudian bucket yang ada di urutkan dan dibandingkan antar bucket yang ada sehingga menghasilkan suatu proses terurut. Dengan asumsi bahwa setiap bucket merupakan procesor yang ada, maka pada proses paralel algoritma bucket akan dirumuskan dalam 3 langkah yaitu : proses mempartisi blok n buah bilangan ke dalam setiap prosesor p, lalu mengirimkan setiap subblok yang ada ke prosesor yang sesuai dan terakhir proses yang ada disetiap bucket yang didefinisikan sebagai p buah prosesor dilakukan proses pengurutan secara sekuensial. 1

Dilihat dari kompleksitas algoritma, algoritma bucket sort secara sekuential menjadi paralel, maka perlu dilakukan uji atas algoritma bucket sort ini dalam kondisi sekuensial dan kondisi paralel dan sampai dimana algoritma tersebut dalam keadaan optimal. Pada percobaan ini hanya dibatasi pada analisis terhadap algoritma sekuensial dari bucket sort.

B. Tujuan Tujuan dari penulisan makalah ini adalah untuk : 1. Melakukan perbandingan antara proses algoritma bucket sort secara sekuential dan paralel; 2. Menguji nilai kompleksitas waktu, speedup, efisiensi dan iso efisiensi dari bucket sort secara paralel 3. Menganalisa kinerja algoritma bucket sort tersebut pada mesin paralel

2

LANDASAN TEORI

A. Algoritma Divide and Conquer Algoritma divide and conquer sudah lama diperkenalkan sebagai sumber dari pengendalian proses paralel, karena masalah-masalah yang terjadi dapat diatasi secara independen. Banyak arsitektur dan bahasa pemrograman paralel mendesain implementasinya (aplikasi) dengan struktur dasar dari algoritma divide and conquer. Untuk menyelesaikan masalah-masalah yang besar, dan dibagi (dipecah) menjadi bagian yang lebih kecil dan menggunakan sebuah solusi untuk menyelesaikan problem awal adalah prinsip dasar dari pemrograman/strategi divide and conquer.

Gambar 2.1. Ilustrasi pemecahan masalah dengan divide dan Conquer

Divide and conquer adalah varian dari beberapa strategi pemrograman topdown, tetapi keistimewaannya adalah membuat sub-sub problem dari problem yang besar, oleh karena itu strategi ini ditunjukkan secara berulang-ulang (recursively), didalam menerapkan algoritma yang sama dalam sub-sub problem seperti yang diterapkan pada masalah aslinya (original problem). Sebagaimana prinsip dasar algoritma perulangan dibutuhkan sebuah kondisi untuk mengakhiri perulangan tersebut. Biasanya untuk mengecek apakah problem sudah cukup kecil untuk diselesaikan dengan metode secara langsung. Mungkin dari segi ilustrasi kita, bahwa proses-proses pada komputer paralel tentunya memiliki proses/problem/job yang cukup kompleks sehingga harus dipecah-pecah menjadi sub-sub problem. Salah satu penerapan algoritma divide and conquer adalah pengurutan data dengan metode merge.

B. Bucket Sort Bucket sort merupakan salah satu bentuk algoritma divide & conquer melalui metode partisi dan berjalan dalam keadaan linear time (Wilkinson & Allen, 2005). Secara teoritis, proses pengurutan dilakukan dengan membagi dan memecahkan himpunan array ke dalam beberapa ember virtual secara merata.

3

Bilangan belum terurut

32

45

2

11

67

5

8

12

1

22

23

10

90

15

27

19

33

......

26

28

7

5

7

8

10

11

12

15

19

22

23

26

27

28

32

33

......

45

67

90

Bucket

Pengurutan isi bucket

Proses merge

1

2

Bilangan telah terurut

Gambar 2.2. Proses pengurutan bucket

Adapun ember yang dijadikan partisi atas n data kemudian diurutkan secara individual, menggunakan algoritma sorting yang berbeda atau melalui penerapan bucket sort secara rekursif. Ember virtual yang merupakan partisi atas n array dan merupakan proses acak yang mendistribusikan elemen seragam pada interval [0,1), dimana pembagian tersebut dilakukan merata sama besar. Dengan asumsi input dalam n elemen pada array A, untuk masing-masing A memenuhi 0 ≤ A [i] ≤ 1, sehingga membutuhkan array bantu B yang merupakan ember sub interval (Wilkinson & Allen, 2005). Secara teoritis langkah-langkah algoritma bucket sort adalah sebabagi berikut : 1. Menginisiasi sejumlah m ember yang akan digunakan (bucket) 2. Membagi n element data yang diurutkan ke dalam, m bucket (wadah), dari suatu himpunan data S dengan interval [a,b] 3. S dibagi ke dalam m sub interval (buckets) sama rata. 4. Satu wadah akan mendapatkan n/m elemen data. 5. Bucket diurutkan dengan menggunakan algoritma sekuensial. 6. Lihat semua bucket kemudian kembalikan ke array aslinya.

4

METODE Metode yang digunakan dalam implementasi algoritma sekuensial pengurutan dengan bucket sort adalah dengan menggunakan Divide dan conquer. Prinsip kerja dari metode ini adalah memecah masalah menjadi sub-sub masalah kemudian menyelesaikannya. Setelah masalah diselesaikan maka digabungkan kembali untuk mendapatkan solusi.

5

PEMBAHASAN A. Prinsip Kerja Algoritma Bucket Sort 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. Kemudian pada masing-masing ember dilakukan pengurutan dengan menggunakan algoritma lainnya misalnya merge sort atau quick sort. Setelah selesai maka dikumpulkan kembali ke array aslinya, sehingga mendapatkan susunan array yang sudah terurut. Gambar 3.1 berikut mengilustrasikan proses yang dilakukan. Bilangan belum terurut

32

45

2

11

67

5

8

12

1

22

23

10

90

15

27

19

33

......

26

28

7

5

7

8

10

11

12

15

19

22

23

26

27

28

32

33

......

45

67

90

Bucket

Pengurutan isi bucket

Proses merge

1

2

Bilangan telah terurut

Gambar 4.1. Proses pengurutan bucket

Secara mudah proses-proses yang terjadi pada algoritma pengurutan dengan menggunakan algoritma bucket sort adalah sebagai berikut : 1. Menginisiasi sejumlah m ember yang akan digunakan (bucket) 2. Membagi n element data yang diurutkan ke dalam, m bucket (wadah), dari suatu himpunan data S dengan interval [a,b] 3. S dibagi ke dalam m sub interval (buckets) sama rata. 4. Satu wadah akan mendapatkan n/m elemen data. 5. Bucket diurutkan dengan menggunakan algoritma sekuensial. 6. Lihat semua bucket kemudian kembalikan ke array aslinya.

6

B. Pseudocode Algoritma Bucket Sort Berdasarkan pada proses-proses yang dilakukan pada algoritma bucket sort maka dapat disusun pseudocode algoritma sekuensialnya. Berikut adalah implementasi pseudocode algoritma bucket sort : function bucket-sort(array, n) is buckets ← new array of n empty lists for i = 0 to (length(array)-1) do insert array[i] into buckets[msbits(array[i], k)] for i = 0 to n - 1 do next-sort(buckets[i]) return the concatenation of buckets[0], ..., buckets[n-1]

C. Kompleksitas Algoritma Bucket Sort Sekuensial Untuk melakukan analisis terhadap kompleksitas suatu algoritma dilakukan dengan cara mempelajari langkah-langkah yang dilakukan di dalam algoritma tersebut. Kompleksitas sendiri menentukan baik atau tidaknya suatu algoritma. Berikut adalah penjabaran proses yang dilakukan algoritma berpengaruh terhadap kompleksitas dari algoritma bucket sort sekuensial : 1. Untuk menempatkan n buah bilangan ke dalam m buah bucket diperlukan n langkah. 2. Pengurutan di tiap-tiap bucket (quick sort atau mergsort) dengan kompleksitas O(n log n), jika dibagi ke dalam m bucket kompleksitas masing-masing dapat diasumsikan n/m log (n/m) 3. Pengumpulan kembali (asumsi tidak ada lankah lain) Maka jika diformulasikan dalam formulasi matematis berikut adalah nilai kompleksitas dari algoritma bucket sort : Ts = n + m((n/m) log (n/m)) = n + n log (n/m) = O( n log (n/m)) dimana n = jumlah array m = jumlah bucket

7

KESIMPULAN DAN SARAN

A. Kesimpulan Metode divide and conquer pada algoritma sekuensial berguna untuk mengoptimalkan waktu yang digunakan (kompleksitas) untuk menjalankan algoritma. Salah satu algoritma pengurutan yang dapat diterapkan dengan menggunakan prinsip divide and conquer adalah algoritma bucket sort. Dari hasil analisis dapat disimpulkan bahwa kompleksitas algoritma bucket sort dengan menggunakan metode divide and conquer adalah sebesar O( n log (n/m), dimana n adalah jumlah array dan m adalah jumlah bucket yang digunakan.

B. Saran Sementara itu untuk melakukan mempercepat waktu komputasi maka perlu dilakukan ujicoba terhadap kinerja algoritma paralel.

8

DAFTAR PUSTAKA

Grama, A; Gupta, A; Karypis, George; dan Kumar, V. 2003. Introduction to Parallel Computing, Second Edition - Chapter 9. Sorting. Addison Wesley. USA. Cormen, Thomas H. Charles E. Leiserson. Ronald L. Rivest. Clifford Stein. 2001. Introduction to Algorithms, second Edition. Massachusetts Institute of Technology. Petersan, W.P. dan Arbenz, P. 2004. Introduction to Parallel Computing, A Practical Guide With Examples in C. Oxford University. Quinn, Michael J. 2004. Parallel Programming in C with MPI and OpenMP. Mc Graw Hill. Wilkinson, Barry dan Michael Allen. 2010. Tehcniques and Apllications Using Networked and Parallel Computers – second editons : Terjemahan. Andi : Yogyakarta.

9

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF