• Tidak ada hasil yang ditemukan

Rangkuman Materi Algoritma Divide and Conquer

N/A
N/A
Protected

Academic year: 2021

Membagikan "Rangkuman Materi Algoritma Divide and Conquer"

Copied!
6
0
0

Teks penuh

(1)

Rangkuman materi 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. - Divide: membagi masalah menjadi beberapa rupa‐masalah yang memiliki kemiripan

dengan masalah semula namun berukuran lebih kecil (idealnya berukuran berukuran hampir hampir sama) sama),

- Conquer: memecahkan (menyelesaikan) masing‐masing upa‐masalah (secara rekursif), dan

- Combine: mengabungkan solusi masing- masing rupa‐masalah sehingga membentuk solusi masalah semula.

- Obyek permasalahan yang dibagi:

 masukan(input) atau instances yang berukuran seperti:  tabel(larik),

 matriks,  eksponen,

 dll, 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 skemarekursif.

- Metode

Strategi Divide dan Conquer memecah masalah menjadi submasalah-submasalah independen yang lebih kecil sehingga solusi submasalah-submasalah dapat diperoleh secara mudah, solusi submasalah-submasalah digabung menjadi solusi seluruh masalah.

- Skema umum algoritma divide dan conquer Procedure DNC ( i,j : integer )

Var K : integer ;

(2)

Else begin

K : = DIVIDE (i,j)

COMBINE (DNC(i,k),DNC(k+1,j)) End if

Keterangan :

SMALL adalah fungsi yang mengirim BOOLEAN, menentukan apakah ukuran telah cukup kecil sehingga solusi dapat diperoleh. Ukuran dinyatakan sebagai telah berukuran kecil bergantung masalah.

DIVIDE adalah fungsi membagi menjadi 2 bagian pada posisi K. Biasanya bagian berukuran sama.

COMBINE adalah fungsi menggabungkan solusi X dan Y submasalah. Solusi diperoleh dengan memanggil prosedur rekursif DNC.

Jika ukuran kedua sub masalah sama, waktu komputasi DNC dideskripsikan hubungan rekuren berikut :

T(n) = g (n),n kecil 2 T (n/2) + f (n), Selainnya dimana :

 T(n) adalah waktu untuk DNC dengan n masukan,

 g(n) adalah waktu komputasi jawaban secara langsung untuk masukan kecil dan

 f(n) adalah waktu COMBINE.

- permasalahan convex hull adalah sebuah permasalahan yang memiliki aplikasi terapan yang cukup banyak, seperti pada permasalahan grafika komputer,otomasi desain, pengenalan pola (pattern recognition), dan penelitian operasi.

- 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 digeneralisasi untuk permasalahan convex hull yang berdimensi lebih dari 3.

- Pada penyelasaian masalah pencarian Convex Hull dengan menggunakan algoritma Divide and Conquer, hal ini dapat dipandang sebagai generalisasi dari algoritma pengurutan merge sort. Berikut ini merupakan garis besar gambaran dari algoritmanya:

(3)

 Pertama-tama lakukan pengurutan terhadap titik-titik dari himpunan S yang diberikan berdasarkan koordinat absis-X, dengan kompleksitas waktu O(n log n).

 Jika |S| ≤ 3, maka lakukan pencarian convex hull secara brute-force dengan kompleksitas waktu O(1). (Basis).

 jika tidak, partisi himpunan titik-titik pada S menjadi 2 buah himpunan A dan B,dimana A terdiri dari setengah jumlah dari |S| dan titik dengan koordinat absix - X yang terendah dan B terdiri dari setengah dari jumlah |S| dan titik dengan koordinat absis-X terbesar.

 Secara rekursif lakukan penghitungan terhadap HA = conv(A) dan HB = conv(B).

 Lakukan penggabungan (merge) terhadap kedua hull tersebut menjad convex hull, H, dengan menghitung da mencari upper dan lower4

 tangents untuk HA dan HB dengan mengabaikan semua titik yang berada diantara dua buah tangen in

- Penerapan Data-Parallel Divide and Conquer Algorithms  Sorting

 Quick Sort, Binary Sort  Computational Geometry

 Closest Pairs, Convex Hull, Delaunay Triangulation  Graph Theory

 Travelling Salesman Problem (TSP), Graph Separators  Numerical

 Matrix Multiplication, FFT  Not Data Parallel

 Naïve Merge Sort

- Binary Search (Pencarian Biner) dapat dilakukan jika data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus. Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :

 Mula-mula diambil posisi awal = 1 dan posisi akhir = N

(4)

 Data yang dicari dibandingkan dengan data tengah.

 Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.

 Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.

 Demikian seterusnya sampai data tengah sama dengan yang dicari.

- Berikut ini adalah contoh fungsi untuk mencari data menggunakan pencarian biner. Function BinarySearch (x: word) : integer;

Var l, r, m : word; ketemu : boolean; begin l : = 1; r : = N; ketemu : = false;

while (1 <= r ) and ( not ketemu ) do begin

m : = (1 + r ) div 2;i if (Data [m] = x ) then

Ketemu := true

else if (x < Data [m] ) then r : = m – 1 else l : = m + 1; end; if ( ketemu ) then BinarySearch : = m else BinarySearch : = -1; end;

(5)

Fungsi di atas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan, maka yang yang dikembalikan adalah –1.

Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu bila data yang dicari tepat berada di tengah-tengah. Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari dengan rumus logaritma, yaitu : C = ²log (N)

- Metode Quick Sort atau yang sering disebut juga metode partisi diperkenalkan pertama kali oleh C. A. R. Hoare pada tahun 1962. Pada metode quick, jarak dari kedua elemen yang ditukarkan dibuat cukup besar dengan tujuan untuk mempertinggi efektivitasnya. Hal ini mengingat metode gelembung yang menggunakan jarak cukup dekat ternyata kurang efektif.

Proses pengurutan dengan metode quick dapat dijelaskan sebagai berikut : mula-mula dipilih data tertentu yang dinamakan pivot, misalnya x. Pivot ini harus diletakkan pada posisi ke-j sedemikian hingga data antara 1 sampai dengan (j – 1) lebih kecil daripada x; sedangkan data pada posisi ke-(j+1) sampai dengan N lebih besar daripada x. Cara pengaturannya adalah menukarkan data di antara posisi 1 sampai dengan (j – 1) yang lebih besar daripada x dengan data di antara posisi (j + 1) sampai dengan N yang lebih kecil daripada x.

- Algoritma penyisipan langsung sendiri dapat dituliskan sebagai berikut:  x ← Data [( L + R) / 2)].

 i ← L  j ← R

 Selama ( i < = j ) kerjakan baris 5 sampai dengan 12.  Selama ( Data [ i ] < x ) kerjakan i ← i + 1  Selama ( Data [ j ] > x ) kerjakan i ← j - 1

 Jika (i < = j ) maka kerjakan baris 8 sampai dengan 10; jika tidak kerjakan baris 11.

 Tukar Data [ i ] dengan Data [ j ].  i ← i + 1

 j ← j - 1

 Jika ( L < j ) kerjakan lagi baris 1 dengan R = j.  Jika ( i < R ) kerjakan lagi baris 1 dengan L = i.

(6)

- Jika suatu barisan yang terdiri dari n elemen yang ditempatkan dalam suatu array dan urutan yang diinginkan adalah urutan yang tidak turun (non decreasing) maka dapat digunakan metode Quick Sort yang dengan teknik Divide and Conquer

- Adapun algoritma Quick Sort tersebut terdiri dari dua prosedur yaitu prosedur PARTITION dan prosedur QUICKSORT.

Referensi

Dokumen terkait