Anda di halaman 1dari 134

CII2C2

Analisis Kompleksitas Algoritma

Pertemuan 1-2:
Correctness proof of algorithm: iterative algorithm
1. Recall on Mathematical Induction

2. Kebenaran algoritma

3. Pembuktian kebenaran algoritma iteratif

4. Contoh pembuktian kebenaran algoritma iteratif


4.1 Fibonacci
4.2 Maximum value
4.3 Multiplication

5. Soal Latihan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 2


Recall on Mathematical Induction

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 3


Penjelasan umum induksi matematika

◦ Induksi matematika merupakan salah satu teknik pembuktian


yang dapat digunakan untuk membuktikan bahwa suatu
pernyataan berlaku untuk semua bilangan bulat non-negatif
◦ Induksi matematika mempunyai prinsip yang mirip dengan efek
barisan domino

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 4


Efek barisan domino
Jika domino-domino dibariskan dengan jarak yang sama persis satu
sama lain dan tanpa halangan, maka jika:
1. kita dapat menjatuhkan (beberapa) domino terdepan, dan
2. jatuhnya satu domino pada barisan tersebut akan selalu
menyebabkan jatuhnya domino di belakangnya,
maka semua domino pada barisan tersebut akan terjatuh

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 5


Barisan domino vs induksi matematika

◦ Bilangan bulat memiliki jarak yang sama antar bilangan


tetangganya, oleh karenanya kita dapat memandang bilangan
bulat sebagai domino dalam barisan
◦ Untuk membuktikan bahwa suatu pernyataan P (n) benar untuk
semua bilangan bulat n,
▶ Jatuhnya (beberapa) domino terdepan, dapat diartikan sebagai
terbukti benarnya pernyataan yang ingin dibuktikan untuk
(beberapa) bilangan pertama dalam domain yang dibicarakan
▶ Jatuhnya satu domino menyebabkan jatuhnya domino di
belakangnya, dapat diartikan sebagai kebenaran implikasi
P (j) → P (j + 1) untuk setiap j yang ada pada domain yang
dibicarakan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 6


Langkah induksi matematika

Untuk membuktikan bahwa P (n) benar untuk setiap bilangan bulat


non-negatif n pada suatu selang tertentu (e.g. n ≥ 0, n ≥ 3)
1. Pembuktian basis induksi
Membuktikan bahwa P (n) benar untuk (beberapa) nilai terkecil n
pada selang yang diberikan
2. Pengambilan hipotesis induksi
Memisalkan bahwa P (j) benar untuk sembarang j pada selang
yang diberikan
3. Pembuktian induksi
Membuktikan bahwa P (j + 1) akan selalu benar berdasarkan
hipotesis induksi yang diberikan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 7


Contoh induksi matematika (1)
Misalkan kita ingin membuktikan bahwa untuk semua n ∈ N,

n(n + 1)
1 + 2 + ... + n = .
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 8


Contoh induksi matematika (1)
Misalkan kita ingin membuktikan bahwa untuk semua n ∈ N,

n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .

Dengan menggunakan induksi matematika,

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 8


Contoh induksi matematika (1)
Misalkan kita ingin membuktikan bahwa untuk semua n ∈ N,

n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .

Dengan menggunakan induksi matematika,


1. Pembuktian basis induksi

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 8


Contoh induksi matematika (1)
Misalkan kita ingin membuktikan bahwa untuk semua n ∈ N,

n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .

Dengan menggunakan induksi matematika,


1. Pembuktian basis induksi
untuk n = 1,

1(1 + 1)
1= = 1.
2
Sehingga P (1) benar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 8


Contoh induksi matematika (2)

2. Pengambilan hipotesis induksi

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 9


Contoh induksi matematika (2)

2. Pengambilan hipotesis induksi


Misalkan untuk sembarang j ∈ N, P (j) benar, yaitu:

j(j + 1)
1 + 2 + ... + j = .
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 9


Contoh induksi matematika (3)

3. Pembuktian induksi

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Contoh induksi matematika (3)

3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Contoh induksi matematika (3)

3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.
j(j + 1)
1 + 2 + . . . + j + (j + 1) = + (j + 1)
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Contoh induksi matematika (3)

3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.
j(j + 1)
1 + 2 + . . . + j + (j + 1) = + (j + 1)
2
j(j + 1) + 2(j + 1)
=
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Contoh induksi matematika (3)

