Kel 5_ Algoritma Divide and Conquer

download Kel 5_ Algoritma Divide and Conquer

of 19

Transcript of Kel 5_ Algoritma Divide and Conquer

PAPER TUGAS BESARSTRUKTUR DATA DAN ALGORITMAALGORITMA DIVIDE AND CONQUER

DISUSUN OLEH :1. PRITA(M05090 )2. DAMAS FAJAR P.(M0512008)3. ELY DESYANAWATI (M0512017)4. LUHUR ANINDITO(M05120 )5. MOH. ARIF P.(M0512036)6. NUGROHO DWI W.(M05120 )7. ROMY RANOVAN(M0512053)8. YONATHAN ADI K.(M0512061)

JURUSAN INFORMATIKAFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAMSURAKARTA2013

ALGORITMA DIVIDE AND CONQUERAlgoritma Divide and Conquer merupakan algoritma yang sangat populer di dunia Ilmu Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan. Langkah-langkah umumalgoritma Divide and Conquer : Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ) Conquer : Memecahkan ( menyelesaikan ) masing-masing upa-masalah ( secara rekursif ). Combine : Menggabungkan solusi masing-masing upa-masalah sehingga membentuk solusi masalah semula.

Skema Algoritma Divide and Conquer

Objek masalah yang di bagi adalah masukan (input) atau instances yang berukuran n: tabel (larik), matriks, dan sebagainya, bergantung pada masalahnya. Tiap-tiap upa-masalah mempunyai karakteristik yang sama (the same type) dengan karakteristik masalah asal, sehingga metode Divide and Conquer lebih natural diungkapkan dalam skema rekursif. Sesuai dengan karakteristik pembagian dan pemecahan masalah tersebut, maka algoritma ini dapat berjalan baik pada persoalan yang bertipe rekursif ( perulangan dengan memanggil dirinya sendiri ). Dengan demikian, algoritma ini dapat diimplementasikan dengan cara iteratif ( perulangan biasa ), karena pada prinsipnya iteratif hampir sama dengan rekursif.Salah satu penggunaan algoritma ini yang paling populer adalah dalam hal pengolahan data yang bertipe array ( elemen larik ). Mengapa? Karena pengolahan array pada umumnya selalu menggunakan prinsip rekursif atau iteratif. Penggunaan secara spesifik adalah untuk mencari nilai minimal dan maksimal serta untuk mengurutkan elemen array. Dalam hal pengurutan ini ada empat macam algoritma pengurutan yang berdasar pada algoritma Divide and Conquer, yaitu merge sort, insert sort, quick sort, dan selection sort. Merge sort dan Quick sort mempunyai kompleksitas algoritma O(n log n). Hal ini lebih baik jika dibandingkan dengan pengurutan biasa dengan menggunakan algoritma brute force.Sebelum masuk ke pokok pemrograman dengan Divide and Conquer strategy/algorithm, ada 4 hal penting yang harus dipahami dalam strategi ini : branching factor, balance, data dependence of divide function dan sequentiality.1. Branching FactorBranching factor dalam algoritma divide and conquer adalah jumlah dari subproblem yang akan dibagi dari sebuah problem awal. Ini adalah langkah nyata dari algoritma divide and conquer, didalam proses pembagian yang sebenarnya, jumlah dari branching factor harus 2 atau lebih, karena jika tidak problem tidak bisa dibagi. Banyak jenis algoritma ini termasuk pula algoritma komputasi geometric yang memiliki branching factor berjumlah 2.

2. BalanceSebuah algoritma divide and conquer dikatakan balance jika problem awal dibagi menjadi sub-sub problem dengan ukuran yang sama. Yang artinya jumlah dari keseluruhan ukuran subproblem sama dengan ukuran problem awal (initial problem). Algoritma Mergesort dan binary tree, dan sama halnya dengan algoritma reduksi &prefix sum adalah beberapa contoh algoritma divide and conquer yang seimbang (balance).

