Pertemuan 4-5:
Correctness proof of algorithm: recursive algorithm
1. Recall on Recursive Algorithm
3. Soal Latihan
Contoh rekursi:
0 , jika n = 0
f ib(n) = 1 , jika n = 1 .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
0 , jika n = 0
f ib(n) = 1 , jika n = 1 .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
0 , jika n = 0
f ib(n) = 1 , jika n = 1 .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
0 , jika n = 0 ← kondisi dasar
f ib(n) = 1 , jika n = 1 ← kondisi dasar .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
0 , jika n = 0
f ib(n) = 1 , jika n = 1 .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
0 , jika n = 0
f ib(n) = 1 , jika n = 1 .
f ib(n − 1) + f ib(n − 2) , jika n ≥ 2
fib(n) :
if n<=1 then return(n)
else return(fib(n-1)+fib(n-2))
Claim:
Langkah basis:
Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Tentukan hipotesis induksi, yaitu pemisalan bahwa claim benar
untuk setiap k < n
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
◦ Apa yang ingin dibuktikan di langkah induksi?
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
◦ Akan dibuktikan bahwa fib(n) menghasilkan Fn .
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
◦ Akan dibuktikan bahwa fib(n) menghasilkan Fn .
◦ Dari algoritma, didapatkan: fib(n)=fib(n-1)+fib(n-2)
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
◦ Akan dibuktikan bahwa fib(n) menghasilkan Fn .
◦ Dari algoritma, didapatkan: fib(n)=fib(n-1)+fib(n-2)
Dari hipotesis induksi, didapatkan: fib(n)=Fn−1 + Fn−2
(TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11
Fibonacci: claim, langkah basis, langkah induksi
Langkah basis:
Untuk n = 0, fib(n) memberikan nilai 0 yang merupakan F0 .
Untuk n = 1, fib(n) memberikan nilai 1 yang merupakan F1 .
Langkah induksi:
◦ Misalkan n ≥ 2 dan untuk setiap k dimana 0 ≤ k < n, fib(n)
menghasilkan Fk .
◦ Akan dibuktikan bahwa fib(n) menghasilkan Fn .
◦ Dari algoritma, didapatkan: fib(n)=fib(n-1)+fib(n-2)
Dari hipotesis induksi, didapatkan: fib(n)=Fn−1 + Fn−2
Dari definisi Fn , didapatkan: fib(n)=Fn
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11
Contoh: maximum value
function maximum(A,n) :
if n<=1 then return(A[1])
else return(max(maximum(A,n-1),A[n]))
Claim:
Claim:
apa yang ingin dibuktikan?
Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Langkah basis:
Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar
Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Langkah basis:
maximum(A,1) menghasilkan A[1] yang merupakan max(A[1]).
function multiply(y,z) :
if z=0 then return(0)
else if z is odd then return(multiply(2y,⌊ z/2⌋)+y)
else return(multiply(2y,⌊ z/2⌋))
Claim:
Claim:
apa yang ingin dibuktikan?
Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz
Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz
Langkah basis:
Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz
Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar
Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz
Langkah basis:
Untuk z = 0, multiply(y,z) menghasilkan nilai 0 yang merupakan
hasil perkalian yz.
function g(n) :
if n <= 1 then return(n)
else return(5*g(n-1)-6*g(n-2)))
function sum(A,n) :
if n = 1 then return(A[1])
else return(sum(A,n-1)+A[n])
function multiply(y,z) :
if z = 0 then return(0)
else return(multiply(2y,⌊z/2⌋)+y(z mod 2))