Divide and Conquer
Divide and Conquer
> +
s
=
, ) ( ) 2 / ( 2
n , ) (
) (
0
0
n n n f n T
n n g
n T
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
6
Kartika Dwi Hapsari | 105060809111003
6
Contoh masalah :
1. Mencari nilai minimum dan maksimum
4 12 23 9 21 1 35 2 24
Ide dasar algoritma secara Divide and Conquer:
4 12 23 9 21 1 35 2 24
DIVIDE
4 12 23 9 21 1 35 2 24
SOLVE: tentukan min &
maks pada tiap bagian
4 12 23 9 21 1 35 2 24
min = 4 min = 1
maks = 23 maks = 35
COMBINE
4 12 23 9 21 1 35 2 24
min = 1
maks = 35
Algoritma:
1. Untuk kasus n = 1 atau n = 2,
SOLVE: Jika n = 1, maka min = maks = A[n]
Jika n = 2, maka bandingkan kedua elemen untuk
menentukan min dan maks.
2. Untuk kasus n > 2,
(a) DIVIDE: Bagi dua tabel A menjadi dua bagian yang sama, A1
dan A2
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
7
Kartika Dwi Hapsari | 105060809111003
7
(b) CONQUER: MinMaks(A1, n/2, min1, maks1)
MInMaks(A2, n/2, min2, maks2)
(c) COMBINE: if min1 <min2 then min <- min1 else min <- min2
if maks1 <maks2 then maks <- maks2 else maks <-
maks1
procedure MinMaks2(input A : TabelInt, i, j : integer,
output min, maks : integer)
{ Mencari nilai maksimum dan minimum di dalam tabel A yang
berukuran n elemen secara Divide and Conquer.
Masukan: tabel A yang sudah terdefinisi elemen-elemennya
Keluaran: nilai maksimum dan nilai minimum tabel
}
Deklarasi
min1, min2, maks1, maks2 : integer
Algoritma:
if i=j then { 1 elemen }
minA
i
maksA
i
else
if (i = j-1) then { 2 elemen }
if A
i
< A
j
then
maksA
j
minA
i
else
maksA
i
minA
j
endif
else { lebih dari 2 elemen }
k(i+j) div 2 { bagidua tabel pada posisi k }
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
8
Kartika Dwi Hapsari | 105060809111003
8
MinMaks2(A, i, k, min1, maks1)
MinMaks2(A, k+1, j, min2, maks2)
if min1 < min2 then
minmin1
else
minmin2
endif
if maks1<maks2 then
maksmaks2
else
maksmaks2
endif
Kompleksitas Waktu
Asumsi: n = 2
k
, dengan k bilangan bulat positif, maka
T(n) = 2T(n/2) + 2
= 2(2T(n/4) + 2) + 2 = 4T(n/4) + 4 + 2
= 4T(2T(n/8) + 2) + 4 + 2 = 8T(n/8) + 8 + 4 + 2
= ...
= 2
k 1
T(2) +
=
1
1
2
k
i
i
= 2
k 1
1 + 2
k
2
= n/2 + n 2
= 3n/2 2
= O(n)
> +
=
=
=
2 , 2 ) 2 / ( 2
2 , 1
1 , 0
) (
n n T
n
n
n T
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
9
Kartika Dwi Hapsari | 105060809111003
9
2. Mencari Pasangan Titik yang Jaraknya Terdekat (Closest Pair)
Jarak dua buah titik p
1
= (x
1
, y
1
) dan p
2
= (x
2
, y
2
):
Asumsi: n = 2
k
dan titik-titik diurut berdasarkan absis (x).
Algoritma Closest Pair:
1. SOLVE: jika n = 2, maka jarak kedua titik dihitung langsung dengan
rumus Euclidean.
2. DIVIDE: Bagi himpunan titik ke dalam dua bagian, P
left
dan P
right
,
setiap bagian mempunyai jumlah titik yang sama.
p
1
p
2
p
3
p
4
p
5
p
6
p
7
p
8
x
y
2
2 1
2
2 1
) ( ) ( y y x x d + =
p
1
p
2
p
3
p
4
p
5
p
6
p
7
p
8
x
y
L
P
Left
P
Right
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
10
Kartika Dwi Hapsari | 105060809111003
10
3. CONQUER: Secara rekursif, terapkan algoritma D-and-C pada
masing-masing bagian.
4. Pasangan titik yang jaraknya terdekat ada tiga kemungkinan letaknya:
(a) Pasangan titik terdekat terdapat di bagian P
Left
.
(b) Pasangan titik terdekat terdapat di bagian P
Right
.
(c) Pasangan titik terdekat dipisahkan oleh garis batas L, yaitu satu
titik di P
Left
dan satu titik di P
Right
.
Jika kasusnya adalah (c), maka lakukan tahap COMBINE untuk
mendapatkan jarak dua titik terdekat sebagai solusi persoalan
semula.
procedure FindClosestPair2(input P: SetOfPoint, n :
integer,
output delta : real)
{ Mencari jarak terdekat sepasang titik di dalam himpunan
P. }
Deklarasi:
DeltaLeft, DeltaRight : real
Algoritma:
if n = 2 then
delta jarak kedua titik dengan rumus Euclidean
else
P-Left {p
1
, p
2
,..., p
n/2
}
P-Right {p
n/2+1
, p
n/2+2
,..., p
n
}
FindClosestPair2(P-Left, n/2, DeltaLeft)
FindClosestPair2(P-Right, n/2, DeltaRight)
delta minimum(DeltaLeft, DeltaRight)
{--
***********************************************************
--}
Tentukan apakah terdapat titik p
l
di P-Left dan p
r
di
P-Right
Dengan jarak(p
l
, p
r
) < delta. Jika ada, set delta
dengan jarak
terkecil tersebut.
{--
***********************************************************
--}
endif
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
11
Kartika Dwi Hapsari | 105060809111003
11
Jika terdapat pasangan titik p
l
and p
r
yang jaraknya lebih kecil dari delta,
maka kasusnya adalah:
(i) Absis x dari p
l
dan p
r
berbeda paling banyak sebesar delta.
(ii) Ordinat y dari p
l
dan p
r
berbeda paling banyak sebesar delta.
Ini berarti p
l
and p
r
adalah sepasang titik yang berada di daerah sekitar
garis vertikal L:
Oleh karena itu, implementasi tahap COMBINE sbb:
(i) Temukan semua titik di P
Left
yang memiliki absis x minimal x
n/2
delta
.
(ii) Temukan semua titik di P
Right
yang memiliki absis x maksimal x
n/2+
delta
.
Sebutkan semua titik-titik yang ditemukan pada langkah (i) dan (ii)
tersebut sebagai himpunanP
strip
yang berisi s buah titik.
Urutkan titik-titik tersebut dalam urutan absis y yang menaik. Misalkan
q1, q2 , ..., qs menyatakan hasil pengurutan.
-
-
-
-
x
y
L
-
Kartika Dwi Hapsari
Desain dan Analisa Algoritma Divide and Conquer
12
Kartika Dwi Hapsari | 105060809111003
12
Langkah COMBINE:
for i1 to s do
for ji+1 to s do
exit when (|q
i
.x q
j
.x | > Delta or |q
i
.y q
j
.y | >
Delta
if jarak (q
i
, q
j
) < Delta then
Delta jarak(q
i
, q
j
) { dihitung dengan rumus
Euclidean }
endif
endfor
endfor
Kompleksitas Waktu
Solusi dari persamaan di atas adalah T(n) = O(n log n).
L
A A
strip - A
=
> +
=
2 ,
2 , ) 2 / ( 2
) (
n a
n cn n T
n T