Tümevarım ve Özyineleme
CSC-2259 Ayrık Yapılar
Konstantin Busch - LSU 1
Tümevarım
Tümevarım çok kullanışlı bir ispat tekniğidir.
Bilgisayar bilimlerinde, tümevarım
algoritmalarının özelliklerini kanıtlamak için kullanılır.
Tümevarım ve öz yineleme bir biri ile ilişkilidir.
•Özyineleme algoritmalar için bir tanımlama metotdor.
•Tümevarım öz yineleme algoritmalrı için uygun bir ispat metodudur.
Konstantin Busch - LSU 3
önermesinin doğru olduğunu ispat etmek için tümevarım yöntemini kullanınız:)
(n P
Temel tümevarım:
Tümevarım hipotezi:
Tümevarım basamğı:
doğru olduğunu ispatlayınız doğru olduğunu varsayınız.
) 1 ( P
) (k P
) 1 ( k P
(her hangi bir k pozitif tam sayısı için) doğru olduğunu varsayınız.
) 1 ( k P
) (k P
) 1 (
)
( k P k P
Tümevarım basamaklarını diğer bir ifade ile ispatlarsak:
k her pozitif tam sayı için
Tümevarım hipotezi: doğru olduğunu varsayınız.
(her hangi bir k pozitif tam sayısı için) Tümevarım basamğı:
doğru olduğunu varsayınız.
Konstantin Busch - LSU 5
) 1 (
)
( k P k ) P
1 ( P
Doğru Doğru
( 2 ) ( 3 ) ( 4 ) )
1
( P P P
P
Temel tümevarım Tümevarım basamağı
Bütün pozitif tamsayılar için önerme doğrudur
Çıkarım kuralı olarak tümevarım:
) ( ))]
1 (
) ( ( )
1 (
[ P k P k P k nP n
7
2 ) 1 3 (
2 1 : )
(
n n
n n
P
2 ) 1 1 ( 1 1 : ) 1
(
P
2 ) 1 2 (
1 : )
( k k k
k
P
K. Busch - LSU
Teorem:
İspat:
2
) 1 ) 1 )((
1 ) (
1 ( 2
1 : ) 1
(
k k
k k k
P
İspatlarsak
olduğunu varsayalım Temel tümevarım:
Tümevarım hipotezi:
Tümevarım basamğı:
2
) 1 ) 1 )((
1 (
2
) 1 ( 2 ) 1 (
) 1 2 (
) 1 (
) 1 ( 2
1 : ) 1 (
k k
k k
k k k k
k k k
P (tümevarım
hipotezi) Tümevarım basamğı:
Konstantin Busch - LSU 9
Harmonik sayılar
H
j1 j
4 1 3 1 2
1 1
12 25 4
1 3 1 2 1 1
4
Örnek: H
, 3 , 2 ,
1 j
Teorem:
1 2
2
H
n n
İspat:
0 n
Temel tümevarım:
1 2 2 1 0
1
1
2
2 0
H n H
H
n
0
n
Konstantin Busch - LSU 11
Tümevarım hipotezi:
n k
1 2
2
H
k k
Beklendiğini varsayalım:
Tümevarım basamağı:
n k 1 2 1 1
2 1
H
kk
Göstereceğiz:
1 2 1 1 2
2 2 1 1 2
2 1 1
2 1 1 2
2 1 1
2 1
2 1 1
2 1 2
1 3
1 2 1 1
1
1 2 1
2 1 1
k k k k H H
k k
k k
k k
k k
k
k k
Tümevarım hipotezinden
Konstantin Busch - LSU 13
Teorem:
H
2n 1 n
İspat:
0 n
Temel tümevarım:
n H
H
H
2n
20
1 1 1 0 1
0 n
Tümevarım hipotezi:
n k
k H
2k1
Beklendiğini varsayalım:
Tümevarım hipotezi:
n k 1
) 1 (
1
2 1
k H
kGöstereceğiz:
Konstantin Busch - LSU 15
) 1 ( 1
1 1
1 2 2 1 1
2 1 1
2 1 1
2 1 1
2 1
2 1 1
2 1 2
1 3
1 2 1 1
1 2 1
2 1 1
k k k k H H
k k
k k
k k
k k
k
k k
İspat Tümevarım hipotezinden
n n H
n
1
1 2
2Gördüğümüz gibi:
Beklendiği gibi:
H
2logk H
k H
2logk log 2 k H
k1 log k
1
)
(log k
H
Konstantin Busch - LSU 17
boşluk boşluk
boşluk
2
2 2
2 2
23
3
2
2
Triominos
Teorem: Her dama tahtasında Triominoes’in kuyruğu bir kare hareket edebilir.
1 ,
2
2
n
nn
İspat: Temel tümevarım:
n 1
boşluk
1
1
2
2
Konstantin Busch - LSU 19
Tümevarım hipotezi:
n k
k
k
2
2
Boşluk her hangi bir yerde
dama tahtasında boşluğun her hangi bir yere yerleştiğini varsayalım
k
k
2
2
Tümevarım basamağı:
n k 1
1
1
2
2
k
kKonstantin Busch - LSU 21
k
k
2
2 2
k 2
kTümevarım hipoteziyle karede boşluğun döşendiğini düşünelim.
k
k 2
2
Üç yapay delikler eklendi
23 x 23 durumda:
Konstantin Busch - LSU 23
k
k
2
2 2
k 2
kTriomine ile üç boşluğu yer değiştirelim.
Şimdi bütün alanlar döşenmiş olur.
23 x 23 durum için:
Güçlü Tümevarım
Konstantin Busch - LSU 25
Temel tümevarım:
Tümevarım hipotezi:
Tümevarım basamağı:
doğru olduğunu ispatlayalım
doğru olduğunu varsayalım
doğru oldğunu varsayalım
) 1 ( P
) ( )
2 ( )
1
( P P k
P
) 1 ( k P )
(n
P
Önermesi için:Teorem: her tamsayı, asal sayıların sonucudur.
(sonuçlarından en az biri asal sayıdır)
2 n
İspat:
Temel tümevarım:
n 2
2 sayısı bir asal sayıdır.
Tümevarım hipotezi:
2 n k
ve arasındaki her tamsayı asal sayıların bir sonucudur diye söylenebilir.
2 k
(Güçlü tümevarım)
Konstantin Busch - LSU 27
Tümevarım basamakları:
n k 1
Eğer
k 1
asal sayı ise ispat bitmiştir.Eğer
k 1
asal sayı değilse, o biileşiktir.b a
k 1 2 , a b k
b a
k 1 2 , a b k
Tümevarım hipotezine göre;
p
ip p
a
1 2 q
jq q
b
1 2 1 , j i
j
iq q
p p b a
k1 1 1
Asal sayı Asal sayı
Konstantin Busch - LSU 29
Teorem:
için her posta gönderim bedeli
4 ve 5 sentlik posta pulları kullanılarak ayarlanabilir.
12 n
İspat:
Tümevarım temelleri:
4 4 4
12 n
Dört durumu inceleyelim.
(tüme varım basamakları için)
5 4 4
13 n
4 5 5
14 n
5 5 5
15 n
(Güçlü tüme varım)
Tümevarım hipotezi:
ile arasındaki her posta bedelinin 4 sent ve 5 sentlik pullar kullanarak
üretilebileceğini varsayalım
k n
12 12 k
Tümevarım basamağı:
n k 1
Eğer ise tümevarım basamağı tümevarım temelinden direkt olarak
takip eder
14 12 k
5 4
a b
n
Varsayım olarak:
Konstantin Busch - LSU 31
15
k k 1 ( k 3 ) 4 k
k
( 3 ) 12
Tümevarım hipotezi
5 4
) 3
( k a b
5 4
) 1 (
4 ) 3 (
1
k a b
k
İspat sonu
Faktoriyal fonksiyon
f ( n ) n ! Özyineleme
Özyineleme; fonksiyonların, kümelerin, algoritmaların tanımlanmasında kullanılır.
Örnek:
1 ) 0 ( f
) ( ) 1 (
) 1
( n n f n
f
Özyineleme basamak:
Özyineleme temel
Konstantin Busch - LSU 33
factorial( ) { if then
return
elsereturn }
1 n n
1
) 1 factorial(n- n
//özyineleme temel //özyineleme basamak
Faktoriyel için özyineleme algoritması
Fibonacci sayıları
2
1
n nn
f f
f
1 ,
0
10
f
Özyineleme temel:
f
Özyineleme basamak:
, ,
,
,
1 2 30
f f f
f
, 4 , 3 ,
2
n
Konstantin Busch - LSU 35
13 5 8
8 3 5
5 2 3
3 1 2
2 1 1
1 0 1 1
0
5 6 7
4 5 6
3 4 5
2 3 4
1 2 3
0 1 2 1 0
f f f
f f f
f f f
f f f
f f f
f f f f f
fibonacci( ) { if then
return elsereturn }
n
} 1 , 0{ n
n
) 2 fibonacci(
) 1
fibonacci(n- n-
//özyineleme temel //özyineleme basamak
Fibonacci fonksiyonu için özyineleme algoritması
Konstantin Busch - LSU 37
fibonacci( ) { if then else {
for to do {
return} }
n
0 n
Fibonacci fonksiyonu için iterasyon algoritması
0 y
0 xy 1
1
i n1 y
x z
y x
z y
y
Teorem:
f
n
n22 5 1
3 n
(altın oran)
için
İspat: Tümevarım (güçlü) ile ispat Tümevarım temel:
n 3 n 4
3
2 f
2 4
3
f
için olduğunu ispatlayalım
Konstantin Busch - LSU 39
Tüme varım hipotez:
2
nf
n
k n 3
Tümevarım basamak:
n k 1
Olduğunu varsayalım
) 1 ( 1
kf
k
k 4
1 3
2 1
1
k
k
k
k
kk
f f
f
2
1
için denklemini çözelimx
2 x 1 0
3 2
3 3
2
1
( 1 )
k
k
k
kk
Konstantin Busch - LSU 41
En büyük ortaka bölen
a a , 0 ) gcd(
) mod ,
gcd(
) ,
gcd( a b b a b
Özyinelemeli basamak:
Özyinelemeli temel:
b a
gcd( ) { if then
return elsereturn }
b a,
0 b
a
) mod gcd(b,a b
//özyineleme temel //özyineleme basamak
En büyük ortak bölen için özyinelemeli algoritma
//a>b olduğunu varsayalım
Konstantin Busch - LSU 43
Lames Teoremi:
, için Euclidian algoritması en çok
, )
bölerek (iterasyon) kullanılır.gcd( b a
10
b log 5 a b
İspat:
Algoritmanın bölümünde Fibonacci ilişkilerinde göstermiştik.
0
0 0 0
1
1 1
1 2
2 3 3
2 2 1
1 2 2
1 1 0
n n n
n n n
n n n
q r r
r r r
q r r
r r r
q r r
r r r
q r r
r
0a b r
1r r r
r r
r b
a
) 0 , gcd(
) , gcd(
) , gcd(
) , gcd(
) , gcd(
) , gcd(
) ,
gcd( 0 1 1 2 2 3
İlk sıfır sonuç
1 0 / r r
2 1/ r r
1 2 /
n
n r
r
n
n r
r 1/
Bölümler kalanlar
Konstantin Busch - LSU 45
n n
n n n
n n
n n
n n n
r r
q r r
r r
r r
q r r
r r r r
q r r
r r r r
q r r
2
0 1
1
1 2
1 1 2
3 2 1 3
2 2 1
2 1 0 2
1 1 0
ve tam sayı olduğu için burada sonlanır.1
nn
r
r q
n3 2 1
4 3 2
1 2
3
1 2
1 2
1
r r r
r r r
r r
r
r r r
r r
r
n n
n
n n n
n n
n
1 1
2 1 1
2 1
4 3 2
5 3 4 1 2 3
4 2 3 1
2
3 2
1
2
2 2
2 1
n n
n
n n
n n n n
n n n
n n
n
f f
f r r r
f f
f r r r
f f f r
r r
f f f r r r
f f
r r
f r
olduğu için burada kalır.
1 ) , gcd(
a b
r
nKonstantin Busch - LSU 47
1
1
r f
nb
1 1
nf
n
2 5 1
1
nb
10
10
( 1 ) log
log b n
1 log
5 log 1
log
10 10
10
b b
n
b n 5 log
10İspat sonu
Mergesort (Birleştirme sıralı) algoritma 8 2 4 6 9 7 10 1 5 3
8 2 4 6 9 7 10 1 5 3
2 4 6 8 9 1 3 5 7 10
1 2 3 4 5 6 7 8 9 10 Böl
sırala sırala
birleştir
Konstantin Busch - LSU 49
sort( ) { if then {
return }else return }
an
a
a1, 2,,
1
n
n/2
m
) , , ,
sort(a1 a2 am
A
) , , ,
sort(am am 1 an
B
) , merge( BA
a1
8 2 4 6 9 7 10 1 5 3
Özyinelemeli çağrıların giriş değerleri
8 2 4 6 9 7 10 1 5 3
8 2 4 6 9 7 10 1 5 3
8 2 4 6 9
8 2
7 10 1
7 10
5 3
Konstantin Busch - LSU 51
1 2 3 4 5 6 7 8 9 10
Birleştirmenin giriş ve çıkış değerleri
2 4 6 8 9 1 3 5 7 10
2 4 8 6 9 7 10 1 5 3
2 8 4 6 9
8 2
7 10 1
7 10
5 3
merge( ) {
while do {
Listeden en küçük eleman çıkartılır ve eklenir
}if then { kalan elemanlar eklenir }return
}
L
B
A, //iki sıralanmış liste
B
A and B A,
L
B
A or L
L
Konstantin Busch - LSU 53
2 4 6 8 9
2 4 8 6 9 Birleştirme
A B L Karşılaştırma
2 4 8 4 88 8
6 96 9 6 99 9
22 4 2 4 6 2 4 6 8 2 4 6 8 9
2<6 4<6 6<8 8<9
İki listeyi birleştirmek için karşılaştırılan toplam en çok sayı; B A,
|
|
|
| s
comparison
# A B
A’nın uzunluğu B’nin uzunluğu Birleştirme büyüklüğü
Konstantin Busch - LSU 55
Özyinelemeli çağırma ağacı
an
a a1, 2,,
2 2
1,a , ,an
a an ,an , ,an
2 2 2 1
2 1, a
a a3, a4 an3,an2
n
n a
a1,
a1 a2 a3 a4 an3 an2 an1 an
4 1, ,a
a an3,,an
4 1, ,an a
1 2 4
,
, n
n a
a
4 1 3 2
,
, n
n a
a a n , ,an 4 1
3
n 2
kVarsayım olarak
Liste başına elemanlar
#ağacın seviyesi =
1 log n
Varsayım
n n log
2log
1
0
2log
n n
1
2log
2
/ n n
) 1 (log
2log
2 n n
) 2 (log
2log
4 n n
Özyinelemeli çağırma ağacı
2
2log
4
/ n n
n 2
/
n n/2
4 /
n n/4 n/4 n/4
4 4
2 2 2 2
1 1 1 1 1 1 1 1
Konstantin Busch - LSU 57
Birleştirme ağacı
an
a a1, 2,,
2 2
1,a , ,an
a an ,an , ,an
2 2 2 1
2 1, a
a a3, a4 an3,an2
n
n a
a1,
a1 a2 a3 a4 an3 an2 an1 an
4 1, ,a
a an3,,an
4 1, ,an a
1 2 4
,
, n
n a
a
4 1 3 2
,
, n
n a
a a n , ,an 4 1
3
Birleştirme ağacı
2 4 2 / n
n
4 / n
1 n
2 /
n n/2
4 /
n n/4 n/4 n/4
4 4
2 2 2 2
1 1 1 1 1 1 1 1
Liste başına elemanlar
n n/4 4
Konstantin Busch - LSU 59
n n
/2 2
n n
/4 4
n n/2 2
n n1
Seviye başına birleştirme
Toplam maliyet:n(#levels-1) nlogn
Birleştirme ağacı Seviye başına karşılaştırma
n 2
/
n n/2
4 /
n n/4 n/4 n/4
4 4
2 2 2 2
1 1 1 1 1 1 1 1
Birleştirme başına elemanlar
Eğer karşılaştırma sayısı ise en çok
n 2
kn n log
Eğer karşılaştırma sayısı ise en çok
n 2
k) log (
log m O n n
m
n
m 2
logn 2
Birleştirmeli sıralamanın zaman karmaşıklığı: