Anda di halaman 1dari 15

DESAIN ANALISIS DAN ALGORITMA

ANALISIS ALGORITMA NONREKURSIF DAN REKURSIF







KELOMPOK 2A
I GUSTI BAGUS HADI WIDHINUGRAHA (1208605010)
NI PUTU SINTYA DEWI (1208605017)
LUH GEDE PUTRI SUARDANI (1208605018)
I PUTU INDRA MAHENDRA PRIYADI (1208605020)



PROGRAM STUDI TEKNIK INFORMATIKA
JURUSAN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS UDAYANA
2013
KATA PENGANTAR

Puji syukur kami panjatkan kehadiran Tuhan Yang Maha Esa,karena berkat
rahmat dan karunia-Nya kami dapat menyelesikan tugas laporan mata kuliah Desain Analisis
Algoritma ini tepat waktu. Adapun laporan ini berjudul Analisis Algoritma Rekursif dan
Non-Rekursif. Laporan ini belumlah sempurna,maka dari itu kami akan senang sekali apabila
para pembaca dapat memberikan kritik/saran yang sifatnya membangun agar laporan ini
dapat lebih baik lagi



Jimbaran, 17 Oktober 2013
Penulis














BAB I
PENDAHULUAN

1.1 LATAR BELAKANG
Untuk memenuhi tugas kelompok mata kuliah Desain Analisis Algoritma mengenai
analisis algoritma Rekursif dan Non- Rekursif
1.2 RUMUSAN MASALAH
1. Bagaimana menganalisis algoritma Rekursif ?
2. Bagaimana menganalisis algoritma Non-Rekursif ?
3. Bagaimana cara mencari kompleksitas waktu pada algoritma Rekursif dan Non-
Rekursif ?
4. Bagaimana cara menentukan notasi asimptotik dari algoritma Rekursif dan Non-
Rekursif ?
1.3 TUJUAN
Adapun tujuan dari yang membahasa tentang analisis algoritma Rekursif dan Non-
Rekursif adalah :
1. Untuk mengetahui gambaran yang jelas tentang analisis algoritma Rekursif dan
Non- Rekursif.
2. Untuk mengetahui keterkaitan antara analisis asimptotik untuk kompleksitas
waktu dengan algoritma Rekursif dan Non- Rekursif .
1.4 MANFAAT
Membahas tentang algoritma Rekursif dan Non- Rekursif adalah :
1. Lebih mengetahui tentang algoritma Rekursif dan Non- Rekursif.
2. Dapat menganalisa kompleksitas waktu dari algoritma Rekursif dan Non-
Rekursif
3. Mengetahui kaitan kompleksitas waktu dari algoritma Rekursif dan Non-
Rekursif dengan notasi asimptotik
BAB II
LANDASAN TEORI

2.1 MANIPULASI PENJUMLAHAN PENTING
) (
2
1
2
) 1 (
... 2 1
limits integer upper & lower : ; 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 + =
=
=



= =
=
= = =
= =

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

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

Anda mungkin juga menyukai