daa pertemuan 11

19
1 DESAIN & ANALISIS ALGORITMA PERTEMUAN 11 6/18/2008

Upload: cici-erza-safitri

Post on 08-Jul-2016

223 views

Category:

Documents


1 download

DESCRIPTION

daa

TRANSCRIPT

1

DESAIN & ANALISISALGORITMA

PERTEMUAN 116/18/2008

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

Metode Divide-and-Conquer(lanjutan)

3

6/18/2008

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)6

6/18/2008

7Pohon Rekursi dari algoritma Merge Sort

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