Anda di halaman 1dari 79

CII2C2

Analisis Kompleksitas Algoritma

Pertemuan 4-5:
Correctness proof of algorithm: recursive algorithm
1. Recall on Recursive Algorithm

2. Pembuktian kebenaran algoritma rekursif


2.1 Contoh: Fibonacci
2.2 Maximum value
2.3 Multiplication

3. Soal Latihan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 2


Recall on Recursive Algorithm

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 3


Pengertian rekursi

Suatu entitas (tipe, fungsi) didefinisikan sebagai rekursi jika entitas


tersebut mengandung terminologinya sendiri.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 4


Pengertian rekursi

Suatu entitas (tipe, fungsi) didefinisikan sebagai rekursi jika entitas


tersebut mengandung terminologinya sendiri.

Contoh rekursi:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 4


Struktur rekursif
Entitas rekursi terdiri dari dua bagian:
1. Kasus dasar (basis)
2. Langkah rekursi

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 5


Struktur rekursif
Entitas rekursi terdiri dari dua bagian:
1. Kasus dasar (basis)
2. Langkah rekursi

Secara umum, algoritma dari fungsi rekursif mempunyai struktur


sebagai berikut:
F(<param-list>) :
depend-on
<base condition> : <expression-1>
<reccurence condition> : F(<expression-2>)

◦ expression-2 dan param-list mempunyai domain yang


sama
◦ Nilai dari expression-2 harus mendekat ke kondisi basis
secara bertahap pada setial pemanggilan rekursi
◦ Ketika kondisi basis terpenuhi, program akan terminate
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 5
Contoh rekursi: Faktorial

Untuk suatu bilangan bulat n ≥ 0, n! dapat didefinisikan secara


