Design
and
Analysis
Algorithm
Contents
Contents
Format Fungsi Rekursif
2
Fungsi Rekursif
3 1
Analisa Efisiensi Algoritma Rekursif
Apa itu fungsi rekursif?
Fungsi yang memanggil dirinya sendiri
Sebuah fungsi f juga merupakan fungsi rekursif jika memanggil fungsi lain g dan di dalam gApa itu fungsi rekursif?
Permasalahan yang dapat diselesaikan oleh fungsi rekursif memiliki sifat
Memiliki kasus sederhana yang dapat langsung diselesaikan (base case). Contoh 0! = 1.
Kasus yang kompleks dapat diuraikan menjadi kasus yang identik dengan ukuran yang lebih kecil
(recursive cases). Contoh: n! = n * (n-1)!
Dengan menerapkan karakteristik 2 berulang-ulang,
recursive cases akan mendekati dan sampai pada
Format Fungsi Rekursif
if this base case
solve it else
Format Fungsi Rekursif
Cabang if berisi base case, sedangkan bagianelsenya berisi recursive case
Agar rekursi dapat berhenti input recursiveLatihan
Buatlah fungsi rekursif untuk menghitung nilai Xn
Pohon rekursifnya?Algorithm pangkat(X, n)
//algoritma untuk menghitung nilai Xn secara rekursif
//input : integer positif X dan n //output : nilai Xn
if n = 1
return X
Latihan
Buatlah fungsi rekursif untuk menghitung bilangan fibonacci ke n
Pohon rekursifnya?Algorithm fib(n)
//algoritma untuk menghitung bilangan fibonacci ke n //secara rekursif
//input : n
//output : bilangan fibonacci ke n
if n = 0 or n = 1
return n
Analisa Efisiensi Algoritma Rekursif
Analisalah efisiensi waktu algoritma rekursifAlgorithm pangkat(X, n)
//algoritma untuk menghitung nilai Xn secara rekursif
//input : integer positif X dan n //output : nilai Xn
if n = 1
return X
Analisa Efisiensi Algoritma Rekursif
Langkah-langkah umum untuk menganalisa efisiensi waktu algoritma rekursif
1.Tentukan metrik untuk ukuran input
2.Identifikasi basic operation algoritma
3.Tentukan apakah untuk ukuran input yang sama banyaknya eksekusi basic operation bisa berbeda
4.Tentukan persamaan rekursi yang menunjukkan berapa kali basic operation dieksekusi
Analisa Efisiensi Algoritma Rekursif
1 : Metrik untuk ukuran input
Sesuatu pada input yang jika membesar, maka banyaknya pemanggilan fungsi rekursifbertambah
Pada kasus ini adalah nilai n. Jika n membesar, maka banyaknya komputasi atau pemanggilan fungsi rekursi bertambahAnalisa Efisiensi Algoritma Rekursif
2 : Basic operation
Pada algoritma rekursif merupakan salah satu operasi pada kondisi seleksi base case atau bagian recursive case
Basic operationnya dipilih = yang dilakukan 1 kali setiap kali fungsi rekursif dipanggilAnalisa Efisiensi Algoritma Rekursif
3 : Case
Apakah ada best case, average case dan worst case?
Untuk input n tertentu misal 5, recursion treenya selalu sama. Banyaknya komputasi /pemanggilan fungsi rekursi tetap.
Analisa Efisiensi Algoritma Rekursif
4 : Persamaan rekursif banyaknya eksekusi basic operation
Jika algoritma pangkat dieksekusi dengan input (X, n) maka basic operation dieksekusi satu kali. Namun
pada saat eksekusi, algoritma tersebut juga
memanggil dirinya sendiri dengan input (A, B-1).
Hal ini menyebabkan secara internal basic operation dieksekusi lagi.
Berapa kali banyaknya basic operation dieksekusi untuk input n?
Analisa Efisiensi Algoritma Rekursif
4 : Persamaan rekursif banyaknya eksekusi basic operation
Jika C(n) menyatakan banyaknya basicoperation dieksekusi untuk input berukuran n dan C(n - 1) menyatakan banyaknya basic operation dieksekusi untuk input berukuran n-1,
Analisa Efisiensi Algoritma Rekursif
5 : Rumus langsung yang menunjukkan banyaknya basic operation dieksekusi
Analisa Efisiensi Algoritma Rekursif
5 : Rumus langsung yang menunjukkan banyaknya basic operation dieksekusi
Analisa Efisiensi Algoritma Rekursif
5 : Rumus langsung yang menunjukkan banyaknya basic operation dieksekusi
Nilai initial condition C(1) disubtitusikan ke C(n -i) pada bentuk umum C(n).Analisa Efisiensi Algoritma Rekursif
5 : Rumus langsung yang menunjukkan banyaknya basic operation dieksekusi
Subtitusi tersebut mensyaratkan C(n - i) = C(1) atau n – i = 1
i = n – 1
nilai i = n – 1 disubtitusikan ke bentuk umum C(n) = i + 1 sehingga
Analisa Waktu Algoritma
Pada algoritma Xn
Untuk bentuk rekursif, digunakan teknik perhitungan dengan relasi rekurens Untuk kasus basis, tidak ada operasi perkalian (0)
Analisa Waktu Algoritma
Relasi rekurens
T(n)=0 untuk n=1
T(n)=(n-1)+1 untuk n>1
Analisa waktu:Latihan 2
Buatlah fungsi rekursif untuk menghitung nilai faktorial bilangan n
Buat pohon rekursif untuk faktorial(5)Soal 1
Buatlah fungsi rekursif untuk menghitung permasalahan Menara Hanoi
Bagaimana memindahkan piringan di A kesebuah tiang B; setiap kali hanya satu piringan yang boleh dipindahkan, tetapi tidak boleh ada piringan besar di atas piringan kecil. Ada tiang perantara C
Analisis efisiensi algoritma ?Algorithm Hanoi(n, A, B, C)
if n = 1
pindahkan piringan A ke B else
Hanoi(n-1,A,C,B)
pindahkan piringan A ke B Hanoi(n-1,C,B,A)
Relasi rekurens : T(n) = 1 untuk n=1
T(n) = 2T(n-1) + 1 untuk n>1
Analisis waktu:Bukti Pernyataan Pendeta
T(n) = 2n-1
Jumlah seluruh perpindahan piringan. Jikaperpindahan 1 piringan membutuhkan waktu 1 detik, maka waktu yang dibutuhkan untuk
memindahkan 64 piringan : 264 -1 detik
= 10.446.744.073.709.551.615
Soal 2
Algoritma Fibonacci adalah algoritma rekursif yang bertujuan untuk menampilkan angka fibonacci.
𝐹 𝑛 = 0,1, 𝑗𝑖𝑘𝑎 𝑛 = 0𝑗𝑖𝑘𝑎 𝑛 = 1
𝐹 𝑛 − 1 + 𝐹 𝑛 − 2 , 𝑗𝑖𝑘𝑎 𝑛 > 1
Pertanyaan :
a. Gambarkan pohon rekursifnya untuk fib(5) !
b. Analisis dan hitung kompleksitas dari
C(n) = C(n-1) + C(n-2) + 1 !
(diasumsikan C(1)=1 dan C(0)=1).
Soal 2
Desainlah algoritma untuk menghitung 2n untuksemua n integer positif berdasarkan konsep 2n = 2n−1 + 2n−1.
Buatlah persamaan rekursifnya lalu hitung estimasi waktunya, basic operationya adalah penambahan.
Gambarkan gambar pohon rekursifnya danhitung jumlah pemanggilan yang dilakukan n=4
Soal 3
Apa tujuan dari Algoritma ini?Soal 4
Perhatikan algoritma rekursif untuk menghitung S(n) = 13 + 23 + . . . + n3.
Buatlah persamaannya lalu hitung estimasi waktu ekseskusi basic operationya(multiplication)