3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.
j(j + 1)
1 + 2 + . . . + j + (j + 1) = + (j + 1)
2
j(j + 1) + 2(j + 1)
=
2
2
j + 3j + 2
=
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Contoh induksi matematika (3)

3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.
j(j + 1)
1 + 2 + . . . + j + (j + 1) = + (j + 1)
2
j(j + 1) + 2(j + 1)
=
2
2
j + 3j + 2
=
2
(j + 1)(j + 2)
= (TERBUKTI)
2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 10


Kebenaran algoritma

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 11


Pentingnya memeriksa kebenaran algoritma

◦ Kebenaran suatu algoritma penting untuk meyakinkan kita


bahwa keluaran program yang dihasilkan akan selalu sesuai
dengan yang diharapkan
◦ Beberapa contoh kesalahan dalam suatu algoritma:
▶ keliru dalam pengambilan nilai awal suatu variabel
▶ keliru dalam penentuan batas akhir iterasi
▶ tidak memerhatikan kasus unik

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 12


Metode untuk menguji kebenaran

Untuk menguji kebenaran suatu algoritma, kita dapat menggunakan


metode:
◦ Testing, yaitu mencoba algoritma dengan beberapa contoh
masukan
◦ Pembuktian algoritma secara matematis

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Metode untuk menguji kebenaran

Untuk menguji kebenaran suatu algoritma, kita dapat menggunakan


metode:
◦ Testing, yaitu mencoba algoritma dengan beberapa contoh
masukan
◦ Pembuktian algoritma secara matematis

Pembuktian dengan testing memerlukan contoh masukan yang


banyak, termasuk masukan-masukan yang berada di ambang batas
ataupun memiliki kasus unik

Pada kuliah ini, dibahas pembuktian algoritma secara matematis

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 13


Pembuktian kebenaran algoritma
iteratif

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 14


Langkah umum

1. Analisis iterasi yang ada satu per satu, dimulai dari iterasi
terdapat (inner loop) untuk kasus nested loop
2. Untuk setiap iterasi, tentukan loop invariant, yaitu pernyataan
yang selalu bernilai untuk setiap iterasi dan juga memberikan
informasi terkait progress yang didapatkan pada setiap iterasi
3. Membuktikan bahwa loop invariant yang ditentukan berlaku
pada iterasi yang dimaksud
4. Gunakan loop invariant untuk membuktikan bahwa iterasi akan
berhenti (terminates)
5. Gunakan loop invariant untuk membuktikan bahwa algoritma
akan memberikan hasil yang benar

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 15


Loop invariant

◦ Loop invariant merupakan suatu pernyataan yang selalu bernilai


benar di akhir setiap iterasi
◦ Biasanya, loop invariant memberikan informasi terkait
perkembangan/perubahan yang ada pada nilai variabel yang
disebabkan oleh iterasi, khususnya yang menyangkut
pembuktian yang ingin ditunjukkan
◦ Untuk menentukan loop invariant, kita dapat menganalisis
beberapa hal, seperti:
▶ nilai dari variabel yang telah ditentukan sebelum masuk ke dalam
iterasi
▶ nilai variabel yang diubah di dalam iterasi
▶ nilai variabel yang ditentukan di dalam iterasi
▶ keluaran yang diharapkan dari loop

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 16


Notasi

◦ Nilai dari variabel x di akhir iterasi ke-j dari suatu loop


dinotasikan sebagai xj
◦ Untuk j = 0, xj menyatakan nilai dari variabel x sesaat sebelum
memasuki iterasi untuk pertama kalinya

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 17


Notasi

◦ Nilai dari variabel x di akhir iterasi ke-j dari suatu loop


dinotasikan sebagai xj
◦ Untuk j = 0, xj menyatakan nilai dari variabel x sesaat sebelum
memasuki iterasi untuk pertama kalinya
◦ Contohnya, untuk algoritma berikut:
a := 0;
while a < 10 then
a := a + 2;
didapatkan a0 = 0, a1 = 2, a2 = 4, dan a6 = 12

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 17


Contoh pembuktian kebenaran
algoritma iteratif

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 18


Contoh: bilangan Fibonacci

Misalkan diberikan program sebagai berikut:

function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

Buktikan bahwa fungsi tersebut akan menghasilkan bilangan


Fibonacci ke-n, yaitu Fn !

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 19


Fibonacci: claim, fakta, loop invariant

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: fakta apa saja yang ada terkait loop yang ada?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: fakta apa saja yang ada terkait loop yang ada?
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: fakta apa saja yang ada terkait loop yang ada?
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: fakta apa saja yang ada terkait loop yang ada?
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2 → a0 = 0; b0 = 1; i0 = 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
→ cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
return(b)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant
Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant
Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant
Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2→ a0 = F0 , b0 = F1 , i0 = 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
→ c1 = a0 + b0 = F0 + F1 = F2 , a1 = b0 = F1 , b1 = c1 = F2 , i1 = i0 + 1 = 3
→ aj = Fj , bj = Fj+1 , ij = j + 2
return(b)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20
Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: untuk semua j ≥ 0: aj = Fj , bj = Fj+1 , ij = j + 2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: claim, fakta, loop invariant

Claim: fib(n) returns Fn

Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1

Loop invariant: untuk semua j ≥ 0: aj = Fj , bj = Fj+1 , ij = j + 2

next: buktikan bahwa loop invariant tersebut benar, dengan


menggunakan induksi matematika

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 20


Fibonacci: pembuktian loop invariant (1)
Misalkan P (n) := an = Fn , bn = Fn+1 , in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 21


Fibonacci: pembuktian loop invariant (1)
Misalkan P (n) := an = Fn , bn = Fn+1 , in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa
a0 = 0, b0 = 1, i0 = 2.
Karena F0 = 0, F1 = 1, dan 0 + 2 = 2, maka
a0 = F0 , b0 = F1 , i0 = 0 + 2, sehingga P (0) benar.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 21


Fibonacci: pembuktian loop invariant (1)
Misalkan P (n) := an = Fn , bn = Fn+1 , in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa
a0 = 0, b0 = 1, i0 = 2.
Karena F0 = 0, F1 = 1, dan 0 + 2 = 2, maka
a0 = F0 , b0 = F1 , i0 = 0 + 2, sehingga P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu
aj = Fj , bj = Fj+1 , ij = j + 2.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 21


Fibonacci: pembuktian loop invariant (1)
Misalkan P (n) := an = Fn , bn = Fn+1 , in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa
a0 = 0, b0 = 1, i0 = 2.
Karena F0 = 0, F1 = 1, dan 0 + 2 = 2, maka
a0 = F0 , b0 = F1 , i0 = 0 + 2, sehingga P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu
aj = Fj , bj = Fj+1 , ij = j + 2.

3. Pembuktian induksi
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3.
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 21
Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22


Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22


Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1
2. Dari fakta yang ada, diketahui bahwa bj = cj = aj−1 + bj−1 ,
sehingga
bj+1 = aj + bj .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22


Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1
2. Dari fakta yang ada, diketahui bahwa bj = cj = aj−1 + bj−1 ,
sehingga
bj+1 = aj + bj .
Dari hipotesis induksi, didapatkan aj = Fj dan bj = Fj+1 . Jadi,
bj+1 = Fj + Fj+1 = Fj+2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22


Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1
2. Dari fakta yang ada, diketahui bahwa bj = cj = aj−1 + bj−1 ,
sehingga
bj+1 = aj + bj .
Dari hipotesis induksi, didapatkan aj = Fj dan bj = Fj+1 . Jadi,
bj+1 = Fj + Fj+1 = Fj+2
3. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22


Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1
2. Dari fakta yang ada, diketahui bahwa bj = cj = aj−1 + bj−1 ,
sehingga
bj+1 = aj + bj .
Dari hipotesis induksi, didapatkan aj = Fj dan bj = Fj+1 . Jadi,
bj+1 = Fj + Fj+1 = Fj+2
3. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.
Dari hipotesis induksi, didapatkan dan ij = j + 2. Jadi,
ij+1 = j + 2 + 2 = j + 3
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22
Fibonacci: pembuktian loop invariant (2)
Adb. aj+1 = Fj+1 , bj+1 = Fj+2 , ij+1 = j + 3
1. Dari fakta yang ada, diketahui bahwa aj = bj−1 , sehingga
aj+1 = bj .
Dari hipotesis induksi, didapatkan bj = Fj+1 . Jadi,
aj+1 = Fj+1
2. Dari fakta yang ada, diketahui bahwa bj = cj = aj−1 + bj−1 ,
sehingga
bj+1 = aj + bj .
Dari hipotesis induksi, didapatkan aj = Fj dan bj = Fj+1 . Jadi,
bj+1 = Fj + Fj+1 = Fj+2
3. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.
Dari hipotesis induksi, didapatkan dan ij = j + 2. Jadi,
ij+1 = j + 2 + 2 = j + 3 (TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 22
Fibonacci: correctness proof
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23


Fibonacci: correctness proof
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23


Fibonacci: correctness proof
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23


Fibonacci: correctness proof
function fib(n)
comment Return Fn
if n = 0 then return(0) else
a := 0; b := 1; i := 2
while i <= n do
c := a + b; a := b; b := c; i := i + 1
return(b)

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23
Fibonacci: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23


Fibonacci: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1.
◦ Dari loop invariant, diketahui bahwa bt = Ft+1 , sehingga
bt = Fn−1+1 = Fn .
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23
Fibonacci: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: fib(n) returns Fn .


◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 0. Jika n > 0, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1.
◦ Dari loop invariant, diketahui bahwa bt = Ft+1 , sehingga
bt = Fn−1+1 = Fn . (TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 23
Contoh: maximum value

Misalkan diberikan program sebagai berikut:

function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

Buktikan bahwa fungsi tersebut akan memberikan nilai maksimum


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

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 24


Max value: claim, fakta, loop invariant

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: fakta apa saja yang ada terkait loop yang ada?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: fakta apa saja yang ada terkait loop yang ada?
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: fakta apa saja yang ada terkait loop yang ada?
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: fakta apa saja yang ada terkait loop yang ada?
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2 → m0 = A[1]; i0 = 2
while i <= n do
if A[i] > m then m := A[i] → mj = max{mj−1 , A[ij ]
i := i + 1 → ij = ij−1 + 1
return(m)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant
Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant
Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant
Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2 → m0 = max{A[1]}; i0 = 0 + 2
while i <= n do
if A[i] > m then m := A[i]
→ m1 = max{m0 , A[2]} = max{A[1], A[2]}
→ m2 = max{m1 , A[3]} = max{A[1], A[2], A[3]}; i2 = 2 + 2
→ mj == max{A[1], . . . , A[j + 1]}; i2 = 2 + 2
i := i + 1 → i1 = 1 + 2 → i2 = 2 + 2 → ij = j + 2
return(m)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25
Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: untuk semua j ≥ 0: mj = max{A[1], . . . , A[j + 1]},


ij = j + 2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: claim, fakta, loop invariant

Claim: maximum(n,A) returns max{A[1], . . . , A[n]}

Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1

Loop invariant: untuk semua j ≥ 0: mj = max{A[1], . . . , A[j + 1]},


ij = j + 2

next: buktikan bahwa loop invariant tersebut benar, dengan


menggunakan induksi matematika

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 25


Max value: pembuktian loop invariant (1)
Misalkan P (n) := mn = max{A[1], . . . , A[n + 1]} dan in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 26


Max value: pembuktian loop invariant (1)
Misalkan P (n) := mn = max{A[1], . . . , A[n + 1]} dan in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa m0 = A[1], i0 = 2.
Karena max{A[1]} = A[1], dan 0 + 2 = 2, maka
m0 = max{A[1]} dan i0 = 0 + 2, sehingga P (0) benar.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 26


Max value: pembuktian loop invariant (1)
Misalkan P (n) := mn = max{A[1], . . . , A[n + 1]} dan in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa m0 = A[1], i0 = 2.
Karena max{A[1]} = A[1], dan 0 + 2 = 2, maka
m0 = max{A[1]} dan i0 = 0 + 2, sehingga P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu

mj = max{A[1], . . . , A[j + 1]}, dan ij = j + 2

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 26


Max value: pembuktian loop invariant (1)
Misalkan P (n) := mn = max{A[1], . . . , A[n + 1]} dan in = n + 2
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa m0 = A[1], i0 = 2.
Karena max{A[1]} = A[1], dan 0 + 2 = 2, maka
m0 = max{A[1]} dan i0 = 0 + 2, sehingga P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu

mj = max{A[1], . . . , A[j + 1]}, dan ij = j + 2

3. Pembuktian induksi
Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 26
Max value: pembuktian loop invariant (2)

Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.

1. Dari fakta yang ada, diketahui bahwa mj = max{mj−1 , A[j + 1]},


sehingga
mj+1 = max{mj , A[j + 2]}.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 27


Max value: pembuktian loop invariant (2)

Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.

1. Dari fakta yang ada, diketahui bahwa mj = max{mj−1 , A[j + 1]},


sehingga
mj+1 = max{mj , A[j + 2]}.
Dari hipotesis induksi, didapatkan mj = max{A[1], . . . , A[j + 1]}.
Jadi,
mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 27


Max value: pembuktian loop invariant (2)

Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.

1. Dari fakta yang ada, diketahui bahwa mj = max{mj−1 , A[j + 1]},


sehingga
mj+1 = max{mj , A[j + 2]}.
Dari hipotesis induksi, didapatkan mj = max{A[1], . . . , A[j + 1]}.
Jadi,
mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}
2. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 27


Max value: pembuktian loop invariant (2)

Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.

1. Dari fakta yang ada, diketahui bahwa mj = max{mj−1 , A[j + 1]},


sehingga
mj+1 = max{mj , A[j + 2]}.
Dari hipotesis induksi, didapatkan mj = max{A[1], . . . , A[j + 1]}.
Jadi,
mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}
2. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.
Dari hipotesis induksi, didapatkan dan ij = j + 2. Jadi,
ij+1 = j + 2 + 2 = j + 3

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 27


Max value: pembuktian loop invariant (2)

Adb. mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}, dan ij+1 = j + 3.

