Anda di halaman 1dari 23

BAB III

DIVIDE AND CONQUER

A. Definisi
Divide and Conquer adalah teknik desain algoritma umum yang paling terkenal.
Beberapa algoritma yang sangat efisien adalah implementasi spesifik dari strategi
umum ini. Divide and Conquer adalah algoritma yang bekerja sesuai dengan tahap
berikut:
1. Divide : Masalah dibagi menjadi beberapa masalah yang lebih kecil (sub-masalah)
dan berukuran sama.
2. Conquer : Masalah yang lebih kecil diselesaikan (biasanya secara rekursif,
meskipun kadang-kadang algoritma yang berbeda digunakan ketika kasus menjadi
cukup kecil).
3. Combine : Solusi yang diperoleh untuk masalah yang lebih kecil digabungkan
untuk mendapatkan solusi untuk masalah awal (original).
Gambar di bawah ini menggambarkan tahap penyelesaian divide and conquer.

problem

of size n

subproblem 1
of size n/2

subproblem 2
of size n/2

solution to
subproblem 1

solution to
subproblem 2

solution to
the original
problem

B. Contoh Masalah MERGE-SORT


Sorting Problem : Mengurutkan sebuah bilangan n unsur ke dalam urutan yang
tidak menurun.
Langkah penyelesaiannya sebagai berikut:

Divide : Bagi barisan bilangan yang berjumlah n unsur menjadi dua subbarisan yang masing-masing berjumlah n/2 unsur

Conquer : Urutkan dua sub-barisan tadi secara rekursif menggunakan


merge sort.

Combine : Gabung dua sub-barisan yang telah diurutkan untuk


menghasilkan barisan yang terurut.

Contoh:
Input : Barisan bilangan A(25, 6, 32, 15, 22, 19, 2, 43) berjumlah 8 yang tidak
terurut.
Output : Barisan bilangan terurut A(2, 6, 5, 32, 15, 19, 22, 25, 32, 43).
Langkah penyelesaian masalah di atas adalah sebagai berikut:

25

25

32

32

15

15

22

19

43

22

19

43

Divide
25

32

15

22

19

43

25

32

15

22

19

43

25

15

32

19

22

43

6
6

15

25

15

25

32

32

19
19

22
22

Conquer

43
43

Combine
2

32

15

22

19

43
2|Tugas 03 Algoritma

15

25

32

32

15

25

15

15

25

32

15

25

15

22

32

15

15

19

22

22

32

19

22

19

43

19

22

19

43

19

22

19

43

19

22

43

43

43

43

Combine

15

25

15

25

15

25

15

19

22

32

15

19

22

32

15

19

22

32

15

19

22

19

43

19

22

25

43

19

22

25

32

43

19

22

25

32

43

43

43

43

3|Tugas 03 Algoritma

Kunci dari pekerjaan algoritma MERGE-SORT adalah menggabungkan dua


barisan terurut di langkah combine. Proses penggabungan disebut MERGE(A,p,q,r),
dimana A adalah sebuah array dan p, q, r mengindikasikan sebagai array sehingga p
q < r. Proses ini mengasumsikan bahwa subarray A[p .. q] dan A[q+1 .. r] adalah
barisan terurut. Kemudian mereka digabungkan menjadi satu barisan terurut yang
menggantikan subarray A[p .. r]. Ide merge sort dapat diimplementasikan ke dalam
Pseudocode sebagai berikut:

Input : Barisan n bilangan disimpan dalam larik A

Output : Barisan terurut n bilangan


MERGE-SORT (A,p,q,r)
1.
2.
3.
4.
5.

if p < r
q = [(p + r)/2]
MERGE-SORT (A,p,q)
MERGE-SORT (A,q+1,r)
MERGE (A,p,q,r)

