Recursive Algorithm Analysis

Download Report

Transcript Recursive Algorithm Analysis

Design and Analysis of Algorithm
Recursive Algorithm Analysis
Aryo Pinandito, ST, M.MT - PTIIK UB
Apa itu fungsi rekursif?


Fungsi yang memanggil dirinya sendiri
Sebuah fungsi f juga merupakan fungsi rekursif jika
memanggil fungsi lain g dan di dalam g terdapat
pemanggilan f.
start
f
end
start
f
g
Sifat Penyelesaian Masalah dengan 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 base
case. Contoh: n!  (n-1)!  (n-2)!  . . . 1!, 0!.
Fungsi Rekursif: Tree
Format fungsi rekursif
if current case is base case
then solve it
else
redefine the problem using recursion case
Format fungsi rekursif

Cabang if berisi base case, sedangkan bagian elsenya berisi recursive case

Agar rekursi dapat berhenti input pada recursive
cases harus mendekati base case di setiap
pemanggilan fungsi rekursif
Latihan


Buatlah fungsi rekursif untuk menghitung nilai Xn.
Buat pohon rekursif untuk 45.
Jawaban

Algoritma: pangkat(X, n)



algoritma untuk menghitung nilai Xn secara rekursif
input : integer positif X dan n
output : nilai Xn
if n == 1
return X
else return (X * pangkat(X, n-1))

Pohon rekursif?
Latihan


Buatlah fungsi rekursif untuk menghitung bilangan
fibonacci ke n.
Buat pohon rekursif untuk fibonacci(4).
Jawaban

Algorithm fibonacci(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
else return (fib(n - 1) + fib(n - 2))

Pohon rekursif?
Analisa Efisiensi Algoritma Rekursif

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
else return (X * pangkat(X, n-1))

Analisis efisiensi waktu algoritma rekursif!
Langkah-langkah Umum Analisis Efisiensi
Waktu Algoritma Rekursif





Tentukan metrik untuk ukuran input
Identifikasi basic operation algoritma
Tentukan apakah untuk ukuran input yang sama
banyaknya eksekusi basic operation bisa berbeda
Tentukan persamaan rekursi yang menunjukkan
berapa kali basic operation dieksekusi
Cari rumus langsung yang menunjukkan banyaknya
basic operation dieksekusi
1: Metrik Untuk Ukuran Input




Sesuatu pada input yang jika membesar, maka
banyaknya pemanggilan fungsi rekursif bertambah
Pada kasus ini adalah nilai n. Jika n membesar, maka
banyaknya komputasi atau pemanggilan fungsi
rekursi bertambah
Untuk memahaminya coba gambar pohon
rekursifnya.
Efisiensi dinyatakan sebagai fungsi dari n
2: Basic operation

Pada algoritma rekursif merupakan salah satu
operasi pada kondisi seleksi base case atau bagian
recursive case
if n == 1

Basic operationnya dipilih = yang dilakukan 1 kali
setiap kali fungsi rekursif dipanggil
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
rekursif tetap.
Tidak ada best case, average case dan worst case Pada
fungsi rekrusif.
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 (X, n-1).
if n == 1


Hal ini menyebabkan secara internal basic operation
dieksekusi lagi.
Berapa kali banyaknya basic operation dieksekusi
untuk input n?
4: Persamaan Rekursif Banyaknya Eksekusi Basic
Operation


Jika C(n) menyatakan banyaknya basic operation
dieksekusi untuk input berukuran n dan C(n - 1)
menyatakan banyaknya basic operation dieksekusi
untuk input berukuran n-1,
Hubungan C(n) dan C(n - 1) dinyatakan dengan
C(n) = C(n-1) + 1 untuk n>1 (recursive case)
C(1) = 1, base case
4: Persamaan Rekursif Banyaknya Eksekusi Basic
Operation

Untuk mengetahui kelas efisiensi waktunya kita
harus menemukan persamaan langsung (non
recursive) dari C(n)
Perhitungan efisiensi waktu


Menggunakan metode backward substitution, cari
pola dari C(n) :
C(n) = C(n - 1) + 1
C(n) = (C(n - 2) + 1) + 1 = C(n) = C(n - 2) + 2
C(n) = (C(n - 3) + 1) + 2 = C(n) = C(n - 3) + 3
dst
Pola atau bentuk umum yang didapatkan adalah C(n)
= C(n - i) + i.
Perhitungan efisiensi waktu

Nilai initial condition C(1) disubtitusikan ke C(n - i)
pada bentuk umum C(n).
C(n) = C(n - i) + i
C(n) = C(1) + i
C(n) = i + 1
Perhitungan efisiensi waktu

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:
C(n) = n – 1 + 1
C(n) = n
C(n) merupakan anggota kelas efisiensi n

Apa artinya?
Example 2: Tower of Hanoi (1)





n disks on different sizes and three pegs
Initially, all disks are on the first peg in order of size.
The largest on the bottom and the smallest on top
The goal: move all disks to the third peg, using the
second one as an auxiliary
Move only one disk at a time
It is forbidden to place a larger disk on top of a
smaller one
22
CS3024-FAZ
Goal
Initial
Example 2: Tower of Hanoi (2)
Tower of Hanoi:
Recursive Solution (1)
3
1
2
ToH: Recursive Solution (2)

To move n>1 disks from peg 1 to peg 3 (with peg 2 as
an auxiliary):



Move recursively n-1 disk(s) from peg 1 to peg 2 (with
peg 3 as an auxiliary)
Move the largest disk from peg 1 to peg 3
Move recursively n-1 disk(s) from peg 2 to peg 3 (with
peg 1 as an auxiliary)
Recursive Pseudocode
FUNCTION MoveTower(disk, source, dest, spare):
IF disk == 0, THEN:
move disk from source to dest
ELSE:
MoveTower(disk - 1, source, spare, dest)
move disk from source to dest
MoveTower(disk - 1, spare, dest, source)
END IF
ToH: Analysis (1)




Input's size = the number of disks = n
Basic operation = moving one disk
The number of moves M(n) depends on n only: M(n)
= M(n-1) + 1 + M(n-1) ; for n>1
Recurrence relation:


M(n) = 2M(n-1) + 1 ; for n>1
M(1) = 1  initial condition
ToH: Analysis (2)


Backward substitution:
M(n) = 2M(n-1) + 1
= 2[2M(n-2)+1]+1=22M(n-2)+2+1
= 22 [2M(n-3)+1]+2+1=23M(n-3)+22+2+1
= 24M(n-4)+23+22+2+1
The pattern, after i substitution:
M(n) = 2iM(n-i) + 2i-1 + 2i-2 +..+ 2 + 1
= 2iM(n-i) + 2i - 1
ToH: Analysis (3)


Initial condition, n=1  i=n-1:
M(n) = 2iM(n-i) + 2i - 1
= 2(n-1)M(n-(n-1)) + 2(n-1) -1
= 2(n-1)M(1) + 2(n-1) - 1
= 2(n-1) + 2(n-1) - 1 = 2n - 1
Exponential algorithm!


This is the most efficient algorithm
It is the problem's intrinsic difficulty that makes it so
computationally difficult
Exercises (2)
Algorithm S(n)
//input: a positive integer n
if n = 1 return 1
else return S(n-1)+n*n*n
a.
b.
c.
What does this algorithm compute?
Set up and solve a recurrence relation for the
number of times the basic operation is
executed
How does this algorithm compare with the
straightforward non recursive algorithm for
computing this function?
Exercises (3)
3.
Write an algorithm to find the n-th Fibonacci
number recursively by using its definition.
Is it more efficient than the iterative algorithm to
find the same number?
31
CS3024-FAZ
Exercises (4)
4.
In the original version of the Tower of Hanoi
puzzle (Edouard Lucas, 1890), the world will end
after 64 disks have been moved from a mythical
Tower of Brahma.
a.
b.
Estimate the number of years it will take if priests
could move one disk per minute (they do not eat,
sleep, or die)
How many moves are made by the i-th largest disk
(1≤i ≤n) in this algorithm?
Questions?
감사합니 Grazias Kiitos
다Danke Gratias
‫ﺷﻜﺮﺍ‬
Terima Kasih 谢谢
Merci
धन्यवाद
Thank You
ありがとうございます