1. Dari fakta yang ada, diketahui bahwa mj = max{mj−1 , A[j + 1]},


sehingga
mj+1 = max{mj , A[j + 2]}.
Dari hipotesis induksi, didapatkan mj = max{A[1], . . . , A[j + 1]}.
Jadi,
mj+1 = max{A[1], . . . , A[j + 1], A[j + 2]}
2. Dari fakta yang ada, diketahui bahwa ij = ij−1 + 1, sehingga
ij+1 = ij + 1.
Dari hipotesis induksi, didapatkan dan ij = j + 2. Jadi,
ij+1 = j + 2 + 2 = j + 3 (TERBUKTI)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 27


Max value: correctness proof
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns


max{A[1], . . . , A[n]}.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28


Max value: correctness proof
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns


max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28


Max value: correctness proof
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns


max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28
Max value: correctness proof
function maximum(A, n)
comment Return max of A[1..n]
m := A[1]; i := 2
while i <= n do
if A[i] > m then m := A[i]
i := i + 1
return(m)

Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns


max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28
Max value: correctness proof
Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns
max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1, atau t + 1 = n.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28


Max value: correctness proof
Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns
max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1, atau t + 1 = n.
◦ Dari loop invariant, diketahui bahwa
mt = max{A[1], . . . , A[t + 1]}, sehingga
mt = max{A[1], . . . , A[n]}.
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28
Max value: correctness proof
Akan dibuktikan bahwa claim benar, yaitu: maximum(A,n) returns
max{A[1], . . . , A[n]}.
◦ Berdasarkan algoritma yang diberikan, jelas bahwa claim
tersebut benar untuk n = 1. Jika n ≥ 2, kita memasuki loop.
◦ Nilai i bertambah di setiap iterasi, dan suatu saat pasti akan
mencapai nilai yang lebih besar dari n, sehingga loop pasti
berhenti (terminate)
◦ Ketika keluar dari loop, nilai i akan sama dengan n + 1
◦ Misalkan nilai i = n + 1 didapatkan tepat setelah iterasi ke-t
selesai, maka it = t + 2 (dari loop invariant), sehingga
t + 2 = n + 1. Jadi, t = n − 1, atau t + 1 = n.
◦ Dari loop invariant, diketahui bahwa
mt = max{A[1], . . . , A[t + 1]}, sehingga
mt = max{A[1], . . . , A[n]}. (TERBUKTI)
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 28
Contoh: multiplication

Misalkan diberikan algoritma sebagai berikut:

function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

Buktikan bahwa fungsi tersebut akan memberikan nilai perkalian x


dan y, jika diketahui bahwa untuk semua n ∈ N,
2⌊n/2⌋ + (n mod 2) = n.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 29


Multiplication: claim, fakta

Claim:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: apa yang ingin dibuktikan?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

Fakta:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

Fakta: fakta apa saja yang ada terkait loop yang ada?

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

