5.3 Recursive Definitions and Structural Induction

advertisement
5.3 RECURSIVE DEFINITIONS AND
STRUCTURAL INDUCTION
Rekursif
Ada kalanya kita mengalami
kesulitan untuk mendefinisikan
suatu obyek secara eksplisit.
Mungkin lebih mudah untuk
mendefinisikan obyek tersebut
dengan menggunakan dirinya
sendiri. Ini merupakan proses
rekursif.
Kita dapat mendefinisikan
barisan, fungsi dan himpunan
secara rekursif.
Fungsi yang Didefinisikan secara Rekursif
Langkah-langkah untuk mendefinisikan fungsi
dengan domain bilangan cacah secara rekursif:
1.Langkah basis: Definisikan nilai fungsi pada
saat nol.
2.Langkah rekursif: Berikan aturan untuk
mencari nilai fungsi untuk setiap bilangan
bulat berdasarkan nilai fungsi pada bilangan
bulat yang lebih kecil
Contoh 1
f(0) = 3
f(n + 1) = 2f(n) + 3
Maka
f(0) = 3
f(1) = 2f(0) + 3 = 23 + 3 = 9
f(2) = 2f(1) + 3 = 29 + 3 = 21
f(3) = 2f(2) + 3 = 221 + 3 = 45
f(4) = 2f(3) + 3 = 245 + 3 = 93
Contoh 2
Bagaimana kita dapat mendefinisikan fungsi faktorial
f(n) = n! secara rekursif?
f(0) = 1
Karena (n+1)! = n! (n+1) maka
f(n + 1) = (n + 1)f(n)
f(0) = 1
f(1) = 1 f(0) = 1  1 = 1
f(2) = 2 f(1) = 2  1 = 2
f(3) = 3 f(2) = 3  2 = 6
f(4) = 4 f(3) = 4  6 = 24
Soal 1
Bagaimana kita dapat mendefinisikan fungsi
n
f ( n )   ak
secara rekursif?
k 0
Barisan Yang Didefinisikan Secara Rekursif
Contoh 3.
Barisan bilangan pangkat dari 2
an = 2n untuk n = 0, 1, 2, … .
Barisan ini dapat didefinisikan secara rekursif:
a0 = 1
an+1 = 2an untuk n = 0, 1, 2, …
Langkah-langkah untuk mendefinisikan barisan secara rekursif:
1. Langkah basis: Spesifikasi anggota awal.
2. Langkah rekursif: Berikan aturan untuk membangun anggota
baru dari anggota yang telah ada.
Contoh 4
Berikan definisi rekursif dari an=rn, dengan rN,
r≠0 dan n bilangan bulat positif.
Solusi.
Definisikan a0=r0=1
dan an+1=r . an untuk n = 0, 1, 2, …
Contoh 5
Barisan Hanoi
0, 1, 3, 7, 15, 31, ...
h0 = 0
hn = 2hn−1 + 1 untuk n ≥ 1
Barisan Fibonacci
0, 1, 1, 2, 3, 5, 8, …
f0 = 0, f1 = 1
fn = fn-1+ fn-2, untuk n ≥ 2
Tunjukkan bahwa untuk n  3,
fn > n-2 dengan  = (1+√5)/2.
Kompleksitas Algoritma gcd(a,b)
procedure gcd(a,b: bulat)
x := a; y := b;
while y ≠ 0
r := x mod y
x := y
y := r
return x (x = gcd(a,b))
Misalkan a,b dan a ≥ b.
Misalkan r0 = a dan r1= b. Diperoleh:
r0 = r1 q1 + r2
0 ≤ r2 < r1 ,
r1 = r2 q2 + r3
0 ≤ r3 < r2 ,
:
:
rn -2 = rn -1 qn -1 + rn 0 ≤ rn < rn-1,
rn-1 = rn qn .
Algoritma ini didasarkan pada Lemma berikut:
Lemma Misalkan a = bq + r, dengan a, b, q, dan r bilangan bulat.
Maka, gcd(a,b) = gcd(b,r).
Kompleksitas Algoritma gcd(a,b)
Lemma Misalkan a = bq + r, dengan a, b, q, dan r bilangan
bulat. Maka, gcd(a,b) = gcd(b,r).
Bukti
• Misalkan d|a dan d|b. Maka, d|r, karena r = a – bq. Jadi,
setiap pembagi bersama dari a dan b juga pembagi
bersama bagi b dan r.
• Misalkan d|b dan d|r. Maka, d|a, karena a = bq + r. Jadi,
setiap pembagi bersama dari b dan r juga pembagi
bersama bagi a dan b.
• Jadi, gcd(a,b)=gcd(b,r).
Kompleksitas Algoritma gcd(a,b)
Teorema Lame. Misalkan a, b bulat. Maka, banyaknya pembagian
yang digunakan dalam Algoritma Euclid gcd(a,b) lebih kecil atau
sama dengan 5 kali banyaknya digit desimal dari b.
Algoritma Euclid
r0 = r1 q1 + r2
r1 = r2 q2 + r3
:
:
rn -2 = rn -1 qn -1 + rn
rn-1 = rn qn .
Terdapat n pembagian.
0 ≤ r2 < r1 ,
0 ≤ r3 < r2 ,
0 ≤ rn < rn-1,
fn adalah barisan Fibonacci, dan telah
ditunjukkan bahwa:
fn > n-2 dengan  = (1+√5)/2.
Bilangan q1 , q2 , … , qn - 1 ≥ 1. Dan, qn ≥ 2
karena rn < rn -1 .
r n ≥ 1 = f2 ,
rn-1 ≥ 2rn ≥ 2f2 = f3 ,
rn-2 ≥ rn-1 + rn ≥ f3 + f2 = f4 ,
:
:
r2 ≥ r3 + r4 ≥ fn-1 + fn-2 = fn ,
b = r1 ≥ r2 + r3 ≥ fn + fn-1 = fn+1 .
Kompleksitas Algoritma gcd(a,b)
Karena, b = r1 ≥ r2 + r3 ≥ fn + fn-1 = fn+1 , dan
fn > n-2 dengan  = (1+√5)/2, maka, b ≥ fn+1 > n-1.
Ini berarti bahwa log10 b > (n-1) log10  > (n-1)/5,
karena log10  ≈ 0.208 > 1/5.
Sehingga, n < 1+ 5log10 b.
Maka, banyaknya pembagian lebih kecil atau
sama dengan 5 kali banyak digit dari b.
Himpunan yang Didefinisikan secara Rekursif
Langkah-langkah dalam mendefinisikan suatu
himpunan secara rekursif:
1.Langkah basis:
Spesifikasi koleksi awal dari anggota
2.Langkah rekursif:
Mendefinisikan aturan konstruksi anggota
baru dari anggota yang telah diketahui
Contoh 6
Misalkan S didefinisikan secara rekursif oleh:
3S
(x+y)  S jika x  S dan y  S
Maka S adalah himpunan bilangan bulat positif yang
habis dibagi 3.
Bukti
Misalkan A himpunan yang beranggotakan semua
bilangan bulat positif yang habis dibagi 3.
Untuk membuktikan bahwa A = S, harus ditunjukkan
A  S and S  A.
Contoh 6 (2)
Bagian I:
Akan dibuktikan A  S, yaitu menunjukkan bahwa setiap bilangan
bulat positif yang habis dibagi 3 ada di S (dengan menggunakan
induksi matematika).
Misalkan P(n): proposisi “3n anggota S” untuk setiap n bilangan asli.
1. Langkah basis: P(1) benar, karena 3  S.
2. Langkah induktif:
Asumsikan P(k) benar, yaitu 3k  S.
Akan ditunjukkan P(k+1) juga benar, yaitu 3(k+1)  S
Karena 3k  S dan 3  S, berdasarkan definisi rekursif dari S,
3k+3 = 3(k+1) juga ada di S.
3. Konklusi:
Jadi, setiap bilangan bulat positif yang habis dibagi 3 anggota S.
Jadi, A  S.
Contoh 6 (3)
Bagian II:
Akan ditunjukkan S  A dengan menggunakan definisi rekursif dari S.
Langkah basis:
Akan ditunjukkan setiap anggota awal S ada di A.
Karena 3 habis dibagi 3 maka 3  A.
Langkah rekursif:
Akan ditunjukkan bahwa setiap bilangan bulat yang dibangun dengan
mengunakan langkah rekursif juga merupakan anggota A, yaitu
(x+y)  A jika x,y  S (yang diasumsikan  A).
Jika x dan y keduanya di A, maka 3|x dan 3|y. Akibatnya, 3|(x+y).
Jadi, S  A.
Dengan demikian, secara keseluruhan, berlaku A = S.
Induksi Struktural
Dalam membuktikan hasil-hasil yang berkaitan dengan
himpunan yang didefinisikan secara rekursif, akan lebih mudah
apabila digunakan suatu bentuk induksi matematika yang
disebut induksi struktural.
Langkah-langkah dalam induksi struktural:
1. Langkah basis:
Menunjukkan bahwa hasil yang akan dibuktikan berlaku
untuk semua anggota awal.
2. Langkah rekursif:
Menunjukkan bahwa jika hasil yang akan dibuktikan berlaku
untuk anggota-anggota yang digunakan untuk membangun
anggota baru, maka hasil tersebut juga berlaku untuk
anggota yang baru dibangun.
Definisi Circular
Definisi 1.
Suatu “definisi” rekursif dikatakan circular jika looping
tidak dapat dihentikan.
Contoh 7.
Definisi circular dari Index and Glossary of Knuth, Vol 1.
Circular Definition, 260
see Definition, circular
Definition, circular,
see Circular definition
Himpunan String atas Alfabet
Himpunan string * atas alfabet  dapat didefinisikan secara
rekursif oleh:
1.Langkah basis:
  * ( adalah string kosong yang tidak memuat simbol)
2.Langkah rekursif:
Jika w  * dan x   , maka wx  *
Contoh 8.
Jika  = {0,1} maka string yang merupakan anggota * adalah:
•  yang didefinisikan sebagai anggota * dalam langkah basis,
• 0 dan 1 yang dibentuk dalam langkah rekursif pertama,
• 00, 01, 10, dan 11 yang dibentuk dalam langkah rekursif
kedua, dst
Konkatenasi Dua String
Sebagai operasi dari dua string, konkatenasi didefinisikan secara
rekursif sebagai:
1. Langkah basis:
Jika w *, maka w.  = w, dengan  string kosong
2. Langkah rekursif:
Jika w1  * dan w2  * dan x  , maka
w1 . (w2 x) = (w1 . w2) x
w1 . w2 seringkali ditulis sebagai w1 w2
Contoh 9.
Konkatenasi dari w1 = meng dan w2 = apa adalah
w1 w2 = mengapa
Panjang String
Panjang dari string w, l (w) dapat didefinisikan secara
rekursif oleh:
l () = 0,
l (w x) = l (w) + 1 jika w  * dan x  .
Soal 2.
Gunakan induksi struktural untuk membuktikan
l (x y) = l (x) + l (y).
Induksi yang Diperluas
Induksi matematika dapat diperluas untuk membuktikan
hasil-hasil mengenai himpunan yang memiliki sifat
terurut dengan baik.
Contoh 10.
Pandang himpunan N x N di mana (x1, y1) < (x2, y2) jika x1
< x2, atau x1 = x2 dan y1 < y2.
Setiap subhimpunan dari N x N memiliki elemen terkecil.
Jadi, N x N merupakan himpunan yang terurut dengan
baik.
Soal 3
Misalkan am ,n didefinisikan secara rekursif
untuk (m,n) N x N oleh
a0,0  0 dan
am , n
am 1,n  1, jika n  0 dan m  0

