Anda di halaman 1dari 4

Estimasi Waktu Algoritma Fibonacci

2012 03.11

Nama NIM

: Wahyu Mulya Candra : 0910680061

blog.ub.ac.id/chundchandra Desain Analisis Algoritma


Analisis Algoritma Fibonacci

Input := n Fibonacci := 0 If n = 0 or n = 1 Then Fibonacci := n Else Then Fibonacci := Fibonacci (n-1) + Fibonacci (n-2) End if

Estimasi waktu algoritma fibonacci :

Menentukan matrix untuk ukuran input : n , karena n mempengaruhi jumlah pemanggilan fungsi rekursif

Basic operation : n = 0 and n = 1

Case : tidak terdapat best case , average case , maupun worst case karena untuk n tertentu banyaknya pemanggilan fungsi rekursif selalu sama

Persamaan rekursif banyaknya eksekusi basic operation :

Hubungan C(n) dengan C(n-1) adalah : C(n) = C(n 1) + 1 untuk n > 1 (recursive case) C(1) = 1, base case C(n-1) = C(1)

C(n) = C(n-1) + C (n-2) + C(1) Alternatif, kita dapat menggunakan pohon rekursif dengan kedalaman n dan secara intuitif fungsi asimtotik ini adalah O(2n) . Kita dapat membuktikan estimasi ini dengan cara induksi Base n=1 Asumsikan C(n-1) = O(2n-1) C(n) C(n) , kemudian

= C(n-1) + C(n-2) + C(1) , adalah sama dengan = O(2n-1) + O(2n-2) + C(1) = O(2n)

Dan T(n) = Cop x C(n) = 1 x 2n

Deretan Fibonacci, Iteratif & Rekursif


Posted on March 26, 2012

Kebetulan pagi-pagi ada yang nanya gw soal gimana cara ngerjain program deretan Fibonacci. Sebenernya sih bahasannya mirip dengan waktu gw ngebahas faktorialbeberapa waktu yang lalu, cuma kasusnya sedikit lebih ribet. Deretan Fibonacci ini bentuknya kayak begini. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, Di atas ini gw ngasih deretan Fibonacci mulai dari bilangan pertama sampe bilangan kesepuluh. Di deretan Fibonacci ini bilangan pertama & keduanya udah pasti nilainya 1, untuk bilangan ketiga & seterusnya dipakai rumus ini. F(n) = F(n-1) + F(n-2)

F(n) F(n-1) F(n-2)

nilai bilangan ke-n di deretan Fibonacci nilai bilangan ke-(n-1) di deretan Fibonacci nilai bilangan ke-(n-2) di deretan Fibonacci

Jadi bilangan ketiga sama dengan bilangan pertama ditambah bilangan kedua, bilangan keempat sama dengan bilangan kedua ditambah bilangan ketiga, bilangan kelima sama dengan bilangan ketiga ditambah bilangan keempat, & seterusnya sampe bilangan ke-n. Nah, sekarang gimana kalo itu dibuat jadi program? Dari bentuk rumusnya sih udah keliatan kalo deretan Fibonacci ini lebih gampang dibikin programnya pake fungsi rekursif. Tapi gimana kalo harus pake cara iteratif? Masalahnya sih tadi itu gw ditanyain buat tugas kuliah, & materi kuliahnya belum sampe ke fungsi rekursif. Jadi dikerjainnya harus pake cara yang udah diajarin, kalo begini ya mau nggak mau harus bikin versi iteratifnya dulu. Function yang dipake nanti bentuknya kayak begini buat versi iteratifnya.

int iterativeFibo (int n)


{

if (n == 1 || n == 2) return 1; else
{

int f1 = 1; int f2 = 1;

int fn; for (int i = 3; i <= n; i++)


{ fn = f1 + f2; f1 = f2; f2 = fn; }

return fn;
} }

Variabel f1 & f2 gw pake buat nyimpen nilai bilangan di posisi n-1 & n-2, variabel fn gw pake buat nyimpen nilai bilangan di posisi n di deretan Fibonacci. Looping for-nya gw pake mulai dari nilai n=3, soalnya untuk nilai n=1 & n=2 udah ditangani perintah if. Jadi kalo nilai n yang diinput 3 atau lebih programnya bisa langsung mulai loopingnya dari angka 3, nggak perlu lagi ngitung untuk posisi n=1 & n=2. Lagian nilai untuk posisi n=1 & n=2 udah diset di variabel f1 & f2, jadi mulai dari n=3 kita bisa langsung ngitung pake rumus di atas tadi. Di dalam looping for itu, nilai f1 & f2 bakal diganti dengan nilai bilangan di posisi n-1 & n-2 untuk posisi n=i, jadi perhitungan nilai fn bisa terus dihitung pake penjumlahan nilai variabel f1 & f2. Kalo loopnya udah selesai, function ini bakal ngembaliin nilai fn. Untuk fungsi rekursifnya sendiri sih pendek banget, bener-bener persis sama dengan rumus yang gw kasih di awal post tadi.

int recursiveFibo (int n)


{

if (n == 1 || n == 2) return 1; else return recursiveFibo(n-1) + recursiveFibo(n-2);


}

Anda mungkin juga menyukai