Fakta: fakta apa saja yang ada terkait loop yang ada?
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

Fakta: fakta apa saja yang ada terkait loop yang ada?
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta
Claim: multiplication(y,z) returns y.z

Fakta: fakta apa saja yang ada terkait loop yang ada?
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0 → x0 = 0
while z > 0 do
if z is odd then x := x + y
→ if zj−1 mod 2 = 1 then xj = xj−1 + yj−1
if zj−1 mod 2 = 0 then xj = xj−1
→ xj = xj−1 + yj−1 .(zj−1 mod 2)
y := 2 * y; z := ⌊ z/2 ⌋
→ yj = 2 ∗ yj−1 ; zj = ⌊zj−1 /2⌋
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: claim, fakta

Claim: multiplication(y,z) returns y.z

Fakta: x0 = 0;
xj = xj−1 + yj−1 .(z mod 2); yj = 2 ∗ yj−1 ; zj = ⌊zj−1 ⌋

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 30


Multiplication: loop invariant

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Multiplication: loop invariant

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Multiplication: loop invariant

Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,


berhubungan dengan claim yang ada
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Multiplication: loop invariant
Loop invariant: apa yang berlaku di dalam loop untuk j ≥ 0,
berhubungan dengan claim yang ada
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0 → x0 = 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
→ if z0 is odd:
x1 = x0 + y0 ; y1 = 2.y0 ; z1 = z0 − 1/2
→ y1 z1 = y0 z0 − y0 → x0 + y0 + y1 z1 = y0 z0
→ if z0 is even:
x1 = x0 ; y1 = 2.y0 ; z1 = z0 /2 → x0 + y1 z1 = y0 z0
→ xj + yj zj = y0 z0
return(x)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Multiplication: loop invariant

Loop invariant: untuk semua j ≥ 0: xj + yj zj = y0 z0

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Multiplication: loop invariant

Loop invariant: untuk semua j ≥ 0: xj + yj zj = y0 z0

next: buktikan bahwa loop invariant tersebut benar, dengan


menggunakan induksi matematika

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 31


Max value: pembuktian loop invariant (1)

Misalkan P (n) := xn + yn zn = y0 z0
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 32


Max value: pembuktian loop invariant (1)

Misalkan P (n) := xn + yn zn = y0 z0
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa x0 = 0, sehingga
kita dapatkan x0 + y0 z0 = y0 z0 . Jadi, P (0) benar.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 32


Max value: pembuktian loop invariant (1)

Misalkan P (n) := xn + yn zn = y0 z0
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa x0 = 0, sehingga
kita dapatkan x0 + y0 z0 = y0 z0 . Jadi, P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu

xj + yj zj = y0 z0

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 32


Max value: pembuktian loop invariant (1)

Misalkan P (n) := xn + yn zn = y0 z0
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
1. Pembuktian basis induksi
Berdasarkan fakta yang ada diketahui bahwa x0 = 0, sehingga
kita dapatkan x0 + y0 z0 = y0 z0 . Jadi, P (0) benar.
2. Pengambilan hipotesis induksi
Misalkan untuk sembarang j ≥ 0, P (j) benar, yaitu

xj + yj zj = y0 z0

3. Pembuktian induksi
Adb. xj+1 + yj+1 zj+1 = yj zj .
CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 32
Max value: pembuktian loop invariant (2)

Adb. xj+1 + yj+1 zj+1 = y0 z0 .

Dari fakta yang ada, diketahui bahwa xj = xj−1 + yj−1 (z mod 2),
yj = 2.yj−1 , dan zj = ⌊zj−1 /2⌋ sehingga
xj+1 = xj + yj (zj mod 2) dan yj+1 zj+1 = 2.yj ⌊zj /2⌋.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 33


Max value: pembuktian loop invariant (2)

Adb. xj+1 + yj+1 zj+1 = y0 z0 .

Dari fakta yang ada, diketahui bahwa xj = xj−1 + yj−1 (z mod 2),
yj = 2.yj−1 , dan zj = ⌊zj−1 /2⌋ sehingga
xj+1 = xj + yj (zj mod 2) dan yj+1 zj+1 = 2.yj ⌊zj /2⌋.
Maka,
xj+1 + yj+1 zj+1 = xj + yj (zj mod 2) + 2.yj ⌊zj /2⌋
= xj + yj ((zj mod 2) + 2⌊zj /2⌋)
= x j + yj zj

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 33