Prosedur MERGE-SORT (A,p,r) mengurutkan elemen-elemen di subarray A[p ..


r]. Jika p r, subarray paling tidak memiliki 1 elemen yang telah diurutkan. Pada
langkah divide hanya menghitung index q yang memisahkan A[p .. r] ke dalam dua
subarray : A[p .. q] yang berjumlah n/2 elemen, dan A[q + 1 .. r] yang berjumlah n/2
elemen.
Prosedur MERGE
MERGE (A,p,q,r)
1. n1 = q p + 1
2. n2 = r q
3. let L [1 .. n1 + 1 ] and R[1 .. n2 + 1] be new arrays
4. for i = 1 to n1
5.
L[i] = A[p + 1 1 ]
6. for j = 1 to n2
7.
R[j] = A[q + j]
8. L[n1 + 1] =
9. R [n2 + 1] =
10. i = 1
11. j = 1
12. for k = p to r
13.
if L[i] R[j]
14.
A[k] = L[i]
15.
i=i+1
16.
else A[k] = R [j]
17.
j=j+1

Sentinels

4|Tugas 03 Algoritma

Secara detail, prosedur MERGE bekerja sebagai berikut.

Baris 1 menghitung panjang n1 pada subarray A[p .. q],

Baris 2 menghitung panjang n2 pada subarray A[q + 1 .. r].

Pada baris 3 kita membuat array L dan R (left dan right), dengan n1
+ 1 dan n2 + 1; posisi tambahan di tiap array yang memiliki sentinel.

Loop for pada baris 4 5 menyalin subarray A[p .. q] ke L[1 .. n1].

Loop for pada baris 6 7 menyalin subarray A[q + 1 .. r] ke R[1 .. n2].

Baris 8 9 menempatkan sentinel pada ujung array L dan R.

Setiap iterasi loop for pada baris 12 17, subarray A[p .. k 1] berisi
elemen terkecil k p dari barisan terurut L[1 .. n1 + 1] dan R[1 .. n2 + 1].
L[i] dan R[j] adalah elemen terkecil dari array mereka yang belum
disalin kembali ke A.

C. Analisis Algoritma Divide and Conquer


Ketika sebuah algoritma mengandung sebuah rekursif yang memanggil dirinya
sendiri, kita dapat menggambarkan running-timenya dengan persamaan rekurensi atau
rekurensi, dimana sebuah masalah yang berukuran n waktu running-time pada input
yang lebih kecil. Rekurensi adalah sebuah persamaan atau pertaksamaan yang
menggambarkan fungsi dalam bentuk nilai input yang lebih kecil.
Ada tiga metode dalam menyelesaikan rekurensi, yaitu :

Metode Substitusi,

Metode pohon-rekursi

Metode Master

1. Metode Substitusi
a. Ide penyelesaiannya :

Tebak (perkirakan) bentuk solusi

Gunakan induksi matematika untuk membuktikan tebakan tadi benar.

b. Dapat digunakan untuk membuktikan kedua batas atas O() dan bataas bawah
().
c. Contoh Fungsi Exact :
Tentukan solusi berikut dengan menggunakan metode substitusi
1 = 1
()

> 1

5|Tugas 03 Algoritma

Solusi :

Tebak : = log +

Induksi :
Basis : = 1 log + = 1 =
Hipotesis : = log + untuk semua k < n
Langkah Induktif :

= 2
+
2

= 2 ( 2 log 2 + 2 ) +

= log 2 + +
= (log log 2) + 2 (karena log 2 = 1)
= log + 2
= log +

2. Metode Pohon-Rekursi
a. Penggunaan :
1) Pohon rekursi digunakan untuk menentukan batas asimtotik yang baik
pada rekurensi T (n) = ...

Jumlahkan cost dalam setiap tingkat pohon untuk mendapatkan


satu set cost per-tingkat.

Jumlah semua cost per-tingkat untuk menentukan total semua


cost tingkat rekursi.

2) Paling bagus jika digunakan untuk menghasilkan tebakan yang baik


