divide dan conquer
DESCRIPTION
Divide Dan ConquerTRANSCRIPT
Divide & Conquer
Achmad Imam KistijantoroPelatihan TOKI II 2007
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
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
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
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
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
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
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
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
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
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]
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
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
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
Quicksort
3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer
15
5 3 1 9 8 2 4 7
i j
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
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
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
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
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
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
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
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
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
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
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
−−−++=
Latihan
• triomino puzzle• nuts and bolts problem• variasi binary search
3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer
27
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
Triomino puzzle
3-Jun-07 IF-ITB/AI/Apr 07TOKI II – Divide & Conquer
29
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
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
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
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