Anda di halaman 1dari 36

ANALISIS ALGORITMA

REKURSIF DAN
NONREKURSIF

KELOMPOK 2A
I GUSTI BAGUS HADI WIDHINUGRAHA
(1208605010)
NI PUTU SINTYA DEWI
(1208605017)
LUH GEDE PUTRI SUARDANI (1208605018)
I PUTU INDRA MAHENDRA PRIYADI
(1208605020)
DESAIN ANALISIS DAN ALGORITMA
PENDAHULUAN
Bagaimana menganalisis algoritma Rekursif ?
Bagaimana menganalisis algoritma Non-
Rekursif ?
Bagaimana cara mencari kompleksitas waktu
pada algoritma Rekursif dan Non- Rekursif ?
Bagaimana cara menentukan notasi
asimptotik dari algoritma Rekursif dan Non-
Rekursif ?
Manipulasi Penjumlahan Penting
) (
2
1
2
) 1 (
... 2 1
bawah dan atas limit integer : ; 1 1
) (

2 2
1 0
1 1 1
1 1
n n
n n
n i i
u l l u
b a b a
a c ca
n
i
n
i
u
l i
u
i
i
u
i
i
u
i
i i
u
i
i
u
i
i
O e ~
+
= + + + = =
s + =
=
=



= =
=
= = =
= =
Manipulasi Penjumlahan Penting

=
=
+
=
+
=
=
~
~ + ~ + + + =
=

= + + + + =
+
~ + + + =
~
+ +
= + + + =
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

Algoritma Rekursif
Bentuk Rekursif
Suatu subrutin/fungsi yang memanggil dirinya
sendiri.
Pemanggilan fungsi yang berulang terdapat
dalam bodi fungsi
Dengan rekursif, program akan lebih mudah
dilihat
Tujuan Bentuk Rekursif
Menyederhanakan penulisan program
Menggantikan bentuk iterasi

Syarat Bentuk Rekursif
Ada kondisi terminal (basis)
Ada subroutine call yang melibatkan
parameter yang nilainya menuju kondisi
terminal (recurrence)

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)), atau (g(n))
Contoh
Menghitung faktorial
Menar hanoi
Menghitung Faktorial
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 1
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)

Analisis 2
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)

Visualisasi
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.
Algoritma
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

Relasi Rekurens
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

Visualisasi
Algoritma Non Rekursif
Efisiensi Waktu Algoritma
Nonrekursif
Langkah-langkah dalam analisis matematis dari
algoritma nonrekursif:
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 operasi dasar yang dilakukan
sama atau berbeda.
4. Tentukan rumus sigma yang menunjukkan berapa kali
operasi dasar dijalankan.
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)), atau (g(n))
Contoh:
Perkalian Matriks
Max Element
Contoh1. Perkalian Matriks
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

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
Contoh1. Analisis(1)
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
Contoh1. Analisis (2)
Perkiraan waktu berjalannya algoritma pada
mesin tertentu


Perkiraan yang lebih akurat (termasuk
penambahan)


c
m
:waktu satu perkalian
c
a
:waktu satu tambahan
3
) ( ) ( n c n M c n T
m m
= ~
3 3 3
) ( ) ( ) ( ) ( n c c n c n c n A c n M c n T
a m a m a m
+ = + = + ~
Visualisasi
Contoh2. Algoritma
MaxElement
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
max A[0]
for i 1 to n-1 do
if A[i] > max
max A[i]
return max
Contoh2. Analisis (1)
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 max A[i].
Karena operasi perbandingan dieksekusi pada
tiap iterasi (dan operasi assignment tidak), maka
perbandingan dijadikan sebagai operasi dasar.
Contoh2. Analisis (2)
Visualisasi
Pertanyaan
Mengapa dalam T(n) O(n) memakai notasi
O? Dan mengapa dalam manipulasi
penjumlahan penting terdapat pernyataan ?
(Meri Sriyati)
Buktikan bahwa ? (Eka
Ayuningsih)
Apa maksud dari terminal dan body fungsi?
(Tutde Suputrawan)
) 2 ( ) (
n
O n T e
Pembahasan
1. 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)
Pembuktian

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 :

) (
2
1
2 2
n n O e
) (
) (
lim
~
n T
n T
B
A
n
Sehingga


Jadi benar bahwa

2
1
2
1
lim
2
1
lim
2
2
=

=
n n
n
n
) (
2
1
2 2
n n O e
2. Pembuktian




Jadi benar bahwa

) 2 ( ) (
n
O n T e
0
1
2 . 2 log
1
lim
2
lim
=

=

=

n
n
n
n
n
) 2 ( ) (
n
O n T e
3. 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 dalam pseudocode faktorial, yang
menjadi terminal adalah if (n=0) then return 1,
yang menjadi bodi fungsi adalah return
(n*factorial(n-1))