divide dan conquer

33
Divide & Conquer Achmad Imam Kistijantoro Pelatihan TOKI II 2007

Upload: dori-satria

Post on 06-Dec-2015

271 views

Category:

Documents


20 download

DESCRIPTION

Divide Dan Conquer

TRANSCRIPT

Page 1: Divide Dan Conquer

Divide & Conquer

Achmad Imam KistijantoroPelatihan TOKI II 2007

Page 2: Divide Dan Conquer

Divide & conquer

• Strategi menyelesaikan masalah dengan memecah masalah menjadi masalah yang lebih kecil– perang: lebih mudah mengalahkan 2 pasukan dengan

ukuran lebih kecil dibandingkan 1 pasukan utuh• Masalah yang lebih kecil memiliki bentuk serupa

dengan masalah asal, sehingga alamiah untuk menggunakan skema rekursif

• Divide & conquer dapat menghasilkan algoritma yang efisien

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

2

Page 3: Divide Dan Conquer

Tahapan

• jika ukuran cukup kecil: Solve.• Divide: membagi masalah menjadi masalah

serupa dengan ukuran yang lebih kecil. – Sub masalah yang terbentuk dapat memiliki ukuran

yang sama, atau berbeda (partisi)• Conquer: menyelesaikan masalah dengan

ukuran kecil• Combine: menggabungkan solusi

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

3

Page 4: Divide Dan Conquer

algoritma dasar

DIVIDE_and_CONQUER

if n ≤ n0 // ukuran masalah bisa diselesaikanSOLVE

else Bagi menjadi a subproblem berukuran n/b for setiap a subproblem do

DIVIDE_and_CONQUER(n/b) endfor COMBINE solusi dari a subproblem

endif

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

4

Page 5: Divide Dan Conquer

Kompleksitas

• jika kompleksitas untuk divide & combine adalah O(nd)

