daa pertemuan 11
DESCRIPTION
daaTRANSCRIPT
2. Metode Divide-and-Conquer2
Merupakan salah satu metode desain yang terbaik.
Ingat politik penjajahan Belanda: devide et impera (bagilahdan kuasailah)
Cara kerja algoritma divide-and-conquer:
Permasalahan dibagi ke dalam beberapa sub-
6/18/2008
Permasalahan dibagi ke dalam beberapa sub-permasalahan kecil yang berukuran sama
Selesaikan sub-permasalahan tersebut, biasanya denganmenggunakan metode rekursif.
Jika diperlukan, solusi yang didapat dari sub-permasalahan2 tersebut digabungkan untuk mendapatkansolusi dari permasalahan awal
2.1. Algoritma Mergesort
Merge sort adalah salah satu metode sorting yangmenggunakan pendekatan divide-and-conqueryang memiliki prosedur sebagai berikut:
Divide: Membagi n elemen yang akan disorting
4
Divide: Membagi n elemen yang akan disortingmenjadi 2 bagian, masing-masing berisi n/2 elemen.
Conquer: Mengurutkan kedua bagian tersebut secararekursif dengan merge sort
Combine: Menggabungkan kedua bagian yang sudahterurut menjadi 1 bagian yang utuh kembali.
6/18/2008
Algoritma Mergesort (lanjutan)
MERGE-SORT(A, p, r)
if p < r
then
MERGE-SORT(A, p, q)
MERGE-SORT(A, q + 1, r)
MERGE(A, p, q, r)
n1 ← q - p + 1
n2 ← r - q
buat array L[1 … n1 + 1] dan R[1 … n2 + 1]
for i ← 1 to n1
do L[i] ← A[p + i - 1]
5
2/)( rpq
MERGE(A, p, q, r) for j ← 1 to n2
do R[j] ← A[q + j]
L[n1 + 1] ← ∞
R[n2 + 1] ← ∞
i ← 1; j ← 1
for k ← p to r
do if L[i] ≤ R[j]
then A[k] ← L[i]
i ← i + 1
else A[k] ← R[j]
j ← j + 1
Algoritma Mergesort (lanjutan)
Bagian (a) menunjukkan T(n) yang diekspand ke bagian (b) denganmenggunakan pohon rekursi. cn adalah root (biaya pada levelteratas dari rekursi) dengan dua sub-pohon T(n/2) dibawahnya.Bagian (c) mengekspand bagian (b) dengan biaya untuk tiap nodepada level kedua adalah cn/2. Bagian (d) menunjukkan pohonrekursi yang diekspand sampai pada level terbawah, dengan biaya
8
rekursi yang diekspand sampai pada level terbawah, dengan biayauntuk tiap node adalah c sehingga totalnya adalah cn.
Total biaya untuk fungsi rekursi pada gambar di atas adalah jumlahbiaya dari semua level. Karena ada lg n + 1 level, masing-masingmemiliki biaya cn, maka total biaya =
Dengan mengabaikan koefisien yang lebih rendah sertamenghilangkan konstanta c, maka waktu runningnya adalah
6/18/2008
cnncnncn lg)1(lg
)lg( nn
2.2. Quick Sort
Quick sort membagi elemen input berdasarkannilainya.
Quick sort memilih sebuah posisi elemen pivot tertentudan membagi array menjadi 2 bagian:
9
dan membagi array menjadi 2 bagian:
Bagian yang lebih kecil/sama dengan elemen pivot
Bagian yang lebih besar dari elemen pivot
Misal: elemen yang dipilih pada array A adalah A[s],maka quick sort akan membagi array seperti berikut:
A[0] … A[s-1] A[s] A[s+1] … A[n-1]
semuanya ≤ A[s] semuanya ≥ A[s]6/18/2008
Quick Sort (lanjutan)
Algoritmanya adalah sebagai berikut:
ALGORITHM QuickSort(A[p…r]
//Input: Sub-array A[p…r] dari A[0…n-1], dimana p adalah
//indeks kiri dan r adalah indeks kanan
10
//indeks kiri dan r adalah indeks kanan
//Output: Sub-array A[p…r] yang terurut secara increasing
if p < r
q partisi(A[p…r]) //q adalah posisi pivot
QuickSort(A[p…q-1])
QuickSort(A[q+1…r])
6/18/2008
Quick Sort (lanjutan)
ALGORITHM partisi(A[p…r])
//Mempartisi sub-array dengan menggunakan elemen pertama sebagai pivot
//Input: Sub-array A[p…r] dari A[0…n-1] dimana p dan r
//masing2 adalah indeks kiri dan kanan (p < r)
//Output: partisi A[p…r] dengan return valuenya adalah posisi pivot
s A[p]
11
i s; j r+1
repeat
repeat i i + 1 until A[i] ≥ s
repeat j j + 1 until A[j] ≤ s
swap(A[i], A[j])
until i ≥ j
swap (A[i], A[j]) //batalkan/undo swap ketika i ≥ j
swap (A[p], A[j])
return j
6/18/2008
Quick Sort (lanjutan)
Best Case: terjadi ketika semua proses split(penentuan titik pivot) terjadi di tengah2 array,sehingga: Cbest(n) = 2Cbest(n/2) +n
Cbest(n) = n log2n
12
Cbest(n) = n log2n
Worst Case: terjadi ketika semua proses splitmenghasilkan 2 array, dimana salah satu arraymerupakan array kosong, dan array yang lainberisi 1 elemen lebih sedikit dari array yangdipartisi, sehingga: Cworst(n) = (n+1)(n+2)/2-3 (n2)
6/18/2008
2.3. Binary Search
Metode pencarian Binary Search merupakanmetode yang sangat efisien untuk mencari sebuahelemen pada array yang sudah terurut.
Cara kerjanya adalah membandingkan elemen
13
Cara kerjanya adalah membandingkan elemenyang dicari K dengan elemen tengah pada arrayA[m]. Jika cocok, maka algoritma berhenti; jikatidak, maka operasi dilakukan secara rekursif untukseparuh array awal jika K < A[m], atau padaseparuh array akhir jika K > A[m].
6/18/2008
Binary Search (lanjutan)
Contoh: Lakukan pencarian K=70 pada arrayterurut berikut:
Jawab:
14
Jawab:
L = LEFT (Batas kiri) R = RIGHT (batas kanan)
M = MIDDLE (batas tengah)
6/18/2008
Binary Search (lanjutan)
Walaupun Binary Search didasarkan pada konsep rekursif,tapi ia dapat diimplementasikan dengan algoritma non-rekursif:
ALGORITHM BinarySearch(A[0…n-1], K)
//Input: array A[0…n-1] yang sudah terurut menaik dan elemen yang dicari K
15
//Output: indeks pada array A yang cocok dengan K atau -1
//jika elemen tidak ditemukan
L 0; R n-1
while L ≤ R do
M
if K = A[M] return M
else if K < A[M] R M – 1
else L M + 1
return -1
6/18/2008
2/)( RL
2.4. Closest-Pair Problem denganDivide-and-Conquer
Closest-Pair Problem
Misal P1=(x1, y1), P2=(x2, y2), …, Pn=(xn, yn) adalah anggotatitik2 pada himpunan S pada sebuah bidang, dimana n adalahbilangan 2k (untuk menyederhanakan permasalahan).
Asumsikan titik2 tsb sudah terurut secara ascending berdasarkan
16
Asumsikan titik tsb sudah terurut secara ascending berdasarkankoordinat x-nya.
Kita dapat membagi titik2 tsb menjadi 2 sub-himpunan S1 dan S2
(masing2 terdiri atas n/2 titik) dengan menggambar sebuahgaris vertikal (x=c), sehingga n/2 titik ada di sisi kiri garistersebut, dan n/2 titik ada di sisi kanannya. (nilai c dapatdihitung dari median/nilai tengah dari koordinat2 x)
6/18/2008
Closest-Pair (lanjutan)
Dengan pendekatan divide-and-conquer, dapat dicari closest-pair padaS1 dan S2. Misal dLMin dan dRMin adalahjarak terdekat antara 2 titik pada S1
dan S2, masing-masing, dan d =min(dLMin, dRMin).
17
min(dLMin, dRMin).
Sayangnya, d belum tentu merupakanjarak terdekat antara 2 titik padabidang secara keseluruhan, karenamasih ada kemungkinan closest-pairnyaadalah 2 titik yang berada pada sisikiri & kanan garis pemisah (memotonggaris) dLRMin.
6/18/2008
Closest-Pair (lanjutan)
Sehingga, langkah combine-nya adalah dengan memeriksatitik2 tsb. Kita dapatmembatasi daerahpemeriksaan hanya pada
18
pemeriksaan hanya padatitik2 yang berada di jarak2d, dengan garis pemisahsebagai sumbu simetrinya.
6/18/2008
Closest-Pair (lanjutan)
Misal C1 dan C2 adalah himpunantitik pada sisi kiri dan kanan garispemisah. Untuk setiap titik P(x, y)pada C1, periksa titik2 pada C2
yang mungkin lebih dekat ke P
19
yang mungkin lebih dekat ke Pdaripada d
Ada tidak lebih dari 6 titik yangperlu diperiksa.
Maka jarak terpendek antara 2 titikadalah yg paling minimum antaradLMin , dRMin , dan dLRMin
6/18/2008