rekursif sebagai berikut:
{
1 , jika n = 0
n! = .
(n − 1)! ∗ n , jika n > 0

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 6


Contoh rekursi: Faktorial

Untuk suatu bilangan bulat n ≥ 0, n! dapat didefinisikan secara


rekursif sebagai berikut:
{
1 , jika n = 0
n! = .
(n − 1)! ∗ n , jika n > 0

Misalkan fac(n) menyatakan n!.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 6


Contoh rekursi: Faktorial

Untuk suatu bilangan bulat n ≥ 0, n! dapat didefinisikan secara


rekursif sebagai berikut:
{
1 , jika n = 0
n! = .
(n − 1)! ∗ n , jika n > 0

Misalkan fac(n) menyatakan n!.


Algoritma rekursif untuk perhitungan fac(n):
fac(n) :
if n=0 then {kondisi basis}
return 1
else {langkah rekursi}
return fac(n-1)*n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 6


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



0 , jika n = 0
f ib(n) = 1 , jika n = 1 .


f ib(n − 1) + f ib(n − 2) , jika n ≥ 2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



0 , jika n = 0
f ib(n) = 1 , jika n = 1 .


f ib(n − 1) + f ib(n − 2) , jika n ≥ 2

Algoritma rekursif untuk perhitungan fib(n):


fib(n) :

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



0 , jika n = 0
f ib(n) = 1 , jika n = 1 .


f ib(n − 1) + f ib(n − 2) , jika n ≥ 2

Algoritma rekursif untuk perhitungan fib(n):


fib(n) :
{kondisi dasar}

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



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

Algoritma rekursif untuk perhitungan fib(n):


fib(n) :
if n<=1 then {kondisi dasar}
return n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



0 , jika n = 0
f ib(n) = 1 , jika n = 1 .


f ib(n − 1) + f ib(n − 2) , jika n ≥ 2

Algoritma rekursif untuk perhitungan fib(n):


fib(n) :
if n<=1 then {kondisi dasar}
return n
else {langkah rekursi}

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh rekursi: Fibonacci
Untuk suatu bilangan bulat n ≥ 0, bilangan Fibonacci ke−n, f ib(n),
dapat didefinisikan secara rekursif sebagai berikut:



0 , jika n = 0
f ib(n) = 1 , jika n = 1 .


f ib(n − 1) + f ib(n − 2) , jika n ≥ 2

Algoritma rekursif untuk perhitungan fib(n):


fib(n) :
if n<=1 then {kondisi dasar}
return n
else {langkah rekursi}
return fib(n-1)+fib(n-2)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Pembuktian kebenaran algoritma
rekursif

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 8


Langkah umum

Pembuktian algortima iteratif memerlukan loop invariant yang


kemudian dibuktikan dengan menggunakan induksi matematika.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 9


Langkah umum

Pembuktian algortima iteratif memerlukan loop invariant yang


kemudian dibuktikan dengan menggunakan induksi matematika.

Pembuktian algoritma rekursif dapat dilakukan dengan induksi


matematika:
◦ Basis rekursi (kasus dasar) merupakan basis induksi
◦ Untuk langkah induksi, dimisalkan bahwa proses rekursi telah
menghasilkan hasil yang benar hingga k langkah, buktikan
bahwa langkah berikutnya pun rekursi akan menghasilkan hasil
yang benar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 9


Contoh: bilangan Fibonacci

Misalkan diberikan algoritma sebagai berikut:

fib(n) :
if n<=1 then return(n)
else return(fib(n-1)+fib(n-2))

Buktikan bahwa fungsi tersebut akan menghasilkan bilangan


Fibonacci ke-n, yaitu Fn !

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Fibonacci: claim, langkah basis, langkah induksi

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns Fn

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns Fn

Langkah basis:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns Fn

Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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 .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi
Claim: Untuk setiap n ≥ 0, fib(n) returns 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:
◦ Tentukan hipotesis induksi, yaitu pemisalan bahwa claim benar
untuk setiap k < n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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 .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi
Claim: Untuk setiap n ≥ 0, fib(n) returns 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 .
◦ Apa yang ingin dibuktikan di langkah induksi?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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 .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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)
Dari hipotesis induksi, didapatkan: fib(n)=Fn−1 + Fn−2
(TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11
Fibonacci: claim, langkah basis, langkah induksi

Claim: Untuk setiap n ≥ 0, fib(n) returns 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)
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

Misalkan diberikan algoritma sebagai berikut:

function maximum(A,n) :
if n<=1 then return(A[1])
else return(max(maximum(A,n-1),A[n]))

Buktikan bahwa fungsi tersebut akan memberikan nilai maksimum


dari barisan bilangan A[1..n] yang diberikan!

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 12


Fibonacci: claim, langkah basis, langkah induksi

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi

Claim:
apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi

Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi

Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Langkah basis:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi

Claim:
Untuk setiap n ≥ 0, maximum(A,n) returns max(A[1], . . . , A[n])
Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi

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]).

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Tentukan hipotesis induksi, yaitu pemisalan bahwa claim benar
untuk setiap k < n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Apa yang ingin dibuktikan di langkah induksi?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Adb. maximum(A,n) menghasilkan max(A[1], . . . , A[n]).

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Adb. maximum(A,n) menghasilkan max(A[1], . . . , A[n]).
◦ Dari algoritma:
maximum(A,n)=max(maximum(A,n-1),A[n])

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Adb. maximum(A,n) menghasilkan max(A[1], . . . , A[n]).
◦ Dari algoritma:
maximum(A,n)=max(maximum(A,n-1),A[n])
Dari hipotesis induksi:
maximum(A,n)=max(max(A[1], . . . , A[n − 1]), A[n])

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Adb. maximum(A,n) menghasilkan max(A[1], . . . , A[n]).
◦ Dari algoritma:
maximum(A,n)=max(maximum(A,n-1),A[n])
Dari hipotesis induksi:
maximum(A,n)=max(max(A[1], . . . , A[n − 1]), A[n])
Dari definisi max:
maximum(A,n)=max(A[1], . . . , A[n])
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13
Fibonacci: claim, langkah basis, langkah induksi
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]).
Langkah induksi:
◦ Misalkan n ≥ 1 dan untuk setiap k dimana 0 ≤ k < n,
maximum(A,n) menghasilkan max(A[1], . . . , A[k]).
◦ Adb. maximum(A,n) menghasilkan max(A[1], . . . , A[n]).
◦ Dari algoritma:
maximum(A,n)=max(maximum(A,n-1),A[n])
Dari hipotesis induksi:
maximum(A,n)=max(max(A[1], . . . , A[n − 1]), A[n])
Dari definisi max:
maximum(A,n)=max(A[1], . . . , A[n]) (TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13
Contoh: multiplication

Misalkan diberikan algoritma sebagai berikut:

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⌋))

Buktikan bahwa fungsi tersebut akan memberikan nilai perkalian y


dan z

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 14


Multiplication: claim, langkah basis

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: claim, langkah basis

Claim:
apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: claim, langkah basis

Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: claim, langkah basis

Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz

Langkah basis:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: claim, langkah basis

Claim:
Untuk setiap y, z ≥ 0, multiply(y,z) returns yz

Langkah basis:
buktikan/nyatakan bahwa claim benar untuk kasus dasar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: claim, langkah basis

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.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Multiplication: langkah induksi
Langkah induksi:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Tentukan hipotesis induksi, yaitu pemisalan bahwa claim benar
untuk setiap k < n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Apa yang ingin dibuktikan di langkah induksi?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)
Dari definisi genap dan ⌊a⌋: ⌊z/2⌋ = z/2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)
Dari definisi genap dan ⌊a⌋: ⌊z/2⌋ = z/2
Sehingga multiply(y,z)=multiply(2y,z/2)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)
Dari definisi genap dan ⌊a⌋: ⌊z/2⌋ = z/2
Sehingga multiply(y,z)=multiply(2y,z/2)
Berdasarkan hipotesis induksi:
multiply(y,z)=2y(z/2) = yz
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16
Multiplication: langkah induksi
Langkah induksi:
◦ Misalkan z ≥ 1 dan untuk setiap k dimana 0 ≤ k < z,
multiply(y,z) menghasilkan yk.
◦ Adb. multiply(y,z) menghasilkan yz.
▶ Kasus 1: ketika z adalah bilangan ganjil
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)+y
Dari definisi ganjil dan ⌊a⌋: ⌊z/2⌋ = (z − 1)/2
Sehingga multiply(y,z)=multiply(2y,(z-1)/2)+y
Berdasarkan hipotesis induksi:
multiply(y,z)=2y((z − 1)/2) + y = y(z − 1) + y = yz
▶ Kasus 2: ketika z adalah bilangan genap
Dari algoritma: multiply(y,z)=multiply(2y,⌊ z/2⌋)
Dari definisi genap dan ⌊a⌋: ⌊z/2⌋ = z/2
Sehingga multiply(y,z)=multiply(2y,z/2)
Berdasarkan hipotesis induksi:
multiply(y,z)=2y(z/2) = yz (TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16
Soal Latihan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 17


Latihan 1

Misalkan diberikan algoritma sebagai berikut:

function g(n) :
if n <= 1 then return(n)
else return(5*g(n-1)-6*g(n-2)))

Buktikan bahwa fungsi tersebut akan menghasilkan nilai 3n − 2n


untuk setiap n ≥ 0.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 18


Latihan 2

Misalkan diberikan program sebagai berikut:

function sum(A,n) :
if n = 1 then return(A[1])
else return(sum(A,n-1)+A[n])

Buktikan bahwa fungsi tersebut akan menghasilkan nilai penjumlahan


A[1], . . . , A[n] untuk setiap n ≥ 1.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 19


Latihan 3

Misalkan diberikan algoritma sebagai berikut:

function multiply(y,z) :
if z = 0 then return(0)
else return(multiply(2y,⌊z/2⌋)+y(z mod 2))

Buktikan bahwa fungsi tersebut akan menghasilkan nilai perkalian yz


untuk setiap y, z ≥ 0.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


References

1. Ian Parberry. Lecture notes on algorithm analysis and


computational complexity. 2001.
2. Ian Parberry & William Gasarch. Problems on Algorithms. 2002.
3. Inggriani Liem. Diktat Kuliah Dasar Pemrograman:
Pemrograman Prosedural. ITB. 2007
4. Inggriani Liem. Diktat Kuliah Dasar Pemrograman:
Pemrograman Fungsional. ITB. 2008

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 21


THANK YOU

Anda mungkin juga menyukai