Académique Documents
Professionnel Documents
Culture Documents
Abstrak - Tulisan ini memberikan gambaran tentang implementasi algoritma divide and
conquer untuk penyelesaian masalah convex hull. Dengan algoritma divide and conquer
masalah convex hull dapat diselesaikan dengan kompleksitas yang cukup rendah yaitu
sebesar O(n log n).
Pendahuluan
Segala bentuk dan wujud yang ada di sekitar manusia didefinisikan ke dalam geometri.
Permasalahan geometri komputasional biasanya melingkupi objek-objek geometri seperti
himpunan titik, himpunan garis, himpunan segmen, dan juga poligon. Permasalahan yang
berkaitan dengan penentuan bentuk geometri dapat diselesaikan dengan menggunakan
algoritma pencarian convex hull.
Usaha pencarian algoritma yang efisien untuk pencarian convex hull sudah dilakukan
sejak lama dan masih dilakukan sampai sekarang. Satu dari berbagai algoritma yang dapat
dimanfaatkan dalam pencarian convex hull adalah divide and conquer. Divide and Conquer
adalah metode pemecahan masalah yang bekerja dengan membagi masalah menjadi beberapa
submasalah yang lebih kecil, kemudian menyelesaikan masing-masing submasalah tersebut
secara independen, dan akhirnya menggabungkan solusi masing-masing submasalah sehingga
menjadi solusi dari masalah semula (Noorzaman, 2007). Tulisan ini memberikan gambaran
tentang implementasi algoritma divide and conquer untuk penyelesaian masalah convex hull.
Convex Hull
Menurut Novandi (2007), sebuah subset S dari bidang R disebut konveks jika dan
hanya jika pada seluruh dua buah titik sembarang p, q є S dibentuk garis yang seluruhnya
berada dalam S[1].
Pencarian convex hull dari sebuah himpunan titik Q (CH(Q)) adalah mencari sebuah
convex set terkecil yang memuat seluruh titik pada Q. Convex hull dari dari sebuah himpunan
titik Q (CH(Q)) pada n dimensi adalah seluruh irisan dari semua convex set yang
0|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
mengandung Q. Lebih lanjut, untuk N buah titik p1, p2, ... pN. convex hull merupakan
himpunan convex combination yang dinyatakan dengan:
Definisi lain dari convex hull adalah poligon yang disusun dari subset titik sedemikian
sehingga tidak ada titik dari himpunan awal yang berada di luar poligon tersebut (semua titik
berada di batas luar atau di dalam area yang dilingkupi oleh poligon tersebut).
Petunjuk untuk menyelesaikan persoalan ini adalah persamaan garis pada bidang.
Persamaan garis pada bidang memisahkan bidang menjadi dua bagian yaitu area di sebelah
kanan bidang (relatif terhadap orientasi garis). Sebagai contoh garis berorientasi adalah
sumbu koordinat. Misalkan saja sumbu vertikal (ordinat, arah orientasi ke atas), seluruh titik
di sebelah kanan garis ini memiliki nilai komponen koordinat horizontal (X) yang positif
sedangkan seluruh titik di sebelah kiri garis memiliki nilai komponen koordinat horizontal
negatif.
Petunjuk di atas dimanfaatkan dengan membuat definisi bahwa garis yang dibentuk
oleh titik-titik poligon jika diasumsikan memiliki orientasi yang sama, maka setiap titik
berada di sebelah kanan seluruh garis batas tersebut. Definisi ini kemudian dimanfaatkan
untuk menentukan aksi awal yaitu memilih titik yang berada paling luar pertama. Mencari
titik pertama cukup mudah yaitu cukup memilih titik yang memiliki nilai komponen
koordinat (horizontal atau vertikal) yang ekstrim (minimum atau maksimum). Titik-titik
convex hull lainnya ditentukan berdasarkan titik pertama tadi.
1|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
Algoritma divide and conquer adalah metode pemecahan masalah dengan membagi
masalah ke menjadi submasalah yang lebih kecil, memecahkan setiap submasalah secara
rekursif dan menggabungkan hasil yang sesuai untuk sebuah solusi lengkap.
Pada algoritma divide and conquer ini memiliki tiga proses utama yaitu:
- Divide: membagi masalah menjadi beberapa submasalah yang memiliki kemiripan
dengan masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama),
- Conquer: memecahkan (menyelesaikan) masing-masing submasalah (secara rekursif),
dan
- Combine: mengabungkan solusi masing-masing submasalah sehingga membentuk solusi
masalah semula.
Objek masalah yang dibagi adalah masukan (input) atau instances yang berukuran n:
tabel, matriks, dan sebagainya, bergantung pada masalahnya. Tiap-tiap submasalah
mempunyai karakteristik yang sama dengan karakteristik masalah semula, 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.
Penggunaan secara spesifik algoritma ini 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. Secara umum, algoritma divide and
conquer memiliki skema sebagai berikut:
procedure DIVIDE_and_CONQUER(input n : integer)
{ Menyelesaikan masalah dengan algoritma divide and conquer
Masukan: masukan yang berukuran n
Keluaran: solusi dari masalah semula
}
Deklarasi
r, k : integer
Algoritma
if n ≤ n0 then {ukuran masalah sudah cukup kecil }
SOLVE submasalah yang berukuran n ini
else
Bagi menjadi r submasalah, masingmasing berukuran n/k
for masing-masing dari r submasalah do
DIVIDE_and_CONQUER(n/k)
endfor
COMBINE solusi dari r submasalah menjadi solusi masalah semula
endif
2|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
Untuk mencari upper hull dan lower hull dapat digunakan algoritma sebagai berikut:
Algorithm UpperHull(P)
if |P| 2 then return the obvious answer
else begin
Compute the median xmed of x-coordinates of points in P.
3|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
Partition P into two sets L and R each of size about n/2 around the median xmed .
Find the upper bridge pq of L and R, p L, and q R
L { r L x(r) x(p) }
R { r R x(r) x(q) }
LUH UpperHull(L )
RUH UpperHull(R )
return the concatenated list LUH, pq, RUH as the upper hull of P.
end
Waktu yang diperlukan untuk menjalankan algoritma tersebut dapat dijelaskan dengan relasi
rekursi sebagai berikut:
Kesimpulan
Grafika komputer, otomasi desain, pengenalan pola (pattern recognition), dan
penelitian operasi merupakan contoh aplikasi terapan yang menggunakan permasalahan
convex hull untuk mencari suatu solusi yang dapat diolah menggunakan aplikasi komputer.
Algoritma divide and conquer adalah metode pemecahan masalah dengan membagi
masalah ke menjadi submasalah yang lebih kecil, memecahkan setiap submasalah secara
rekursif dan menggabungkan hasil yang sesuai untuk sebuah solusi lengkap. Algoritma divide
and conquer merupakan salah satu algoritma yang dapat memecahkan masalah convex hull
dengan kompleksitas yang cukup rendah yaitu sebesar O(n log n).
Daftar Pustaka
http://pagesperso-orange.fr/colin.barker/lpa/div_conq.htm Diakses pada tanggal 23
Nopember 2009 Pukul 23.00.
http://www.cse.unsw.edu.au/ Diakses pada tanggal 17 Nopember 2009 Pukul 12.00.
J. O'Rourke. Computational Geometry in C (2nd ed.). Cambridge University Press, 1998
M. C. Timothy. A Minimalist's Implementation of the 3-d Divide-and-Conquer Convex Hull
Algorithm. School of Computer Science, University of Waterloo, Canada. 2003.
N. Stefan and Daniel Schmitt. A Framework for Multi-Core Implementations of Divide and
Conquer Algorithms and its Application to the Convex Hull Problem. Department of
Computer Science, University of Trier, Germany. 2008.
Noorzaman Geri. Analisis dan Penerapan Algoritma Divide and Conquer Dalam
Penyelesaian Masalah Convex Hulls. Jurusan Informatika, Sekolah Teknik Elektro dan
Informatika Institut Teknologi Bandung. 2007.
Novandi Petra. Analisis Kompleksitas Algoritma Pencarian Convex Hull Pada Bidang Planar.
Program Studi Teknik Informatika, Institut Teknologi Bandung. 2007.
4|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
Lampiran
/*
* Convex Hull
* The convex hull of a set of points is the smallest convex region
* containing the points
*/
5|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
/*
* Union of disjoint convex hulls
*/
/* Given P1, find Q2, the first point in Qs s.t. P1-Q2 is a tangent for Qs.
*/
/* If P2 is strictly to the right of P1-Q2, return P1-Q2.
*/
/* Given Q2, find P2, the first point in Ps s.t. P2-Q2 is a tangent for Ps.
*/
/* If Q3 is strictly to the right of P2-Q2, return P2-Q2.
*/
/* union(Ps, Qs, Rs) is true if Ps and Qs are disjoint convex hulls, all
*/
/* vertices of Ps being to the left of all the vertices of Qs, and Rs is
*/
/* the convex hull of the union of the vertices of Ps and Qs. For each
*/
/* convex hull, the vertices are in the form p(X,Y), in clockwise order,
*/
/* starting and ending at the smallest point (as determined by X-values,
*/
/* and by Y-values to resolve ties), and no three vertices are collinear.
*/
/* This is a O(n) time algorithm.
*/
/* This may not work for some degenerate convex hulls, but should work in
*/
/* all cases when called by divide_and_conquer_1/4.
*/
6|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
/* e.g. union([p(0,1),p(1,3),p(2,3),p(3,0),p(0,1)],
*/
/* [p(4,0),p(4,1),p(5,2),p(7,2),p(4,0)],
*/
/* [p(0,1),p(1,3),p(2,3),p(7,2),p(4,0),p(3,0),p(0,1)]).
*/
union(Ps, Qs, Rs):-
split_left_hull(Ps, [], Ps1, Ps2),
split_right_hull(Qs, Qs2),
bridge(Ps1, Qs, A, B, Qs3),
bridge(Qs2, Ps2, C, D, Ps3),
concatenate([B|Qs3], C, [D|Ps3], Rs0),
concatenate(Ps, A, Rs0, Rs).
7|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
/* leftmost point, Qs are the vertices of the right convex hull starting
*/
/* and ending at the leftmost point going clockwise, the line from P (a
*/
/* point in Ps) to Q (a point in Qs) is a left tangent for the convex
*/
/* hulls, and Qs1 are the points following Q in Qs.
*/
/* e.g. bridge([p(3,0),p(2,3),p(1,3),p(0,1)],
*/
/* [p(4,0),p(4,1),p(5,2),p(7,2),p(4,0)],
*/
/* p(2,3), p(7,2), [p(4,0)]).
*/
bridge(Ps, Qs, P, Q, Qs1):-
Ps=[P1|_],
tangent_to_right_hull(Qs, P1, Qs0),
bridge_1(Ps, Qs0, P, Q, Qs1).
8|Page
Implementasi Algoritma Divide and Conquer Untuk Penyelesaian 2009
Masalah Convex Hull
9|Page