Algoritma Rekursif
Bentuk rekursif :suatu subrutin/fungsi/ prosedur yang memanggil dirinya sendiri.Bentuk dimana pemanggilan subrutinterdapat dalam body subrutinDengan rekursi, program akan lebih mudahdilihat
Bentuk rekursi bertujuan untuk :menyederhanakan penulisan programmenggantikan bentuk iterasi
Syarat bentuk rekursif:ada kondisi terminal (basis)ada subroutine call yang melibatkanparameter yang nilainya menuju kondisiterminal (recurrence)
Menghitung kompleksitas bentukrekursif
Untuk bentuk rekursif, digunakan teknikperhitungan kompleksitas dengan relasirekurens
Menghitung faktorialFunction Faktorial (input n : integer) → integermenghasilkan nilai n!, n tidak negatif
AlgoritmaIf n=0 then
Return 1Else
Return ( n*faktorial (n-1) )Endif
Menghitung faktorial
Kompleksitas waktu :untuk kasus basis, tidak ada operasiperkalian → (0)untuk kasus rekurens, kompleksitas waktudiukur dari jumlah perkalian (1) ditambahkompleksitas waktu untuk faktorial (n-1)
Menghitung faktorial
( ) ( )11 −+= nTnT
( ) ( )22211 −+=−++= nTnT
( ) ( )33312 −+=−++= nTnT
= …..
= n + T(0)= n + 0
Jadi T(n) = n → O(n)
Bagaimana memindahkan seluruh piringan (64 piringan)tersebutke sebuah tiang yang lain (dari A ke B); setiap kali hanya satupiringan yang boleh dipindahkan, tetapi tidak boleh ada piringanbesar di atas piringan kecil. Ada tiang perantara C.
B A C
Menara Hanoi
Procedure Hanoi (input n, A, B, C:integer)
AlgoritmaIf n=1 then
Write (‘Pindahkan piringan dari’,A,’ke’,B)Else
Hanoi(n-1,A,C,B)Writeln(‘Pindahkan piringan dari’,A,’ke’,B)Hanoi(n-1,C,B,A)
Endif
Menara Hanoi
( ) ( )121 −+= nTnT
( )( ) ( )222122121 2 −++=−++= nTnT( )( ) ( )32221321221 322 −+++=−+++= nTnT
= …….
( ) ( )122.......221 122 Tnn −− +++++=
1.2.....221 12 −++++= n
12 −= n
( ) 12 −= nnT
= kira-kira 600 milyar tahun (???!!!)
1264 − detik
= 10.446.744.073.709.551.615
adalah jumlah seluruh perpindahan piringan dari satutiang ke tiang lainnya.Jika perpindahan 1 piringan butuh waktu 1 detik, makawaktu yang dibutuhkan :
Menara Hanoi
Persoalan Minimum & Maksimumprocedure 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-
elemennyaKeluaran: nilai maksimum dan nilai minimum tabelDeklarasi
min1, min2, maks1, maks2 : integer
Persoalan Minimum & Maksimumif i=j then 1 elemen
min←Aimaks←Aielseif (i = j-1) then 2 elemen
if Ai < Aj thenmaks←Ajmin←Ai
else maks←Aimin←Aj
endif
Persoalan Minimum & Maksimumelse lebih dari 2 elemen
k←(i+j) div 2 bagidua tabel pada posisi k MinMaks2(A, i, k, min1, maks1)MinMaks2(A, k+1, j, min2, maks2)if min1 < min2 then
min←min1else
min←min2endif
if maks1<maks2 thenmaks←maks2
else maks←maks2
endif
Persoalan Minimum & MaksimumPenyelesaian: Asumsi: n = 2k, dengan k bilangan bulat positif, makaT(n) = 2T(n/2) + 2
= 2(2T(n/4) + 2) + 2 = 4T(n/4) + 4 + 2
= 2k – 1 T(2) + ∑−
=
1
12
k
i
i
= 2k – 1 ⋅ 1 + 2k – 2
= ...= 4 (2T(n/8) + 2) + 4 + 2 = 8T(n/8) + 8 + 4 + 2
Persoalan Minimum & Maksimum
( ) ( ) 222 log1log 22
−+= − nn
= n/2 + n – 2
( ) 223 −= nnT
( ) ( )nOnT ∈
Jadi
= 3n/2 – 2
Untuk mengetahui kompleksitas bentuk rekursif, maka( )nT harus diubah dalam bentuk yang bukan rekursif
Bagaimana mengubah bentuk rekursif ke non rekursif ?Ada dua macam cara untuk menyelesaikan masalah ini,yaitu cara coba-coba dan dengan persamaan karakteristik :
1. Cara coba-coba (deret).2. Metode dengan persamaan karakteristik
Cara coba-coba.
Cara ini dilakukan dengan menentukan poladeret yang terbentuk (cara deret). Contohuntuk cara ini telah ditunjukkan dalammencari kompleksitas waktu untuk beberapabentuk rekursif sebelumnya. Cara ini agaksulit dan perlu pengalaman.
Cara coba-coba
T(1) = T(2) = a
( ) ( ) ( ) babaabTTT +=++=++= 2213( ) ( ) ( ) babbaabTTT 232324 +=+++=++=
( ) ( ) ( ) babbababTTT 45232435 +=++++=++=( ) ( ) ( ) bbababTTT ++++=++= 4523546
= 8a + 7b
→ Sulit untuk diformulasikan
Metode dengan persamaankarakteristik
Bentuk Persamaan Linier Tak HomogenLangkah-langkahnya adalah sebagai berikut:
1. Perhatikan bentuk rekursifnya :
( ) ( ) ( ) ( ) ( )nfknTanTanTanT k +−++−+−= ....21 21
( ) ( )nPtnf dn=
( ) kdd
d bnbnbnP +++= − ....110
→ polinomial dengan orde / derajat terbesar d
→ didapatkan nilai t dan d
Metode dengan persamaankarakteristik2. Asumsi ( )nf = 0 → bentuk homogen
( ) ( ) ( ) ( )knTanTanTanT k −++−+−= ....21 21
( ) nxnT =Misalkn
knnn xaxaxax −−− +++= ...2
21
1
0...22
11 =−−−− −−− kn
knnn xaxaxax
knx −Persamaan di atas kemudian dibagi denganknx −(ini jika adalah suku dengan orde terkecil), sehingga
didapatkan : 0...22
11 =−−−− −−
kkkk axaxax
Metode dengan persamaankarakteristik3. Diperoleh persamaan karakteristik :
( )( ) 0... 122
11 =−−−−− +−− d
kkkk txaxaxax
t dan d didapatkan dari langkah 1.
Metode dengan persamaankarakteristik4. Ada 2 macam kasus :
,...,, 321 xxxKasus 1Semua akar karakteristik berbedaSolusi Umum:
( ) ....332211 +++= nnn xcxcxcnT,...,, 321 ccc adalah konstanta yang harus dicari
xxx === ....21
Kasus 2Semua akar karakteristik sama, yaituSolusi Umum:
( ) ( ) nxncncnccnT ....34
2321 ++++=
Masalah faktorial
( ) ( )⎩⎨⎧
>+−=
=0,110,0
nnTn
nT
( ) ( ) 11 +−= nTnT
( ) 1=nf
( )0.11 nn=
(i)
→ t = 1 d = 0
Masalah faktorial(ii) persamaan homogen (kita anggap f(n)=0)
( ) ( )1−= nTnT( ) ( ) 01 =−− nTnT
01 =− −nn xx( ) nxnT =Misal , maka
1−nxPersamaan terakhir ini dibagi dengan
(suku dengan orde terkecil), didapatkan :
⇔ x – 1 = 0
Masalah faktorial
11 =x 12 =x
(iii) Persamaan karakteristik(x – 1)(x – 1) = 0Akar – akarnya adalah :
Akar sama, jadi termasuk kasus 2, sehingga solusi umum :
( ) ( ) nnccnT 1.21 +=
ncc 21 +=
Masalah faktorialCari c1 dan c2 :
Dari relasi rekurens :
( ) 00 =T
( ) ( ) 1101 =+= TT………..(*)
Dari solusi umum:
( ) 10 cT =………(**)( ) 211 ccT +=
Masalah faktorialDari (*) dan (**) didapatkan persamaan :
01 =c121 =+ cc
Dari kedua persamaan terakhir ini diperoleh
01 =c 12 =cdanDengan demikian diperoleh :
( ) nccnT 21 += = n
( ) nnT = ( ) ( )nOnT ∈Jadi kompleksitas waktunya adalah dan
Kasus Menara HanoiRelasi rekurrens :
( ) ( )⎩⎨⎧
>−+=
=1,1211,1
nnTn
nT
( ) ( ) 112 +−= nTnT(i)
( ) 1=nf( )0.11 nn=
→ t = 1 d = 0
Kasus Menara Hanoi
( ) nxnT =(ii) Persamaan homogen
Misal
( ) ( )12 −= nTnT
( ) ( ) 012 =−−⇔ nTnT
02 1 =− −nn xx1−nxPersamaan terakhir ini dibagi
didapatkan :x – 2 = 0
(suku dengan orde terkecil),
Kasus Menara Hanoi
21 =x 12 =x
(iii) Diperoleh persamaan karakteristik :(x – 2)(x – 1) = 0Dari persamaan karakterik diperoleh akar-akar :
→ akar-akar berbeda, sehingga termasuk dalam kasus 1, sehingga solusi umum:
( ) nn ccnT 12 21 +=
212 cc n +=
Kasus Menara HanoiCari c1 dan c2 :
Dari relasi rekurrens : Dari Solusi umum:
( )( ) 32
11==
TT ( )
( ) 21
21
4221
ccTccT
+=+=………(*) ……(**)
Dari (*) dan (**)
3412
21
21
=+=+
cccc
c1 = 1 dan c2 = -1
Kasus Menara Hanoi( ) 212 ccnT n +=Jadi
12 −= n
Jadi kompleksitas waktu :
( ) 12 −= nnT
( ) ( )nOnT 2∈Kompleksitas waktu Asimptotik:
Persoalan Minimum & MaksimumRelasi Rekurrens
( )( )⎪
⎩
⎪⎨
⎧
>+==
=2,222,11,0
2 nTnn
nTn
( ) 2=mf
( ) 22222 +⎟⎟
⎠
⎞⎜⎜⎝
⎛=
mm TT
( ) 222 1 += −mT
( ) ( ) 22 2 += nTnT(i) mn 2=Dimisalkan ( )021 mm=
→ t = 1 d = 0
Persoalan Minimum & Maksimum
( ) ( )1222 −= mm TT(ii) Persamaan homogen :
( ) ( ) 0222 1 =− −mm TT
02 1 =− −mm xx1−mxPersamaan terakhir ini dibagi dengan
( ) mm xT =2Misal
(suku dengan orde terkecil), didapatkan :
x – 2 = 0
Persoalan Minimum & Maksimum(iii) Diperoleh persamaan karakteristik :
( )( ) 012 =−− xx21 =x 12 =xAkar-akarnya :
Solusi umum :
( ) mmm ccT 122 21 +=
( ) nn ccnT log2
log1
22
12 +=
21 cnc +=
mn 2=Karena nm log2=→
Persoalan Minimum & MaksimumCari c1 dan c2 :Dari relasi rekurrens : Dari solusi umum:( ) ( ) 2224 += TT = 4 ……..(*)( ) ( ) 2428 += TT = 10
( )( ) 21
21
8844
ccTccT
+=+=
………..(**)
Dari (*) dan (**)
44 21 =+ cc108 21 =+ cc
23
1 =c22 −=c
( ) 223
−=nnT
( ) ( )nOnT ∈
Jadi kompleksitas waktu :
Kompleksitas waktu asimptotik
Bentuk Persamaan Linier Homogen
Bentuk Persaman Linier Homogen adalah :
( ) ( ) ( ) ( ) ( )nfknTanTanTanT k +−++−+−= ....21 21
Dengan ( )nf = 0
Jadi bentuk Persaman Linier Homogen adalah :
( ) ( ) ( ) ( )knTanTanTanT k −++−+−= ....21 21
Deret FibonacciRelasi rekurrens :
( )( ) ( )⎪
⎩
⎪⎨
⎧
>−+−==
=1211100
nnTnTnn
nT
( ) nxnT =
(i) Persamaan rekursi : ( ) ( ) ( )21 −−−− nTnTnT =0
, makaMisal
021 =−− −− nnn xxx
Deret Fibonacci2−nxPersamaan terakhir ini dibagi , didapatkan :
12 −− xx = 0 → persamaan karakteristik
(ii) Akar persamaan karakteristik adalah :
251
1+
=x 251
1−
=x
( )nn
ccnT ⎟⎟⎠
⎞⎜⎜⎝
⎛ −+⎟
⎟⎠
⎞⎜⎜⎝
⎛ +=
251
251
21
dan
→ akar-akar berbeda, sehingga termasuk dalam kasus 1,sehingga solusi umum:
Deret Fibonacci(iii) Cari c1 dan c2 :Dari relasi rekurrens dan solusi umum diperoleh :
( )
( ) 1251
2511
0251
2510
1
2
1
1
0
2
0
1
=⎟⎟⎠
⎞⎜⎜⎝
⎛ −+⎟
⎟⎠
⎞⎜⎜⎝
⎛ +=
=⎟⎟⎠
⎞⎜⎜⎝
⎛ −+⎟
⎟⎠
⎞⎜⎜⎝
⎛ +=
ccT
ccT
Dari 2 persamaan terakhir ini, diperoleh
51
c1 =51−dan c2 =
Deret Fibonacci
(iv) Masukkan ke solusi umum kembali, sehingga didapatkan :
( )
( ) ( )
5251
251
nn
nT⎥⎦
⎤⎢⎣
⎡ −−⎥
⎦
⎤⎢⎣
⎡ +
=
Contoh lainMisal kita punya relasi rekurrens :
( )
( ) ( ) ( )⎪⎪⎩
⎪⎪⎨
⎧
>−+−−−===
=
23921517221100
nnTnTnTnnn
nT
Contoh lain(i) Persamaan rekursi :
( ) ( ) ( ) ( ) 03921517 =−−−+−− nTnTnTnT
Misal T(n) = xn, maka persamaan di atas menjadi :
09157 321 =−+− −−− nnnn xxxx3−nxPersamaan terakhir ini dibagi
(suku dengan orde terkecil) didapatkan :
( )( )( ) 03319157 23 =−−−=−+− xxxxxx→ persamaan karakteristik
Contoh lain
11 =x 332 == xx
( ) nnn ncccnT 331 321 ++=
(ii) Akar persamaan karakteristik adalah :
→ tidak semua akar-akarnya sama (juga tidak semua berbeda)jadi perpaduan antara kasus 1 dan kasus 2, sehingga solusi umumnya adalah :
Contoh lain
( )( )( ) 2)3)(0(312
1)3)(0(311
0)3)(0(310
23
22
21
13
12
11
03
02
01
=++=
=++=
=++=
cccT
cccT
cccT
(iii) Cari c1 dan c2 dan c3:Dari relasi rekurrens dan solusi umum diperoleh :
Disederhanakan menjadi :
2189133
0
321
321
21
=++=++
=+
cccccc
cc 11 −=c
31−c2 = 1, dan c3 =
Contoh lain
( ) ( )( ) ( )( ) ( )nnn nnT 3313111 ⎟⎠⎞
⎜⎝⎛−++−=
1331 −−+−= nn n
(iv) Masukkan ke solusi umum kembali, sehingga didapatkan :
)3()( nnOnT ∈
Teorema Master
Cara yang telah dibahas didepan adalahbagaimana mencari T(n) untuk algoritmarekursif, yang berlaku secara umum. Khusus untuk strategi Divide & Conquer, kitabisa juga mencari kompleksitas waktuasimptotik (ingat! hanya kompleksitas waktuasimptotik, bukan T(n) ) denganmenggunakan teorema Master.
Teorema Master
( ) ( ) ( )nfbnaTnT +=
( )
Teorema Master :Untuk suatu general Divide and Conquer recurrence :
( )dnOnf ∈Jika
0≥ddimana dalam persamaan general Divide
and Conquer recurrence di atas, maka
( )( )( )( )⎪
⎩
⎪⎨
⎧
>=<
∈da
dd
dd
banObannObanO
nTb log
log
ΘΩ(analogous results hold for the and notations, too)