untuk bentuk batas tertutup dari rekurensi T (n).
3) Tebakan diverifikasi dengan menggunakan Metode Substitusi atau
Metode Master.
Catatan : batas yang dicari akan menjadi salah satu hal berikut:

"Batas atas asimtotik" berarti Anda sedang mencari Big-O

"Batas Ketat Asimptotik" berarti Anda sedang mencari

"Batas Bawah Asimptotik" berarti Anda sedang mencari

b. Langkah-langkah :
1) Gambar

pohon

berdasarkan

perulangan

rekurensi
6|Tugas 03 Algoritma

2) Dari pohon tentukan:


a. # Tingkat di pohon
b. cost per tingkat
c. # Node di tingkat terakhir
d. cost tingkat terakhir (yang didasarkan pada jumlah yang ditemukan
dalam 2c)
3) Tuliskan penjumlahan menggunakan notasi - penjumlahan ini meringkas
semua cost tingkat di pohon rekursi
4) Kenali sum atau cari solusi bentuk tertutup untuk penjumlahan dibuat
dalam 3).
5) Terapkan bahwa solusi bentuk tertutup untuk penjumlahan Anda datang
dengan Anda "menebak" dalam hal Big-O, atau , atau (tergantung
pada jenis asimptotic terikat sedang dicari).
6) Kemudian Gunakan Metode Substitusi atau Metode Master untuk
menentukan batas yang benar.
c. Contoh
Carilah solusi dari =

+ 2

n2

n2

T(n)

T(n/4)

(n/4)2

T(n/2)

T(n/16)

(n/2)2

T(n/8)

T(n/8)

T(n/4)

7|Tugas 03 Algoritma

n2

n2

(n/4)2

(n/16)2

T(1)

(n/8)2

T(1) T(1)

5 2

16

(n/2)2

(n/8)2

T(1)T(1)

25 2

256

(n/4)2

T(1) T(1)

T(1)
5

= 2 (1 + 16 +

16

5
16

+ )= 2 )

3. Metode Master
Metode master menyediakan semacam cookbook untuk menyelesaikan
persamaan rekursif dalam bentuk:
=

+ ()

Dimana a 1, b 1, dan f(n) > 0


Ide : Membandingkan f(n) dengan log

f(n) adalah secara asimtotik lebih kecil atau lebih besar dari log dengan
factor polynomial

f(n) adalah secara asimtotik sama dengan log

Dalam teorema master ada tiga kasus yang perlu diingat untuk memudahkan
menyelesaikan persamaan rekursif:
a. Jika = log , untuk beberapa > 0, maka = (log )
b. Jika = log log k , maka = (log log k+1 )
c. Jika = log + , maka untuk beberapa > 0, dan jika

() untuk beberapa c < 1, maka = ( )

8|Tugas 03 Algoritma

Kita tidak dapat menggunakan Teorema Master jika

() tidak monoton, contoh: = sin

() bukan polynomial, contoh: = 2

tidak dapat diekspresikan sebagai konstanta, contoh: = ( )

+ 2

Contoh :
1) = 4

= 4, = 2 log = 2 ; =
: = (2 ) untuk = 1
= (2 )

2) = 2

+ log

= 2, = 2 log = ; = log
: = (log log k )
= ( 2 )

3) = 4

+ 3

= 4, = 2 log = 2 ; = 3

: = (2+ ) untuk = 1 dan 4( 2 )3 3 untuk = 1/2


= (3 )

9|Tugas 03 Algoritma

Tugas 03
1. Jelaskan dengan simulasi cara kerja Algoritma Merge Sort!
Jawab:
MERGE-SORT (A,p,q,r)
5

43

30

19

45

r =9

p =1
1.

10

if p < r
1 < 9 = True

2.

q = [(p + r)/2]
q = (1 + 9)/2 = 5
5

43

19

45

10

q=5

p =1
3.

30

r =9

MERGE-SORT (A,p,q)
5

43

30

43

43

30

43

30

