DANDC

44
DANDC wijanarto

description

DANDC. wijanarto. Why SORT. Banyak di pakai dalam aplikasi Database  binary sort Computer graphic dan komputasi geometri Closest pair dan keunikan suatu elemen. Algoritma. Insertion dan selection sort : worst case O(n 2 ) Heap sort (quick sort) : worst case O(n log n). - PowerPoint PPT Presentation

Transcript of DANDC

Page 1: DANDC

DANDC

wijanarto

Page 2: DANDC

Why SORT

• Banyak di pakai dalam aplikasi• Database binary sort• Computer graphic dan komputasi geometri• Closest pair dan keunikan suatu elemen

Page 3: DANDC

Algoritma

• Insertion dan selection sort : worst case O(n2)• Heap sort (quick sort) : worst case O(n log n)

Page 4: DANDC

DIVEDE AND CONQUER

• Divide– Bagi masalah asli menjadi dua atau lebih sub

problem yang unik• Conquer– Gunakan DANDC secara rekursif untuk

menyelesaikan subproblem• Combine– Ambil solusi dari subproblem dan merge solusi

tersebut ke dalam solusi untuk masalah aslinya

Page 5: DANDC

Merge sort

• Divide– Jika S memiliki setidaknya 2 elemen , pindahkan seluruh

elemen S dan letakan dalam 2 urutan S1 dan S2, tiap urutan mengandung setengah dari S• S1=n/2 elemen dan s2= sisanya n/2 elemen

• Conquer– SORT s1 dan s1 dengan merge sort

• Combine– Kembalikan elemen tadi ke S dengan menggabungkan

urutan yang telah di sort S1 dan S2 menjadi 1 urutan sort

Page 6: DANDC

Algoritma Merge Sort

Merge-Sort(A,p,r)If p<r then q(p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge (A,p,q,r)

Merge(A,p,q,r)Ambil 2 elemen teratas yang terkecil dari A[p..q]

Dan A[q+1..r], lalu letakan ke hasil pengurutan.Ulangi urutan (s1 dan s2) tersebut hingga kosong.Kopi hasil pengurutan ke dalam A[p..r]

P dan r adalahBagian dari array A, yaituLower bound dan upper bound

divide

conquer

combine

Page 7: DANDC

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

85 24 63 45 17 31 50 96

contoh

Page 8: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

85 24 63 45

17 31 50 96

Page 9: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 4585 24

85 24 63 45

17 31 50 96

Page 10: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 4585 24

85 24 63 45

85

17 31 50 96

Page 11: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45 24

85 24 63 45

85

17 31 50 96

Page 12: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 4585

85 24 63 45

24

17 31 50 96

Page 13: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 4524 85

63 45

17 31 50 96

Page 14: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

63 4524 85

17 31 50 96

Page 15: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

63 45

24 85

17 31 50 96

Page 16: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

45 63

24 85

17 31 50 96

Page 17: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

24 85 45 63

17 31 50 96

Page 18: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

24 45 63 85

17 31 50 96

Page 19: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

24 45 63 85

17 31 50 9624 45 63 85

Page 20: DANDC

Running algoritma

85 24 63 45 85 24 63 45 85 24 63 45 85 24 63 45

24 45 63 85

17 31 50 9624 45 63 85

Langkah selanjutnya sama dengan bagian pertama

Page 21: DANDC

Merging 2 seq array

S1

S2

S

24 45 63 85

17 31 50 96

S1

S2

S

24 45 63 85

31 50 96

a

b

17

Page 22: DANDC

Merging 2 seq array

S1

S2

S

45 63 85

31 50 96

c

17 24

S1

S2

S

45 63 85

50 96

d

17 24 31

Page 23: DANDC

Merging 2 seq array

S1

S2

S

63 85

50 96

e

17 24 31 45

S1

S2

S

63 85

96

f

17 24 31 45 50

Page 24: DANDC

Merging 2 seq array

S1

S2

S

85

96

g

17 24 31 45 50 63

S1

S2

S

96

h

17 24 31 45 50 63 85

Page 25: DANDC

Merging 2 seq arrayS1

S2

S 96

i

17 24 31 45 50 63 85

Page 26: DANDC

Merge revisi

1 5 2 4 4 3 2 6

1 5 2 4 4 3 2 6

1 5 2 4 4 3 2 6

1 5 2 4 4 3 2 6

1 5 2 4 4 3 2 6

1 2 4 5 2 3 4 6

1 2 2 3 4 4 6 6

•Untuk men-SORT sejumlah n• Jika n=1 selesai• Reccuren sort 2 list sejumlah

n/2 dan n/2 elemen• Merge 2 list tsb dlm O(n)

•Strategi• Pecah masalah mjd subproblem

yg mirip• Reccuren sub masalah• Combine solusi

split

split split

splitsplitsplitsplit

merge merge merge merge

mergemerge

merge

Input

output

1)()2/(2

1)1(

)(

nnnT

n

nT

Page 27: DANDC

C implementationvoid mergesort(int numbers[], int temp[], int array_size){

m_sort(numbers, temp, 0, array_size - 1);} void m_sort(int numbers[], int temp[], int left, int right){ int mid; if (right > left) { mid = (right + left) / 2; m_sort(numbers, temp, left, mid); m_sort(numbers, temp, mid+1, right); merge(numbers, temp, left, mid+1, right); }}

Page 28: DANDC

C implementationvoid merge(int numbers[], int temp[], int left, int mid, int right){ int i, left_end, num_elements, tmp_pos; left_end = mid - 1; tmp_pos = left; num_elements = right - left + 1; while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) { temp[tmp_pos] = numbers[left]; tmp_pos = tmp_pos + 1; left = left +1; } else

Page 29: DANDC

C implementation{temp[tmp_pos] = numbers[mid]; tmp_pos = tmp_pos + 1; mid = mid + 1; } } while (left <= left_end) { temp[tmp_pos] = numbers[left]; left = left + 1; tmp_pos = tmp_pos + 1; } while (mid <= right) { temp[tmp_pos] = numbers[mid]; mid = mid + 1; tmp_pos = tmp_pos + 1; } for (i=0; i <= num_elements; i++) { numbers[right] = temp[right]; right = right – 1; }}