• untuk k=2 dan r=2 dan f(n) = n (yaitu d=1)

)log()( nnnT

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

5

Θ=

⎪⎩

⎪⎨

>

=

Θ

Θ≤Θ

=d

d

a

d

dd

baba

n

nnban

nTb ,

,)(

)log( ,)(

)(log

Page 6: Divide Dan Conquer

strategi

• bagaimana memecah/mempartisi sebuah masalah: solusi untuk masalah dengan ukuran lebih kecil dapat digunakan untuk masalah yang lebih besar

• bagaimana kompleksitas proses partisi dan penggabungan

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

6

Page 7: Divide Dan Conquer

Studi kasus

• mergesort• quicksort• binary search• matrix multiplication• large integer multiplication• closest pair• convex-hull

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

7

Page 8: Divide Dan Conquer

Mergesort

• mengurutkan sederetan bilangan dengan jumlah bilangan N, dengan strategi membagi deretan bilangan menjadi beberapa sub bagian, dan menggabungkan hasilnya menjadi satu secara berurut

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

8

Page 9: Divide Dan Conquer

Mergesort

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

9

8 3 2 9 7 1 5 4

8 3 2 9 7 1 5 4

8 3 2 9 7 1 5 4

8 3 2 9 7 1 5 4

3 8 2 9 1 7 4 5

2 3 8 9 1 4 5 7

1 2 3 4 5 7 8 9

Page 10: Divide Dan Conquer

Mergesort

MergeSort(A[0..n-1])if n > 1

copy A[0..floor(n/2)-1] to B[0..floor(n/2)-1]copy A[floor(n/2)..n-1] to C[0..ceil(n/2)-1] MergeSort(B[0..floor(n/2)-1])MergeSort(C[0..ceil(n/2)-1])Merge(B, C, A)

endif

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

10

Page 11: Divide Dan Conquer

Mergesort

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

11

Merge (B[0..p-1], C[0..q-1], A[0..p+q-1])i = 0, j = 0, k = 0while i < p and j < q

if B[i] ≤ C[j]A[k] = B[i]; i = i+1

elseA[k] = C[j]; j = j+1

k = k + 1if i == p

copy C[j..q-1] to A[k..p+q-1]else copy B[i..p-1] to A[k..p+q-1]

Page 12: Divide Dan Conquer

Quicksort

• serupa dengan mergesort, namun deretan bilangan dibagi berdasarkan nilai pivot tertentu

A[0]...A[s-1] A[s] A[s+1]..A[n-1]

semua ≤ A[s] semua ≥ A[s]

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

12

Page 13: Divide Dan Conquer

Quicksort

Quicksort(A[l..r])if l < r

s = Partisi(A[l..r])Quicksort(A[l..s-1])Quicksort(A[s+1..r])

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

13

Page 14: Divide Dan Conquer

Quicksort

Partisi(A[l..r])p = A[l]i = l; j = r+1repeat

repeat i = i+1 until A[i] ≥ prepeat j = j-1 until A[j] ≤ pswap(A[i], A[j])

until i ≥ jswap(A[i], A[j])swap(A[l], A[j])return j

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

14

Page 15: Divide Dan Conquer

Quicksort

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

15

5 3 1 9 8 2 4 7

i j

Page 16: Divide Dan Conquer

Binary search

• algoritma pencarian yang efisien untuk data terurut

• mencari sebuah elemen dengan membandingkan nilai yang ditengah, dan melanjutkan pencarian secara rekursif pada sub-deret yang sesuai

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

16

Page 17: Divide Dan Conquer

Perkalian integer besar

• bagaimana melakukan perkalian dua buah n digit integer untuk n berukuran besar?

• ide: perkalian 2 digit:– (a1x101+a0) x (b1x101+b0) = c2 x 102 + c1 x 101 + c2

– c2 = a1 x b1

– c1 = a1 x b0 + a0 x b1

= (a1+a0) x (b1+b0) – ( c2+c0)

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

17

Page 18: Divide Dan Conquer

Perkalian integer besar

• untuk perkalian n digit, dapat dinyatakan sebagai – (a1x10n/2+a0) x (b1x10n/2+b0) = c2 x10n + c1x10nn/2 + c2

– c2 = a1 x b1

– c1 = a1 x b0 + a0 x b1

= (a1+a0) x (b1+b0) – ( c2+c0)

M(n) = 3 M(n/2)M(2k)= 3 M(2k-1)M(n) = 3log2n = nlog23 = n1.585

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

18

Page 19: Divide Dan Conquer

Perkalian matriks

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

19

⎥⎦

⎤⎢⎣

⎡=⎥

⎤⎢⎣

⎡×⎥⎦

⎤⎢⎣

⎡22211211

22211211

22211211

CCCC

BBBB

AAAA

C11 = A11xB11+A12xB21C12= A11xB12+A12xB22C21= A21xB11+A22xB21C22=A21xB12+A22xB22

Page 20: Divide Dan Conquer

Perkalian matriks strassen

• metode strassen dapat digunakan untuk mengurangi jumlah perkalian

• C11=m1+m4-m5+m7 C12=m3+m5• C21=m2+m4 C22=m1+m3-m2+m6• m1=(A11+A22)x(B11+B22) m2=(A21+A22)xB11• m3=A11x(B12-B22) m4=A22x(B21-B11)• m5=(A11+A12)xB22 m6=(A21-A11)x(B11+B12)• m7=(A12-A22)x(B21+B22)

⎥⎦

⎤⎢⎣

⎡=⎥

⎤⎢⎣

⎡×⎥⎦

⎤⎢⎣

⎡22211211

22211211

22211211

CCCC

BBBB

AAAA

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

20

Page 21: Divide Dan Conquer

Closest pair

• Diberikan P1=(x1, y1)...Pn=(xn, yn) sebagai sekumpulan titik pada bidang datar. Temukan dua buah titik yang memiliki jarak terdekat

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

21

Page 22: Divide Dan Conquer

Closest pair

• solusi: kelompokkan titik2 tsb menjadi 2 bagian dengan menggunakan garis pemisah (vertikal/horisontal), cari 2 buah titik terdekat pada masing2 bagian, bandingkan dengan 2 titik terdekat pada perbatasan

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

22

d1

d2

d

Page 23: Divide Dan Conquer

Convex hull

• Diberikan P1=(x1, y1)...Pn=(xn, yn) sebagai sekumpulan titik pada bidang datar. Tentukan titik-titik yang dapat membentuk poligon cembung yang mengandung seluruh titik P1..Pn

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

23

P1

P3P4

P5

P6

P7

P8

P2

Page 24: Divide Dan Conquer

Convex hull• solusi: susun P1..Pn terurut menurut x• tarik garis p antara 2 titik ekstrim (berdasarkan

x)• partisi titik2 menjadi titik sebelah kiri p dan

sebelah kanan p. Bagian kiri disebut upper hull, bagian kanan disebut lower hull

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

24

P2

P3P4

P5

P6

P8

P1

P7

Page 25: Divide Dan Conquer

Convex hull• pada setiap bagian, tentukan titik terjauh dari

garis, dan tarik garis antara 2 titik garis pembatas dengan titik terjauh.

• untuk upper hull, pilih semua titik di kiri garis2 ini, kemudian rekursif untuk menemukan titik lainnya

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

25

P2

P3P4

P5

P6

P8

P1

P7

Page 26: Divide Dan Conquer

Convex hull

• untuk menentukan titik terjauh dan titik di sebelah kiri/kanan, gunakan formula:

• jika determinan positif maka P3 di kiri P1 dan P2

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

26

231231133221

33

22

11

111

yxyxyxyxyxyxyxyxyx

−−−++=

Page 27: Divide Dan Conquer

Latihan

• triomino puzzle• nuts and bolts problem• variasi binary search

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

27

Page 28: Divide Dan Conquer

Triomino puzzle

• Triomino adalah bentuk bidang serupa L yang dibentuk dari 3 buah kotak yang bersebelahan pada papan catur

• diberikan papan berukuran 2n x 2n, tentukan cara memenuhi seluruh papan menggunakan triomino dengan hanya menyisakan sebuah kotak saja yang tidak tertutup

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

28

Page 29: Divide Dan Conquer

Triomino puzzle

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

29

Page 30: Divide Dan Conquer

nuts and bolts

• ada n buah pasangan mur dan baut yang berukuran berbeda2, dan tercampur satu sama lain. tentukan algoritma untuk menemukan seluruh pasangan mur-baut yang sesuai, dengan batasan perbandingan hanya boleh dilakukan antara mur dan baut saja, tidak dapat membandingkan 2 buah mur atau 2 buah baut

• perbandingan antara sebuah mur dan sebuah baut menghasilkan kesimpulan lebih besar, lebih kecil atau sama.

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

30

Page 31: Divide Dan Conquer

variasi binary search 1

• diberikan N buah bilangan yang terurut, namun telah tergeser sirkular sebanyak k posisi. Misalnya, deret { 9, 11, 2, 3, 5, 7, 8} adalah deret bilangan yang tergeser k=2, dan {7, 8, 9, 11, 2, 3, 5} adalah deret bilangan yang telah tergeser k=4.

• Jika k tidak diketahui, tentukan algoritma yang dapat menemukan bilangan terbesar dalam deretan bilangan tersebut dalam O(log n)

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

31

Page 32: Divide Dan Conquer

variasi binary search 2

• diberikan N buah bilangan yang terurut, dimana tidak ada dua buah bilangan yang bernilai sama.

• Tentukan algoritma yang mampu menemukan apakah ada bilangan yang memiliki posisi dalam deret tersebut sama dengan nilainya.

• Contoh: – {-2, 0, 2, 4, 7, 10}, bilangan 4 berada pada posisi ke-

4.– {-2, 0, 2, 5, 7, 10}, tidak ada bilangan yang berada

pada posisi yang sama dengan nilainya.

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

32

Page 33: Divide Dan Conquer

Sumber

• Anany Levitin. Introduction to the Design & Analysis of Algorithms. Addison Wesley, 2003

• Steven S. Skiena. The Algorithm Design Manual. Springer-Verlag, 1998

3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer

33