30

43

30

43

A
2

p
Baris di atas adalah baris A.

30

43

10 | T u g a s 0 3 A l g o r i t m a

4.

MERGE-SORT (A,q+1,r)
19

10

19

45

10

19

45

10

19

10

45

10

q +1
5.

45

19

45

MERGE (A,p,q,r)
1) n1 = q p + 1
n1 = 5 1 + 1 = 5
n1 menyatakan jumlah bilangan yang ada pada larik (A,p,q) yaitu 5
2) n2 = r q
n2 = 9 5 = 4
n2 menyatakan jumlah bilangan yang ada pada larik (A,q+1,r) yaitu 4

3) let L [1 .. n1 + 1 ] and R[1 .. n2 + 1] be new arrays


Kita ingin menjadikan L [1 .. n1 + 1 ] dan R[1 .. n2 + 1] sebagai array
yang baru

4) for i = 1 to n1
i=15
5)

L[i] = A[p + i 1 ]
5).a. for i = 1
L[1] = A[1 + 1 1 ]
L[1] = A[1]

11 | T u g a s 0 3 A l g o r i t m a

5).b. for i = 2
L[2] = A[1 + 2 1 ]
L[2] = A[2]
5).c. for i = 3
L[3] = A[1 + 3 1 ]
L[3] = A[3]
5).d. for i = 4
L[4] = A[1 + 4 1 ]
L[4] = A[4]
5).e. for i = 5
L[5] = A[1 + 5 1 ]
L[5] = A[5]
L

30

43

Baris L sebagai array baru menggantikan (A,p,q)

6) for j = 1 to n2
j=14
7)

R[j] = A[q + j]
7).a. for i = 1
R[1] = A[1 + 1 1 ]
R[1] = A[1]
7).b. for i = 2
R[2] = A[1 + 2 1 ]
R[2] = A[2]
7).c. for i = 3
R[3] = A[1 + 3 1 ]
R[3] = A[3]
7).d. for i = 4
R[4] = A[1 + 4 1 ]
R[4] = A[4]
R

10

19

45

Baris R sebagai array baru menggantikan (A,q+1,r)


12 | T u g a s 0 3 A l g o r i t m a

8) L[n1 + 1] =
L

30

43

9) R [n2 + 1] =
R

10

19

45

43

30

19

10) i = 1
11) j = 1
12) for k = p to r
A

45

10

k
Index pada Larik A yang index awalnya adalah p dan index akhirnya r
digantikan dengan k. Semuanya k mulai awal hingga akhir.
if L[i] R[j]

13)

if L[1] R[1]
L

30

43

10

19

45

45

<

14)

A[k] = L[i]
A[1] = L[1]
A

43

30

19

45

10

k
15)

i=i+1
i=1+1=2
if L[2] R[1]

30

43

10

19

<
13 | T u g a s 0 3 A l g o r i t m a

A[2] = L[2]
A

43

30

19

45

10

k
i=i+1
i=2+1=3
if L[3] R[1]
L

30

43

10

19

45

>

16)

else A[k] = R [j]


A[3] = R[1]
A

30

19

45

10

k
17)

j=j+1
j=1+1=2
if L[3] R[2]

30

43

10

19

45

<
A[4] = L[3]
A

30

19

45

10

k
i=i+1
i=3+1=4
if L[4] R[2]
L

30

43

10

19

45

>

14 | T u g a s 0 3 A l g o r i t m a

else A[5] = R[2]


A

10

19

45

10

k
j=j+1
j=2+1=3
if L[4] R[3]
L

30

43

10

19

45

45

>

else A[6] = R[3]


A

10

19

45

10

k
j=j+1
j=3+1=4
if L[4] R[4]
L

30

43

10

19

<
A[7] = L[4]
A

10

19

30

45

10

30

43

10

k
i=i+1
i=4+1=5
if L[5] R[4]
L

30

43

19

45

<
A[8] = L[5]
A