Page 30: DANDC

Quick Sort

• Karakteristik– Sort dalam satu “tempat”, tidak perlu array

tambahan– Sangat praktis, avarage case O(n log n), worst case

O (n2)

Page 31: DANDC

Prinsip Quick Sort

• Melihat deskripsi high level algorithm• DANDC– Divide• Partisi array mjd 2 sub array s.r.s dalam bagian lower <=

bagian higher

– Conquer• Sort Recursive 2 sub array tadi

– Combine• Sort selesai di “tempat” tadi

Page 32: DANDC

Partitioning (pembagian)wt=linear

Partition(A,p,r) /*p & r batas array A*/

xA[p]ip-1jr+1

While TRUEREPEAT jj-1UNTIL A[j]>= xREPEAT ii+1UNTIL A[i]<= x and i<=r

if i>=j break;Tukar(A[i],A[j])

Tukar(A[p],A[j])Return j

17 12 6 19 23 8 5 10i j

p r

10 12 6 19 23 8 5 17jx=10 i

10 5 6 19 23 8 12 17ji

10 5 6 8 23 19 12 17j i

Mengembalikan posisi partisi dari array A

Page 33: DANDC

Algoritma Quick Sort

• Pemanggilan Quicksort(A,1,pjg[A])Quicksort(A,p,r)

if p<rthen qPartition(A,p,r) Quicksort(A,p,q-1) Quicksort(A,q+1,r)

Partisi array A antara p dan r

Page 34: DANDC

Analisa Quicksort

• Asumsikan semua elemen berbeda• Running time tergantung dari distribusi

spliting array• Spliting partisi perlu waktu )()2/(2)( nnTnT

Page 35: DANDC

Best casen

n/2 n/2

n/4 n/4 n/4 n/4

n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8lg n

1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1

n

n

n

n

n

(n lg n)

)()2/(2)( nnTnT

Running time tree adalah lg n, jadi total waktu tempuhnya adalah n lg n,Karena setiap level pada tree adalah n,

Worst case = (n2)

Page 36: DANDC

Randomize Quicksort

• Asumsi semua elemen berbeda• Partisi di pilih secara random dalam elemen• Konsekuensinya semua split (1:n-1,1:n-2,…,

n-1:1) mirip dengan probabilitas 1/n• Randomisasi merupakan alat generalisasi

untuk meningkatkan algoritma dengan worst case yang jelek tetapi bagus untuk avarage case

Page 37: DANDC

Randomize Quicksort

RandomizePartition(A,p,r)iRandom(p,r)//generate angka

//random antara p dan rTukar(A[r],A[i])return Partition(A,p,r)

RandomizeQS(A,p,r)if p<r then

qRandomizePartition(A,p,r)RandomizeQS(A,p,r)RandomizeQS(A,q+1,r)

Page 38: DANDC

Analisis Randomize Quicksort

• Misal T(n), adalah waktu yang di butuhkan dalam perbandingan dalam quicksort sejumlah n

• Karena split butuh probabilitas 1/n, maka T(n) bernilai = T(i-1)+T(n-i)+n-1, jadi

• Sehingga dg solving recc mjd O(n log n)

1

0

1)(2

)(n

j

njTn

nT

Page 39: DANDC

Analisis Randomize Quicksort

• Worstcase =O(n2)• Bestcase=O(n log n)• Expected running time quicksort O(n log n)

Page 40: DANDC

Searching

• Binary search• Interpolasi search

Page 41: DANDC

Binary Search

• t[1..n] data tersortir menaik, t[i]t[j], dimana 1 i j n.

• X adalah elemen yang di cari dalam t, jika x tidak ada dalam t, maka kita dapat menyisipkannya ke t.

• Problem : mencari index I sedemikian rupa sehingga 1 i j n dan t[i-1]< x t[i]

Page 42: DANDC

Binary Search dengan DANDCBinsearch (t[1..n],x) { if n==0 and x> t[n] then return n+1 else return Binrecc(t[1..n],x)}

Binrecc (t[1..n],x) { /*mencari x dalam array t*/ /*untuk t[i-1]<x t[j]*/ if i=j then return i k(i+j)\2 if x t[k] then return Binrecc(t[1..k],x) else return Binrecc(t[k+1..j],x)}

Page 43: DANDC

Binary Search dengan DANDC

• Mencari x=12 dalam array t

-5 -2 0 3 8 8 9 12 12 26 31

1 2 3 4 5 6 7 8 9 10 11

i k j

x t[k] ?

T

Y

Y

T

i=j berhenti

i k j

i k j

ik j

i j

Binrecc (t[1..n],x) {if i=j then return i k(i+j)\2 if x t[k] then return Binrecc(t[1..k],x) else return Binrecc(t[k+1..j],x)}

Page 44: DANDC

Interpolasi Search

)(*)()(

)(_ij

itjt

itsizetik