Anda di halaman 1dari 33

Algoritma RekursiI dan

Metode Divide and Conquer


Desain dan Analisis Algoritma
Made Windu Antara Kesiman
Jurusan PTIK
UNDIKSHA Singarafa
Oktober 2008
DeIinisi RekursiI
MendeIinisikan sebuah objek dalam term
objek itu sendiri
DeIinisi RekursiI
MendeIinisikan sequence, Iungsi, dan
himpunan
Contoh :
Sequence untuk n 0, 1, 2, .
- Term pertama sequence :
- Term berikutnya ditemukan dari term
sebelumnya :
2
n
n
a =
0
1 a =
1
2
n n
a a
+
=
Fungsi rekursiI
2 langkah untuk mendeIinisikan Iungsi
rekursiI dalam domain integer non negatiI :
asis Step : tentukan nilai Iungsi di 0
#ecursive Step : berikan aturan (rule) untuk
menemukan nilai Iungsi di suatu integer dari
nilai Iungsi tersebut pada integer yang lebih kecil
#ecursive Inductive definition
Contoh :
Sebuah Iungsi f dideIinisikan secara
rekursiI sebagai berikut :
f(0) 3 (asis)
f(n1) 2 f(n) 3 (#ecursive)
Temukan f(1), f(2), f(3), dan f(4) !
Solusi :
f(1) 2 f(0) 3 2.3 3 9
f(2) 2 f(1) 3 2.9 3 21
f(3) 2 f(2) 3 2.21 3 45
f(4) 2 f(3) 3 2.45 3 93
Fungsi Iaktorial (n) n!
(0) 0! 1 (asis)
(n1) (n1)! (n1) . n!
(n1).(n) (#ecursive)
Contoh : Hitung (5) !
Solusi :
(5) 5.(4) 5.4.(3) 5.4.3.(2)
5.4.3.2.(1) 5.4.3.2.1.(0)
5.4.3.2.1.1 120
ibonacci numbers
f
0
, f
1
, f
2
, .. DideIinisikan sebagai :
f
0
0, f
1
1
f
n
f
n-1
f
n-2
untuk n 2, 3, 4, .
ibonacci numbers : 0, 1, 1, 2, 3, 5, 8, .
RekursiI pada string
Sebuah string dari alphabet L adalah sebuah
sequence hingga dari simbol-simbol dalam L
Bila L* adalah himpunan string-string dari
alphabet L, maka secara rekursiI :
L* (dimana : string kosong tanpa simbol)
(asis)
Jika L* dan L, maka L* (#ecursive)
RekursiI pada string
Contoh :
L 0,1}
L * , 0, 1, 00, 01, 10, 11, 000, .}
DeIinisi rekursiI panjang string : length()
- length() 0
- length() length() 1, jika L* dan L
function Power(a:integer, n:integer)-> integer
,Menghitung a
n
dengan definisi rekursif, a>0 nK0,
amus
Algoritma
if n=0 then
Power(a,n) ,asis,
else
Power(a,n) a.Power(a,n-) ,#ecursive,
endif
function Factorial(n:integer)-> integer
,Menghitung n! dengan definisi rekursif, nK0,
amus
Algoritma
if n=0 then
Factorial(n) ,asis,
else
Factorial(n) n.Factorial(n-) ,#ecursive,
endif
5rocedure RecLinSearch(in5ut T[1..N]: array of
integer, i : integer, j : integer, x : integer,
out5ut 5os : integer)
,goritma #ecursive Linear Search, mencari posisi
x daam T secara rekursif, disimpan daam pos, 0
jika x tidak ada,
amus
5os_next : integer
Algoritma
if Ti,=x then
5os i ,asis,
else if i=j then
5os 0 ,asis,
else ,#ecursive,
RecLinSearch(T,i+,j,x,5os_next)
5os 5os_next
endif
endif
Divide and Conquer
Struktur rekursiI : memecahkan masalah
dengan memanggil dirinya sendiri, satu atau
beberapa kali, untuk submasalah yang sama
tetapi yang lebih kecil
Algoritma rekursiI inilah yang biasanya
mengikuti pendekatan Divide and Conquer
3 langkah Divide and Conquer
Divide
Bagi masalah dalam beberapa submasalah yang sama
dengan masalah awal, tetapi ukurannya lebih kecil
Conquer
Pecahkan submasalah secara rekursiI
Combine
Gabungkan subsolusi dari submasalah menjadi solusi
dari masalah awal
Divide
Objek yang dibagi adalah ukuran input, misalnya :
Ukuran tabel atau array
Ukuran matriks
Nilai eksponen
dll, tergantung masalah dan struktur yang dipakai
Catatan : submasalah mempunyai karakteristik yang sama
dengan masalah awal (naturally recursive)
Contoh :
Mencari nilai minimum dan maksimum
sekaligus dari sebuah tabel integer
5rocedure MinMaxBruteForce(in5ut T[1..N]:array of
integer, N:integer, out5ut min,max:integer)
,Mencari niai minimum dan maksimum dengan rute
Force, dari tabe T dengan N eemen, output
disimpan di min dan max,
amus
i : integer
Algoritma
min T, ,inisiaisasi niai minimum,
max T, ,inisiaisasi niai maximum,
for i=2 to N do
if Ti,<min then
min Ti, ,niai minimum yang baru,
endif
if Ti,max then
max Ti, ,niai maximum yang baru,
endif
endfor
Kebutuhan waktu T(n)
Secara Brute Force :
T(n) (n-1) (n-1)
2n-2
O(n)
Dengan Divide and Conquer
2 1 5 7 9 4 6 0
Divide
2 1 5 7 9 4 6 0
Conquer
Min1 1 Min2 0
Max1 7 Max2 9
Combine
Min min(Min1,Min2) 0
Max max(Max1,Max2) 9
Skema rekursiI MinMax untuk T
dengan N elemen
MinMa(T,N,min,ma)
Basis
Bila N1, minmaxT|1|
Bila N2, bandingkan antara T|1| dan T|2| untuk
menentukan min dan max
Recursive
Bila N~2 :
;/0 : bagi T menjadi 2 bagian yang sama, T1 dan T2 masing-
masing dengan N/2 elemen
436:07 : MinMa(T1,N/2,min1,ma1)
MinMa(T2,N/2,min2,ma2)
42-30 :Bandingkan min1 dengan min2, dan max1 dengan
max2 untuk menentukan min dan max
Proses rekursiI
2 1 5 7 9 4 6 0
2 1 5 7 9 4 6 0
2 1 5 7 9 4 6 0
Min1 Min5 Min4 Min0
Max2 Max7 Max9 Max6
2 1 5 7 9 4 6 0
Min1 Min0
Max7 Max9
2 1 5 7 9 4 6 0
Min0
Max9
Latihan
Tuliskan proses rekursiI tersebut dalam
notasi algoritmik !
Kompleksitas waktu asimptotik
Asumsi : n 2
k
, k bil. bulat positiI
T(n)2T(n/2)22(2T(n/4)2)2
4T(n/4)428T(n/8)842.

0, 1
( ) 1, 2
2 ( / 2) 2, 2
n
T n n
T n n
=
|

= =
,

+ >
|
1
1 1
1
2 (2) 2 2 .1 2 2 / 2 2
3( / 2) 2 ( )
k
k i k k
i
T n n
n O n


=
+ = + = +
= =

rute orce vs Divide and


Conquer
rute orce T(n) 2n 2
Divide and Conquer T(n) 3n/2 2
3n/2 2 2n 2, untuk nK2
Jadi dengan metode Divide and Conquer,
kebutuhan waktu akan lebih kecil
Sorting dengan Divide and
Conquer
Skema global :
Bagi tabel T menjadi dua bagian, T1 dan T2
Urutkan bagian T1 dan bagian T2
Gabung T1 dan T2 yang masing-masing telah
terurut menjadi T yang akhirnya terurut
Dua pendekatan Split-Join
asy split - Hard foin
Membagi elemen tabel hanya dengan
memperhatikan posisi elemen
Hard split - asy foin
Membagi elemen tabel dengan memperhatikan
nilai-nilai elemennya
Dua pendekatan Split/Join
asy Split Hard Join
2 7 1 5 9 8 easy split : 2 7 1 5 9 8
sort : 1 2 7 5 8 9
hard foin : 1 2 8 9
Hard Split asy Join
2 7 1 5 9 8 hard split : 2 1 9 8
sort : 1 2 5 7 8 9
easy foin : 1 2 5 7 8 9
Merge Sort
asis
Untuk N1, tabel telah terurut (Solve)
#ecursive, untuk N~1
Divide : bagi tabel menjadi 2 bagian, kiri dan kanan,
masing-masing dengan N/2 elemen
Conquer : secara rekursiI, terapkan lagi divide and
conquer pada masing-masing bagian tersebut
Combine (Merge) : gabungkan kedua bagian tabel yang
telah terurut, menjadi satu tabel terurut
Merge Sort . asy Split Hard Join
Skema Merge
Contoh
Merge Sort
5rocedure MergeSort(in5ut/out5ut T[1..N]: array of
integer, in5ut i,j : integer)
,Mengurutkan eemen-eemen tabe T dengan agoritma
Merge Sort,
amus
: integer
Algoritma
if i<j then ,T masih berisi > 1 eemen,
(i+j) div 2
MergeSort(T,i,) ,&rutkan bagian kiri,
MergeSort(T,+,j) ,&rutkan bagian kanan,
Merge(T,i,,j) ,Gabungan,
endif
Kompleksitas waktu
Merge Sort
Asumsi n 2
k
T(n) : jumlah operasi perbandingan pada
pengurutan dua bagian tabel jumlah
operasi perbandingan pada procedure Merge
, 1
( )
2 ( / 2) , 1
a n
T n
T n cn n
=
|
=
,
+ >
|
Penyelesaian :

Anda mungkin juga menyukai