= =
=
= = =
= =
=
=
+
=
+
=
=
~
~ + ~ + + + =
=
= + + + + =
+
~ + + + =
~
+ +
= + + + =
n
i
n
n
i
i
n
n
n
i
i
k k k k
n
i
k
n
i
n n i
n
a
a
a
a a a a
n
k
n i
n
n n n
n i
1
1
2
1
1
1
1
2
0
1
1
3 2 2 2
1
2
lg lg
... 5772 . 0 ; ln ... 1
) 1 (
1
1
... 1
1
1
... 2 1
3
1
6
) 1 2 )( 1 (
... 2 1
2.2 ALGORITMA REKURSIF
Algoritma rekursif adalah sebuah fungsi, prosedur, metode yang memanggil
dirinya sendiri dan bentuk dimana pemangilan subrutin terdapat dalam body subrutin,
seperti halnya struktur pengulangan seperti for..loop, while.do, repeatuntil dan
lain-lain yang memiliki kondisi awal dan akhir pengeksekusian,algoritma rekursif
juga memiliki kondisi yaitu base case dan end case, Base case menunjukan batas
bawah berapa kali algoritma rekursif akan memanggil dirinya sendiri.serta end case
adalah kondisi berhentinya atau jumlah maksimal inputan yang akan diproses.Selain
syarat kondisi basis diatas subrutin call yang melibatkan parameter yang nilainya
menuju kondisi terminal (recurrence) harus terpenuhi
.
- Efisiensi Waktu Algoritma Recursive
Langkah-langkah dalam analisis matematis dari algoritma rekursif:
1. Tentukan parameter n yang menunjukkan ukuran input
2. Tentukan operasi dasar algoritma (loop terdalam)
3. Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi basic
operation sama atau berbeda.
4. Tentukan relasi rekurens, dengan kondisi awal yang tepat untuk berapa kali
algoritma akan dijalankan
5. Menyelesaikan solusi relasi rekurens yang didapat di nomor 4 (t(n))
6. Tentukan g(n) dimana t(n) termasuk salah satu O(g(n)), (g(n)), O(g(n)).
2.3 ALGORITMA NON REKURSIF
Efisiensi Waktu Algoritma Nonrecursive
1. Tentukan parameter n yang menunjukkan ukuran input
2. Tentukan operasi dasar algoritma (loop terdalam)
3. Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi basic
operation bisa berbeda.
4. Tentukan rumus sigma yang menunjukkan berapa kali operasi dasar
dijalankan C(n)
5. Selesaikan rumus sigma untuk menghitung banyaknya operasi dasar
dijalankan
6. Tentukan g(n) dimana t(n) termasuk salah satu O(g(n)), (g(n)), O(g(n)).
BAB III
PEMBAHASAN SOAL
3.1 Algoritma Rekursif
a. menghitung faktorial
pembahasan :
Function Faktorial (input n : integer) integer
{menghasilkan nilai n!, n tidak negatif}
Algoritma :
If n=0 then
Return 1
Else
Return ( n*faktorial (n-1) )
Endif
analisis :
- Ukuran input = n
- Kompleksitas waktu:
Untuk kasus basis, tidak ada operasi perkalian
T(0) = 0 (kondisi awal)
Untuk kasus rekurens, kompleksitas waktu diukur dari jumlah perkalian (1)
ditambah kompleksitas waktu untuk faktorial (n-1)
- Kompleksitas waktu
T(n) =1+T(n-1)
T(n) =1+1+T(n-2)=2+T(n-2)
T(n) =2+1+T(n-3)=3+T(n-3)
=
=
= n+T(0)
= n + 0
Jadi T(n) = n
T(n) O(n)
b. Menara Hanoi
Bagaimana memindahkan seluruh piringan tersebut ke sebuah tiang yang lain (dari A
ke B); setiap kali hanya satu piringan yang boleh dipindahkan, tetapi tidak boleh ada
piringan besar di atas piringan kecil. Ada tiang perantara C.
pembahasan :
Procedure Hanoi (input n, A, B, C:integer)
Algoritma
If 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
- T(n)=2
n
+1 adalah jumlah seluruh perpindahan piringan dari satu tiang ke tiang
lainnya.
- Bila terdapat 64 tumpukan piringan da perpindahan 1 piringan butuh waktu 1
detik, maka waktu yang dibutuhkan : detik 2
64
1 detik
= 10.446.744.073.709.551.615 detik
= kira-kira 600 milyar tahun
3.2 Algoritma Non-Rekursif
a. Perkalian Matriks
pembahasan :
Algoritma PerkalianMatrik(A[0n-1,0n-1], B[0n-1,0n-1])
//mengalikan 2 matriks persegi berordo n
//input: 2 matriks A dan B
//output: Matriks C = AB
Algoritma :
for i 0 to n - 1 do
for j 0 to n 1 do
C[i,j] 0,0
for k 0 to n 1 do
C[i,j] C[i,j] + A[i,k] * B[k,j]
return C
analisis :
- Ukuran input = matriks ordo n
- Loop terdalam = perkalian dan penambahan calon operasi dasar
Perkalian dan pertambahan dilakukan tepat sekali dalam setiap
perulangan, sehingga kita tidak harus memilih antara dua operasi
- Jumlah dari total perkalian
=
=
= = = =
1
0
3 2
1
0
1
0
1
0
1
0
1
0
1 ) (
n
i
n
i
n
j
n
i
n
j
n
k
n n n n M
- Perkiraan waktu berjalannya algoritma pada mesin tertentu
3
) ( ) ( n c n M c n T
m m
= ~
- Perkiraan yang lebih akurat (termasuk penambahan)
3 3 3
) ( ) ( ) ( ) ( n c c n c n c n A c n M c n T
a m a m a m
+ = + = + ~
c
m
:waktu satu perkalian
c
a
:waktu satu tambahan
Notasi : ) (
3
n n O e
b. Max Element
pembahasan :
Berikut adalah algoritma untuk mencari elemen terbesar dari sekumpulan n bilangan:
ALGORITHM MaxElement (A[0..n-1])
//Input: Array A[0..n-1] dari bilangan real
//Output: Nilai dari elemen terbesar pada array A
algoritma :
max A[0]
for i 1 to n-1 do
if A[i] > max
max A[i]
return max
analisis :
- Ukuran input dari algoritma ini adalah jumlah elemen pada array, yaitu n.
- Operasi dasar yang paling banyak dieksekusi ada dalam loop for.
- Ada 2 operasi dalam loop: perbandingan A[i] >max dan assignment maxA[i].
- Karena operasi perbandingan dieksekusi pada tiap iterasi (dan operasi assignment
tidak), maka perbandingan dijadikan sebagai operasi dasar.
- Jumlah perbandingan pun tetap sama untuk semua variasi input array berukuran n,
shingga tidak perlu menghitung worst case, best case, dan average
- misalnya C(n) adalah jumlah eksekusi operasi perbandingan. dalam tiap loop,
terjadi 1 kali perbandingan. ini dieksekusi sebanyak (n-1) kali. sehingga C(n)
berjumlah :
()
() ()
VISUALISASI
a) Faktorial
b) Menara Hanoi
c) Perkalian matriks
d) Max Element
BAB IV
KESIMPULAN
Rekursif adalah sebuah teknik pemecahan masalah yang efisien untuk dipakai dalam
definisi dan algoritma, yang mana dalam pemakaiannya hanya melakukan sekali
pemanggilan. Tetapi akan menjadi sangat tidak efisien jika memanggil dua atau lebih
pemanggilan karena akan diperoleh kompleksitas waktu yang eksponensial.
LAMPIRAN
PERTANYAAN DAN JAWABAN
1. Penanya : Ni Putu Meri Sriyati (1208605026/Kelompok 6A)
Pertanyaan : Mengapa dalam T(n) O(n) memakai notasi O? Dan mengapa dalam
manipulasi penjumlahan penting terdapat pernyataan ) (
2
1
2 2
n n O e ?
Jawaban :
a. Pembuktian T(n) O(n)
Misalkan diberikan limit :
Sehingga 1 1
lim lim
) (
) (
lim
=
=
=
n n
n
n n g
n t
n
Jadi benar bahwa T(n) O(n)
b. Pembuktian ) (
2
1
2 2
n n O e
Misalkan diberikan limit:
Jika hasil:
0 maka OoG T
A
(n) < OoG T
B
(n) notasi : O
C maka OoG T
A
(n) = OoG T
B
(n) notasi :
maka OoG T
A
(n) > OoG T
B
(n) notasi :
Sehingga
2
1
2
1
lim
2
1
lim
2
2
=
=
n n
n
n
Jadi benar bahwa ) (
2
1
2 2
n n O e
) (
) (
lim
~
n T
n T
B
A
n
2. Penanya : Eka Ayuningsih (1208605001/Kelompok 7A)
Pertanyaan : Buktikan bahwa ) 2 ( ) (
n
O n T e ?
Jawaban :
Pembuktian
0
1
2 . 2 log
1 lim
2
lim
=
=
=
n n n
n
n
Jadi benar bahwa ) 2 ( ) (
n
O n T e
3. Penanya : Tutde Suputrawan (1208605007/Kelompok 5A)
Pertanyaan : Apa maksud dari terminal dan body fungsi?
Jawaban : Terminal adalah kondisi awal dari suatu fungsi rekursif, dimana
kondisi terminal adalah tempat perhentian fungsi rekursif, sedangkan body fungsi
mengandung fungsi rekursif . Pemanggilan fungsi yang berulang terdapat dalam bodi
fungsi.
Contoh:
If n=0 then
Return 1
Else
Return ( n*faktorial (n-1) )
Endif
Yang menjadi terminal adalah if (n=0) then return 1,
Yang menjadi bodi fungsi adalah return (n*factorial(n-1))