3. Data Dependence of Divide FunctionAlgoritma divide and conquer memiliki sebuah fungsi pembagian terhadap data yang memiliki ketergantungan, artinya jika ukuran relatif dari sebuah Pseudocode untuk model algoritma n-way divide and conquer subproblem tergantung pada proses input datanya. Ini adalah salah satu ciri dari algoritma yang tidak seimbang, salah satu contohnya adalah algoritma quicksort yang akan membagi subproblem dengan fungsi data-dependent divide.

4. Control Parallelism or SequentialityAlgoritma divide and conquer dikatakan berurutan (sequential) jika subproblem dieksekusi sesuai dengan perintah program. Paralelisasi dari algoritma divide and conquer yang terurut pertama kali didefinisikan oleh Mous Divacon[Mou90],yang terjadi ketika hasil dari salah satu sub-eksekusi diperlukan oleh subeksekusi yang lain. Dalam kasus ini hasil dari subtree pertama diberikan(passing) kepada proses komputasi subtree kedua, supaya hasil akhir tersebutbisa digunakan sebagai nilai awalnya, tetapi sekarang ini contoh diatas tidakdapat dijadikan ilustrasi lagi karena teknologi komputer paralel yang semakincanggih dan kompleks.Skema Umum Algoritma Divide and Conquer

Penerapan algoritma divide dan conquer menurut beberpa sumber bahwa algoritma ini dapat dipakai dalam berbagai hal diantaranya :1. Sorting:a. QuicksortQuicksort ditemukan oleh C.A.R Hoare. Seperti pada merge Sort, algoritma ini juga berdasar pada pola divide dan conquer. Berbeda dengan Merge Sort, algoritma ini hanya mengikuti langkah-langkah berikut : Divide yaitu memilah masalah menjadi sub-sub masalah Conquer yaitu mengurutkan elemen pada sub rangkaian secara rekursif. Pada algoritma quicksort, langkah kombinasi tidak dilakukan karena telah terjadi pengurutan elemen-elemen pada sub array.2. Computational Geometry yang terdiri dari :a. Closest PairsClosest Pairs adalah memcari pasangan titik yang jaraknya paling dekat yaitu dengan cara jika n = 2, maka jarak kedua titik dihitung langsung dengan rumus Euclidean. Setelah itu bagi menjadi dua bagian yaitu Pleft dan Pright, setiap bagian mempuny ai jumlah titik yang sama. Setelah kedua jarak tersebut mempunyai jarak yang sama, maka secara rekursif terapkan algoritma D dan C pada masing-masing bagian yang akan menghasilkan tiga kemungkinan jarak terdekat dari titk tersebut. Dan akhirnya jarak titik yang paling dekat terdapat pada Pleft.b. Convex HullPada penyelesaian masalah pencarian convex hull dengan menggunakan algoritma divide dan conquer, hal ini dapat dipandang sebagai generalisasi dari algoritma pengurutan merge sort. Permasalahan convex hull adalah sebuah permasalahan yang memiliki aplikasi terapan yang cukup banyak, seperti permasalahan terhadap grafika komputer, otomasi desain, pengenalan pola (pattern recognition), dan penelitian operasi. Algoritma divide dan conquer merupakan salah satu solusi dalam penyelesaian masalah convex hull. Algoritma ini ternyata memiliki kompleksitas waktu yang cukup kecil dan efektif dalam menyelesaikan permasalahan ini (jika dibandingkan algoritma lain). Selain itu juga, algoritma ini dapat di generalisasi untuk permasalahan convex hull yang berdimensi lebih dari tiga.c. Delaunay Triangulation3. Graph Theory yang terdiri dari :a. Travelling Salesman Problem (TSP)b. Graph Separator4. Numerical yang terdiri dari :a. Matrix Multiplicationb. Fast Fourier transform (FFT)5. Not Data Parallel yang terdiri dari :a. Naive Merge SortKeuntungan dan Kelemahan Metode Divide dan Conquer1. Berikut ini adalah beberapa keuntungan dengan menggunakan algoritma divide dan conquer.a. Dapat memecahkan permasalahan yang sulit (kompleks)Algoritma divide and conquer merupakan alat yang sangat berguna untuk memecahkan masalah yang kompleks, contohnya dalam permainan Menara Hanoi (Tower of Hanoi). Penyelesaian yang harus dilakukan adalah membagi menjadi beberapa bagian masalah dan mencari solusi yang tepat lalu dilakukan berulang kali (rekursif).b. EfisienDalam masalah pengurutan, algoritma divide and conquer dapat menjadi solusi yang baik untuk mengatasi efisiensi. Sebagai contoh, metoda quicksort dan mergesort memiliki dasar algoritma divide and conquer dan dikenal sebagaimetode pengurutan yang paling efesien. Efisiensi algoritma divide and conquer bernotasi O(n log n).c. ParalelPenggunaan algoritma divide and conquer sesuai untuk eksekusi pada mesin multi prosessor ,terutama pembagian sistem memori dimana sub-masalah dapat dijalankan pada prosessor yang berbeda.d. Akses MemoriPermasalahan yang diselesaikan dengan algoritma divide and conquer juga dapat berpengaruh dalam pengaksesan memori, dikarenakan masalah dibagi menjadi beberapa bagian dan setiap bagian diselesaikan dengan solusi yang sama maka dalam pengaksesan memori setiap sub-masalah diselesaikan cukup dengan mengakses cache memory yang tidak terlalu lambat.2. Berikut ini adalah kelemahan jika menggunakan algoritma divide dan conquera. Sering menggunakan rekursi yang menyebabkan overhead.b. Lebih rumit untuk masalah yang sederhanaUntuk pemecahan masalah yang relatif sederhana, algoritma sekuensial terbukti lebih mudah dibuat daripada algoritma divide and conquer. Hal ini disebabkan karena algoritma sekuensial tidak perlu melalui ketiga langkah yang dilakukan oleh divide and conquer. Salah satu contohnya ialah, untuk menambah n-banyak bilangan, perulangan sederhana akan lebih mudah dibuat daripada harus memecah n-bilangan tersebut.