a

n
,
jika
n

0
m
,
n

1

Tunjukkan bahwa
am,n  m  n(n  1) / 2
untuk setiap (m,n) N x N.
Bahan Test I
• Logika
–
–
–
–
Proposisi
Predikat dan Kuantifikasi
Kuantifikasi Bersusun
Aturan Inferensi
• Bukti
– Metoda Pembuktian
– Strategi Pembuktian
• Struktur Diskrit
– Himpunan
– Fungsi
– Barisan
• Algoritma
– Algoritma
– Pertumbuhan Fungsi
– Kompleksitas Algoritma
• Induksi
– Induksi Matematika
– Induksi Kuat
• Rekursi
– Fungsi, Himpunan, Barisan
yang Didefinisikan secara
Rekursif
– Induksi Struktural
– Induksi yang Diperluas
Latihan Soal (1)
1.
Misalkan kedua asumsi berikut benar:
1. “Logika itu sulit atau tidak banyak mahasiswa yang menyukai logika.”
2. “Jika matematika mudah, maka logika tidak sulit.”
Berikan alasan mengapa kesimpulan berikut valid berdasarkan dua asumsi di
atas.
1. Bahwa matematika tidak mudah, jika banyak mahasiswa yang menyukai
logika.
2. Bahwa jika tidak banyak mahasiswa menyukai logika, maka matematika tidak
mudah atau logika tidak sulit.
2.
Tentukan nilai kebenaran dari pernyataan ”∃x∀y(x ≤ y2)” jika domain adalah
a) himpunan bilangan real positif.
b) himpunan bilangan bulat.
c) himpunan bilangan real tak nol.
Latihan Soal (2)
3.
Buktikan pernyataan berikut.
Jika x dan y bilangan real, maka max(x, y) + min(x, y) = x + y.
4.
Buktikan bahwa persamaan n2 + n3 = 100 tidak memiliki solusi bilangan
bulat positif.
5.
(a) Tunjukkan bahwa (x3 + 2x)/(2x + 1) adalah O(x2).
(b) Periksa apakah fungsi log(n+1) adalah O(log n).
6.
Berikan estimasi big-O untuk banyaknya operasi (penjumlahan atau
perkalian) yang digunakan dalam algoritma berikut.
t := 0
for i := 1 to n
for j := 1 to n
t := t + ij
Latihan Soal (3)
7. Buktikan bahwa n2 − 7n + 12 adalah bilangan
tak negatif untuk n bilangan bulat dengan n ≥
3.
8. Apakah papan catur dengan ukuran 6 x 2n,
untuk setiap bulat positif n, dapat ditutupi
dengan ubin berbentuk L?
Download