10

19

10

15 | T u g a s 0 3 A l g o r i t m a

i=i+1
i=5+1=6
if L[6] R[4]
L

30

43

10

19

45

>
A[9] = R[4]
A

10

19

30

43

45

k
Hasil akhirnya diperoleh larik A yang telah terurut.

2. Berikan bukti bahwa loop pada algoritma Merge(A,p,q,r) bekerja dengan benar
dengan

menunjukkan

mekanisme

Inisialisasi,

Maintenance,

dan

Terminasi

(Ref: Intro to Algorithms, MIT Press)


Jawab :
Inisialisasi : Sebelum iterasi pertama dari loop, kita memiliki k = p, sehingga
subarray A[p .. k 1] kosong. Subarray kosong ini berisi k p = 0 yang merupakan
elemen terkecil dari L dan R, dan karena i = j = 1, kedua L[i] dan R[j] adalah elemen
terkecil dari array mereka yang belum disalin kembali ke A.
Maintenance : Untuk melihat bahwa setiap iterasi mempertahankan loop invariant,
mari kita misalkan L[i] R[j]. Kemudian L[i] adalah elemen terkecil belum disalin
kembali ke A. Karena A[p .. k 1] mengandung k - p elemen terkecil, setelah baris 14
menyalin L[i] ke A[k], subarray A[p .. k] akan berisi k p + 1 elemen terkecil.
Incrementing k (loop for update) dan i (di baris 15) membangun kembali loop
invarian untuk iterasi berikutnya. Jika bukan L[i] > R[j], Maka baris 16-17 melakukan
tindakan

yang

tepat

untuk

mempertahankan

loop

invarian.

Termination: Pada terminasi, k = r + 1. Dengan loop invarian, subarray A[p .. k 1],


dimana A[p .. r], berisi k p = r p + 1 elemen terkecil dari L[1 .. n1 + 1] dan R[1 ..
n2 + 1], dalan larik yang terurut. Array L dan R bersama-sama mengandung n1 + n2
+ 2 = r p + 3 elemen. Semua kecuali dua terbesar telah disalin kembali ke A, dan
dua elemen terbesar ini adalah sentinel.

16 | T u g a s 0 3 A l g o r i t m a

3. Gunakan metode master untuk menentukan solusi dari fungsi rekurensi berikut, lalu
tunjukkan pohon rekursi dari masing-masin rekurens dan berikan bukti secara induksi
matematika.
a. = 9

+ 3

Jawab:

Metode Master
= 9, = 3, log = 2 , = 3
= (2+ ), = 1

2
9( )3 3 , =
3
3
Kasus 3 : = (3 )

Metode Pohon Rekursi


n3

(n/3)3

(n/9)3

(n/9)3 (n/9)3 (n/9)3

(n/3)3 (n/3)3 (n/3)3

(n/9)3 (n/9)3 (n/9)3

(n/3)3 (n/3)3 (n/3)3

(n/3)3 (n/3)3

1 3

(n/9)3 (n/9)3

(1)
1 1
= 3 (1 + + + )
3 9
= (3 )

Metode Substitusi
= (3 ), dibuktikan dengan

1) = (3 )

= 9
+ 3
3
Induksi Matematika :
a) Basis : T(1) = 13 = 1
b) Hipotesis : 3 , untuk setiap k n
c) Substitusi :
= 9

1 3

+ 3
17 | T u g a s 0 3 A l g o r i t m a

+ 3 =

2 3
+ 3
3

= ( 3 + 1)3 3 jika 3

Terbukti bahwa 3 jika 3, maka memenuhi = (3 )


2) = (3 )

= 9
+ 3
3
Induksi Matematika :
a) Basis : T(1) = 13 = 1
b) Hipotesis : 3 , untuk setiap k n
c) Substitusi :

9
3

+ 3

= 9

2
3

=(

+ 3

2 3
=
+ 3
3

+ 1)3 3 jika 3