Max value: pembuktian loop invariant (2)

Adb. xj+1 + yj+1 zj+1 = y0 z0 .

Dari fakta yang ada, diketahui bahwa xj = xj−1 + yj−1 (z mod 2),
yj = 2.yj−1 , dan zj = ⌊zj−1 /2⌋ sehingga
xj+1 = xj + yj (zj mod 2) dan yj+1 zj+1 = 2.yj ⌊zj /2⌋.
Maka,
xj+1 + yj+1 zj+1 = xj + yj (zj mod 2) + 2.yj ⌊zj /2⌋
= xj + yj ((zj mod 2) + 2⌊zj /2⌋)
= x j + yj zj
Berdasarkan hipotesis induksi, xj + yj zj = y0 z0
sehingga xj+1 + yj+1 zj+1 = x0 y0 (TERBUKTI)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 33


Multiplication: correctness proof
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.
◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.
◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.
◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof
function multiply(y, z)
comment Return yz, where y,z∈ N
x := 0
while z > 0 do
if z is odd then x := x + y
y := 2 * y; z := ⌊ z/2 ⌋
return(x)

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.
◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.
◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)
◦ Ketika keluar dari loop, nilai z akan sama dengan 0

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.

◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.


◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)
◦ Ketika keluar dari loop, nilai z akan sama dengan 0
◦ Misalkan nilai z = 0 didapatkan tepat setelah iterasi ke-t selesai,
maka zt = 0.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.

◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.


◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)
◦ Ketika keluar dari loop, nilai z akan sama dengan 0
◦ Misalkan nilai z = 0 didapatkan tepat setelah iterasi ke-t selesai,
maka zt = 0.
◦ Dari loop invariant, kita ketahui bahwa
xt + yt zt = y0 z0 .

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.

◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.


◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)
◦ Ketika keluar dari loop, nilai z akan sama dengan 0
◦ Misalkan nilai z = 0 didapatkan tepat setelah iterasi ke-t selesai,
maka zt = 0.
◦ Dari loop invariant, kita ketahui bahwa
xt + yt zt = y0 z0 .
Karena zt = 0, maka xt = y0 z0 = yz

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Multiplication: correctness proof

Akan dibuktikan bahwa claim benar, yaitu: multiplication(y,z)


returns y.z.

◦ Karena z ∈ N, maka kita akan selalu masuk ke dalam loop.


◦ Nilai z berkurang di setiap iterasi, dan suatu saat pasti akan
mencapai nilai 0, sehingga loop pasti berhenti (terminate)
◦ Ketika keluar dari loop, nilai z akan sama dengan 0
◦ Misalkan nilai z = 0 didapatkan tepat setelah iterasi ke-t selesai,
maka zt = 0.
◦ Dari loop invariant, kita ketahui bahwa
xt + yt zt = y0 z0 .
Karena zt = 0, maka xt = y0 z0 = yz (TERBUKTI)

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 34


Soal Latihan

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 35


Latihan 1

Misalkan diberikan program sebagai berikut:

function power(y,z)
comment Return yz , where y∈ R and z∈ N
x := 1
while z > 0 do
x := x * y; z := z - 1
return(x)

Buktikan bahwa fungsi tersebut akan menghasilkan nilai xy , jika


diketahui bahwa untuk semua n ∈ N,
2⌊n/2⌋ + (n mod 2) = n

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 36


Latihan 2

Misalkan diberikan program sebagai berikut:

function mystery(y,z)
x := 0
while y != 0 do
x := x + z; y := y - 1
return(x)

Apa yang dihasilkan oleh fungsi tersebut? Buktikan!

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 37


Latihan 3

Misalkan diberikan program sebagai berikut:

procedure swap(x,y)
comment swap x and y
x := x + y
y := x - y
x := x - y

Buktikan bahwa prosedur tersebut berfungsi untuk menukarkan nilai


x dan y.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 38


References

1. Ian Parberry. Lecture notes on algorithm analysis and


computational complexity. 2001.
2. Ian Parberry & William Gasarch. Problems on Algorithms. 2002.

CII2C2-Analisis Kompleksitas Algoritma / FAKULTAS INFORMATIKA 39


THANK YOU

Anda mungkin juga menyukai