Pertemuan 1-2:
Correctness proof of algorithm: iterative algorithm
1. Recall on Mathematical Induction
2. Kebenaran algoritma
5. Soal Latihan
n(n + 1)
1 + 2 + ... + n = .
2
n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .
n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .
n(n + 1)
1 + 2 + ... + n = .
2
n(n+1)
Misalkan P (n) := 1 + 2 + . . . + n = 2 .
1(1 + 1)
1= = 1.
2
Sehingga P (1) benar
j(j + 1)
1 + 2 + ... + j = .
2
3. Pembuktian induksi
3. Pembuktian induksi
Akan dibuktikan bahwa (adb.)
(j+1)(j+2)
P (j + 1) := 1 + 2 + . . . + j + (j + 1) = 2 benar.
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
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
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
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
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
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)
Claim:
Fakta:
Fakta: fakta apa saja yang ada terkait loop yang ada?
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)
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)
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)
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Loop invariant:
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
Fakta: a0 = 0; b0 = 1; i0 = 2
cj = aj−1 + bj−1 ; aj = bj−1 ; bj = cj ; ij = ij−1 + 1
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 .
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)
Claim:
Fakta:
Fakta: fakta apa saja yang ada terkait loop yang ada?
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)
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)
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)
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Loop invariant:
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
Fakta: m0 = A[1]; i0 = 2
mj = max{mj−1 , A[ij ]; ij = ij−1 + 1
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)
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)
Claim:
Fakta:
Fakta: fakta apa saja yang ada terkait loop yang ada?
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)
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)
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)
Fakta: x0 = 0;
xj = xj−1 + yj−1 .(z mod 2); yj = 2 ∗ yj−1 ; zj = ⌊zj−1 ⌋
Misalkan P (n) := xn + yn zn = y0 z0
Pembuktian bahwa P (n) benar untuk semua n ≥ 0:
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.
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
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)
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⌋.
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
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)
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)
function mystery(y,z)
x := 0
while y != 0 do
x := x + z; y := y - 1
return(x)
procedure swap(x,y)
comment swap x and y
x := x + y
y := x - y
x := x - y