Terbukti bahwa 3 jika 3, maka memenuhi = (3 )


Karena memenuhi = ( ) dan = , maka

dapat

disimpulkan bahwa = ( )

b. =

+1

Metode Master
= 1, = 2, log = 0 , = 0 = 1
Kasus 2 : = (log )

18 | T u g a s 0 3 A l g o r i t m a

Metode Pohon Rekursi


1

(1)
Total = 1 + 1 +
log

Total = 1 log = log

Metode Substitusi
= log , dibuktikan dengan

Induksi Matematika:
a) Basis : T(1) = log 1 = 0
b) Hipotesis : T(k) = log k, untuk setiap k n
c) Substitusi :

= (2) + 1

= (2) + 1
= log log 2 + 1
= log
Dari ketiga metode tersebut disimpulkan bahwa =

c. = 2

+ log

Metode Master
= 2, = 2, log = , = log
Kasus 1 : >
= (log )

19 | T u g a s 0 3 A l g o r i t m a

Metode Pohon Rekursi


log n

log

log

T(1)

log n

log

log

T(1) T(1)

log

T(1)T(1)

log

T(1) T(1)

4 log

T(1)

= log + 2 log + 4 log + =

2 log

log
1log

2
4

= log )

Metode Substitusi
= (log ), dibuktikan dengan

1) Dibuktikan bahwa = (log )


= 2

+ log

Induksi Matematika :
a) Basis : T(1) = log 1 = 0
b) Hipotesis : log , untuk setiap k n
c) Substitusi :
= 2

2 log

+ log

+ log

= 2 log 2 log 2 + log


= 2(log 1) + log log 1

Terbukti bahwa log 1, maka memenuhi =


(log )
2) Dibuktikan bahwa = (log )
= 2

+ log

Induksi Matematika :
a) Basis : T(1) = log 1 = 0
20 | T u g a s 0 3 A l g o r i t m a

b) Hipotesis : log , untuk setiap k n


c) Substitusi :
= 2

2 log

+ log

+ log

= 2 log 2 log 2 + log


= 2(log 1) + log log 0

Terbukti bahwa log 0, maka memenuhi =



Karena memenuhi = ( ) dan = , maka
dapat disimpulkan bahwa = ( )

4. Menggunakan metode Divide-and-Conquer, rancang algoritma sederhana untuk


menghitung jumlah data dalam sebuah larik A.

Misal A
Jawab :
1

26

32

42

43

Divide
1

SOLVE :
Mencari total
nilai dari 2
submasalah

Total 1 = 24

26

32

42

43

26

32

42

43

Total 2 = 143

COMBINE
1

26

32

42

43

Total = 167

DIVIDE : Bagi dua table A secara rekursif menjadi dua bagian yang berukuran sama,
yaitu bagian kiri dan bagian kanan.
21 | T u g a s 0 3 A l g o r i t m a

CONQUER : Terapkan algoritma Divide and Conquer untuk masing-masing bagian.


Total 1 adalah jumlah nilai pada bagian kiri dan Total 2 adalah jumlah nilai pada
bagian kanan

COMBINE : Jumlahkan nilai pada Total 1 dan nilai pada Total 2 untuk mendapatkan
Total nilai secara keseluruhan

22 | T u g a s 0 3 A l g o r i t m a

REFERENSI

Anonim. Data Structure Solving Recurrences (Slide PDF)


Bourke, Christoper. 2006. Master Theorem (Slide PDF). Computer Science and Engineer
Introduction to Discrete Mathematics.
Cormen, Thomas, dkk. 2009. Intoduction to Algorithms. Massachusetts Institute of
Technology.
Demaine, Erik. 2005. Introduction to Algorithms (Slide PDF)
Levitin, Anany. 2007. Introduction to the Design and Analysis Algorithms. USA : Pearson
Education.

23 | T u g a s 0 3 A l g o r i t m a

Anda mungkin juga menyukai