Implementasi Divide and Conquer pada Merge Sort

Algoritma merge sort dirancang untuk memenuhi kebutuhan pengurutan jika data yang diurutkan berjumlah banyak, dan tidak memungkinkan untuk ditampung dalam memori komputer. Cara kerja atau konsep dari algoritma merge sort adalah menggunakan metode rekursif dan teknik divide and conquer.Misalnya kita memiliki array yang memiliki 5 buah elemen. Data tersebut nantinya akan diurutkan sesuai ascending (menaik). Variabel kiri pada program menandakan indeks elemen awal, sehingga kiri=0, dan kanan menandakan indeks elemen terakhir pada array, sehingga kanan=panjang elemen 1 = 5-1 = 4. Sehingga array memiliki range indeks antara 0 sampai dengan 4. Misalkan data yang dimasukkan adalah sebagai berikutIndeks ke-01234

Data961147

Baris ke-5 akan memeriksa apakah nilai variabel kiri < kanan. Variabel kiri bernilai 0 dan variabel kanan bernilai 4, sehingga pernyataan 0 < 4 bernilai benar. Karena benar maka akan dilakukan perintah pada baris ke-7

Dibentuk variabel baru yaitu variabel median. Nilai median didapat dari penghitungan (kanan + kiri)/2. Nilai kanan adalah 4 dan nilai kiri adalah 0, sehingga median = (4+0)/2 = 2.Perintah pada baris 8 dan 9 kemudian akan dilakukan. Perintah mergeSort(array, kiri, median) dan mergeSort(array, median + 1, kanan) akan melakukan rekursi terhadap dirinya sendiri hingga pernyataan kiri