Greedy
Metode Greedy
Definisi
Metode yang digunakan untuk memecahkan persoalan optimasi dengan pencarian
solusi optimum.
Ada 2 macam persoalan optimasi:
- Maksimasi
(maximization)
- Minimasi
(minimization)
- Solusi
optimum (terbaik) adalah solusi yang bernilai minimum atau maksimum dari
sekumpulan alternatif solusi yang mungkin.
- Prinsip greedy:
“take what you can get now!”.
Contoh Kasus algoritma Greedy
Misalkan tersedia koin : 1, 3, 5.
Uang senilai X=8 dapat di tukar dengan cara :
- 1+1+1+1+1+1+1+1
= 8 (8 koin)
- 1+1+1+1+1+3=8
(6 koin)
- 1+1+1+5=8
(4 koin)
- 1+1+3+3=8
(4 koin)
- 3+5=8
(2 koin)
- solusi optimal.
Maka solusi optimal dari kasus penukaran koin di
atas adalah 2 koin.
Metode Divide & Conquer
Algoritma 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
umum algoritma 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.
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
Penerapan Algoritma
2Pemecahan Masalah Convex Hull dengan
Algoritma Divide and Conquer
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:
sebagai generalisasi dari algoritma pengurutan merge sort. Berikut ini merupakan garis besar gambaran dari algoritmanya:
- Pertama-tama
lakukan pengurutan terhadap titik-titik dari himpunan S yang diberika
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 menjadi convex hull, H,
dengan menghitung da mencari upper dan lower tangents untuk HA dan HB
dengan mengabaikan semua titik yang berada diantara dua buah tangen ini.
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. Divide and Conquer adalah metode pemecahan masalah yang
bekerja dengan membagi masalah menjadi beberapa upa-masalah yang lebih kecil,
kemudian menyelesaikan masing-masing upa-masalah tersebut secara independent,
dan akhirnya menggabungkan solusi masing-masing upa-masalah sehingga menjadi
solusi dari masalah semula.
Algoritma Divide and 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 digeneralisasi untuk permasalahan convex hull yang berdimensi lebih
dari 3.
2.2. Persoalan Minimum dan Maksimum
(MinMaks)
Persoalan : Misalnya diketahui table A yang
berukuran n eleman sudah berisi nilai integer. Kita ingin menentukan nilai
minimum dan nilai maksimum sekaligus di dalam table tersebut. Misalkan tabel A
berisi elemen-elemen sebagai berikut :
Ukuran table hasil pembagian dapat dibuat cukup
kecil sehingga mencari minimum dan maksimum dapat diselesaikan (SOLVE) secara
lebih mudah. Dalam hal ini, ukuran kecil yang dipilih adalah 1 elemen atau 2
elemen.
Algoritma MinMaks :
1. Untuk kasus n = 1 atau n = 2,
SOLVE : Jika n = 1, maka min = maks = An. Jika n = 2, maka bandingkan kedua elemen untuk menentukan min dan maks.
SOLVE : Jika n = 1, maka min = maks = An. Jika n = 2, maka bandingkan kedua elemen untuk menentukan min dan maks.
2. Untuk kasus n > 2,
- DIVIDE
: Bagi dua table A secara rekursif menjadi dua bagian yang berukuran sama,
yaitu bagian kiri dan bagian kanan.
- CONQUER
: Terapkan algoritma Divide and Conquer untuk masing-masing bagian, dalam
hal ini min dan maks dari table bagian kiri dinyatakan dalam peubah min1
dan maks1, dan min dan maks dari table bagian kanan dinyatakan dalam
peubah min2 dan maks2.
- COMBINE
: Bandingkan min1 dan min2 untuk menentukan min table A, serta bandingkan
maks1 dan maks2 untuk menentukan maks table A.
2.3. Optimasi Konversi Bilangan Desimal
Ke Biner
Salah satu cara optimasi yang bias kita lakukan
adalah membagi bilangan decimal yang hendak diubah dengan angka 8 ( bukan 2 ).
Di sinilah prinsip algoritma Divide and Conquer kita gunakan untuk melakukan
optimasi. Kita pecah-pecah angka decimal yang akan kita gunakan dengan cara
membaginya dengan angka 8 secara berulang. Angka-angka sisa pembagian yang kita
peroleh kemudian kita ubah ke dalam bilangan biner sebelum kita gabungkan
menjadi hasil jawaban.
Karena angka pembagi yang kita pakai adalah 8 (23),
maka kita dapat mengurangijumlah pembagian yang kita lakukan menjadi ± 1/3 dari
jumlah semula. Hal ini tentu saja akan sangat berpengaruh pada kinerja dan
waktu yang diperlukan oleh computer mengingat proses pembagian merupakan salah
satu proses yang cukup rumit.
Tentu saja optimasi ini harus kita bayar dengan
menangani konversi bilangan octal ke biner. Akan tetapi jika kita gunakan
teknik perbandingan ( tanpa harus melakukan konversi secara manual ), maka
proses ini akan menjadi sangat cepat dan mudah. Penerapan algoritma ini adalah
dengan menggunakan sintaks case of. Begitu juga dengan permasalahan pemakaian
memori ( kompleksitas ruang ) yang lebih besar yang muncul akibat penggunaan
algoritma rekursif. Karena pada proses rekursif-nya kita tidak banyak menggunakan
variable yang memerlukan tempat yang begitu besar, maka hal ini bias kita
abaikan. Dengan penggunaan optimasi ini, maka seharusnya proses konversi akan
lebih cepat karena pemangkasan jumlah pembagian yang dilakukan.
Kompleksitas waktu algoritma :
T(n) = O(n/3)
dengan n menyatakan eksponen terkecil
dari 2 yang mempunyai nilai 2n lebuh besar dari angka decimal
Algoritma konversi system bilangan dengan
menggunakan algoritma dengan optimasi yang menerapkan algoritma Divide and
Conquer lebih mangkus daripada algoritma konversi dengan metode pembagian sisa
biasa jika dilihat dari segi kompleksitas waktunya. Hanya saja optimasi ini
diimbangi dengan kenaikan pada kompleksitas ruangnya, meskipun pengaruhnya
tidak sebesar optimasi yang kita lakukan.
2.4. Mencari Pasangan Titik yang
Jaraknya Terdekat ( Closest Pair )
Persoalan : Diberikan himpunan titik, P, yang
terdiri dari n buah titik, (xi,yi), pada bilangan 2-D. Tentukan jarak terdekat
antara dua buah titik di dalam himpunan P. Jarak dua buah titik p1 = (x1, y1)
dan p2 = (x2, y2) :
Penyelesaian dengan Algoritma Divide and
Conquer :
a. Asumsi : n = 2k dan titik-titik diurut
berdasarkan absis (x).
b. Algoritma Closest Pair :
– SOLVE : jika n = 2, maka jarak kedua titik
dihitung langsung dengan rumus Euclidean.
– DIVIDE : Bagi titik-titik itu ke dalam dua bagian,
PLeft dan PRight, setiap bagian mempunyai jumlah titik yang sama
– CONQUER :Secara rekursif, terapkan algoritma D-and-C
pada masingmasing bagian.
– Pasangan titik yang jaraknya terdekat ada tiga
kemungkinan letaknya :
- Pasangan
titik terdekat terdapat di bagian PLeft.
- Pasangan
titik terdekat terdapat di bagian PRight.
- Pasangan
titik terdekat dipisahkan oleh garis batas L, yaitu satu titik di PLeft
dan satu titik di PRight.
Jika kasusnya adalah (c), maka lakukan tahap COMBINE
untuk mendapatkan jarak dua titik terdekat sebagai solusi persoalan semula.

0 Komentar:
Posting Komentar
Berlangganan Posting Komentar [Atom]
<< Beranda