• Nie Znaleziono Wyników

Indukcja i rekurencja

N/A
N/A
Protected

Academic year: 2021

Share "Indukcja i rekurencja"

Copied!
49
0
0

Pełen tekst

(1)

Indukcja i rekurencja

Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków

UTP Bydgoszcz

02b

(2)

Indukcja matematyczna

Zasada inducji matematycznej.

Niech T (n) będzie tezą (wzorem), w której występuje liczba naturalna n oraz niech n0 ∈ N. Ponadto niech będą spełnione dwa warunki.

1 T (n0) jest słuszna.

2 Prawdziwa jest implikacja:

jeżeli T (k) jest słuszna, to T (k + 1) jest słuszna (dla k ­ n0).

Wtedy T (n) jest słuszna dla każdej liczby naturalnej n ­ n0. Uwaga.

Najczęściej przyjmujemy n0= 1.

Oczywiście w punkcie 2 literę k możemy zastąpić dowolną inną literą, na przykład n lub n − 1.

(3)

Zasada inducji matematycznej

Przykład. Nierówność Bernoulliego:

(1 + x )n> 1 + nx dla n ­ 2, x > −1, x 6= 0.

1 Sprawdzamy dla n = 2.

(1 + x )2 = 1 + 2x + x2> 1 + 2x ; teza jest słuszna dla n = 2.

2 Załóżmy, że teza jest słuszna dla n.

Wykażemy, że jest słuszna dla n + 1.

(1 + x )n> 1 + nx

(1 + x )n· (1 + x) > (1 + nx)(1 + x) (1 + x )n+1> 1 + (n + 1)x + nx2 (1 + x )n+1> 1 + (n + 1)x

Wykazaliśmy oba kroki indukcyjne, więc teza została udowodniona dla n ­ 2.

(4)

Definicje rekurencyjne

Rekurencja to odwoływanie się funkcji lub definicji do samej siebie.

Początkowy element (może być ich kilka) jest znany. Definicja

rekurencyjna odwołuje się do jednego lub wielu elementów poprzednich.

Przykład: silnia.

Zamiast liczyć “tradycyjnie” n! = 1 · 2 · . . . · n możemy zastosować rekurencję.

(5)

Silnia

n! =

(1 dla n = 0,

(n − 1)! · n dla n > 0 Algorytm (Python) sil (n) = n!.

def sil(n):

if n==0:

return 1 return sil(n-1)*n

24 6 2 1

sil (4) sil (3)

sil (2)

sil (1)

sil (0) = 1

(6)

Schemat rekurencyjny dla obliczania 4!

n! =

(1 dla n = 0,

(n − 1)! · n dla n > 0 Algorytm (Python) sil (n) = n!.

def sil(n):

if n==0:

return 1 return sil(n-1)*n

24 6 2 1

sil (4) sil (3)

sil (2)

sil (1)

sil (0) = 1

(7)

Silnia

Wzór Stirlinga.

Dla każdego n ∈ N+ zachodzą oszacowania:

2π ·√

n · nne−n ¬ n! ¬ e√

n · nne−n.

Ponadto,

n! =

n e

n 2πn ·



1 + O1 n



n e

n

·√ 2πn.

(8)

Potęga ubywająca n

k

, k, n ∈ N.

nk = n(n − 1)(n − 2) · . . . · (n − k + 1)

| {z }

k czynników

= n!

(n − k)!

nk =

0 dla n < k, 1 dla k = 0 Qk

i =1(n − i + 1) dla 0 < k ¬ n Potęga ubywająca nk, wzór rekurencyjny

nk =

0 dla n < k, 1 dla k = 0

n · (n − 1)k−1 dla 0 < k ¬ n

(9)

Schemat działania algorytmu dla k = 4, n = 6.

Algorytm (Python) pu(n, k) = nk. def pu(n,k):

if n<k:

return 0 elifk==0:

return 1

return pu(n-1,k-1)*n

360 60 12 3

pu(6, 4) pu(5, 3)

pu(4, 2)

pu(3, 1)

pu(2,0) =1

(10)

Potęga przyrastająca

Potęga przyrastająca nk.

nk = n · (n + 1) · . . . · (n + k − 2) · (n + k − 1)

| {z }

k czynników

nk =

1 dla k = 0,

0 dla n = 0 ∧ k 6= 0, k, n ∈ N, Qk

i =1(n + i − 1) dla k 6= 0 ∧ n 6= 0

(11)

Potęga przyrastająca

Potęga przyrastająca nk.

k

Y

i =1

(n + i − 1) = n · (n + 1) · · · (n + k − 2) · (n + k − 1)

| {z }

k czynników

Zauważmy, że

nk−1· (n + k − 1) =Qk−1i =1(n + i − 1) · (n + k − 1) =Qki =1(n + i − 1) = nk Wzór rekurencyjny

nk =

1 dla k = 0,

0 dla n = 0 ∧ k 6= 0, k, n ∈ N, nk−1· (n + k − 1) dla k 6= 0 ∧ n 6= 0

(12)

Potęga przyrastająca

Potęga przyrastająca nk.

nk =

1 dla k = 0,

0 dla n = 0 ∧ k 6= 0, k, n ∈ N, nk−1· (n + k − 1) dla k 6= 0 ∧ n 6= 0 Algorytm (Python) pp(n, k) = nk.

def pp(n,k):

if k==0:

return 1

elif n==0 and k>=1:

return 0

return pp(n,k-1)*(n+k-1)

(13)

Schemat działania algorytmu dla k = 4, n = 6.

Algorytm (Python) pp(n, k) = nk. def pp(n,k):

if k==0:

return 1

elif n==0 and k>=1:

return 0

return pp(n,k-1)*(n+k-1)

3024 336 42 6

pp(6, 4) pp(6, 3)

pp(6, 2)

pp(6, 1)

pp(6, 0) = 1

(14)

Definicje indukcyjne/rekurencyjne

Mamy dane a0, r oraz q.

Ciąg arytmetyczny: an=

(a0 dla n = 0, an−1+ r dla n > 0

Fakt. an= a0+ nr . Ciąg geometryczny: an=

(a0 dla n = 0, an−1· q dla n > 0

Fakt 1.

Dla q = 0 wszystkie wyrazy w ciągu (z wyjątkiem pierwszego, jeśli a0 6= 0) to zera.

Fakt 2. Jeżeli q 6= 0, to an= a0· qn.

Dla niektórych ciągów znalezienie “jawnego” wzoru na jego n-ty wyraz nie jest łatwe.

(15)

Liczby harmoniczne: H

n

= 1 +

12

+

13

+ · · · +

1n

Definicja rekurencyjna:

H1 = 1, Hn+1 = Hn+ 1

n + 1 dla n ­ 1 Fakt.

ln(n + 1) < Hn< 1 + ln n Liczby harmoniczne s-tego rzędu:

Hn,s = 1 + 1 2s + 1

3s + · · · + 1 ns Fakt. Gdy s > 1, to ciąg H1,s, H2,s, H3,s, . . . jest zbieżny, a jego granicą jest funkcja zeta Riemanna ζ(s) =Pn=1n1s.

(16)

Liczby Fibonacciego

FIB(n) =

0 dla n = 0, 1 dla n = 1,

FIB(n − 1) + FIB(n − 2) dla n ­ 2

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584

(17)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(18)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(19)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(20)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(21)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(22)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(23)

Liczby Fibonacciego

Kilka liczb Fibonacciego:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

(24)

Liczby Fibonacciego

FIB(n) =

0 dla n = 0, 1 dla n = 1,

FIB(n − 1) + FIB(n − 2) dla n ­ 2 ,

Twierdzenie (Zeckendorff)

Każda dodatnia liczba naturalna może być przedstawiona jako suma różnych liczb Fibonacciego (tak, by suma ta

nie zawierała dwóch kolejnych liczb Fibonacciego).

PRZYKŁAD.

100 = 1 + 2 + 8 + 89 = FIB(1) + FIB(3) + FIB(6) + FIB(11) 100 = 3 + 8 + 89 = FIB(4) + FIB(6) + FIB(11)

1000000 = 55 + 144 + 46368 + 121393 + 832040

= FIB(10) + FIB(12) + FIB(24) + FIB(26) + FIB(30)

(25)

Ciąg Fibonacciego

FIB(n) =

0 dla n = 0, 1 dla n = 1,

FIB(n − 1) + FIB(n − 2) dla n ­ 2 ,

Twierdzenie (Eulera-Bineta)

FIB(n) = 1

5

"

1 + 5 2

!n

1 −√ 5 2

!n# .

Wyprowadzimy ten wzór później korzystając z funkcji tworzących.

(26)

„Złota liczba (złota proporcja)” ϕ =

1+

5

2

≈ 1.618

Własność.

n→∞lim

FIB(n + 1)

FIB(n) = 1 + 5

2 .

Dowód, I sposób.

n→∞lim

FIB(n + 1)

FIB(n) = lim

n→∞

1 5



1+ 5 2

n+1

1−

5 2

n+1

1 5

h1+ 5 2

n

1−

5 2

ni

= lim

n→∞

ϕn+1− (1 − ϕ)n+1

ϕn− (1 − ϕ)n = lim

n→∞

ϕ − (1 − ϕ)1−ϕϕ n 1 −1−ϕϕ n

= ϕ

(27)

FIB(n) = 1

5

h1+ 5 2

n



1− 5 2

ni

Własność.

n→∞lim

FIB(n + 1)

FIB(n) = 1 + 5

2 .

Dowód, I sposób.

n→∞lim

FIB(n + 1)

FIB(n) = lim

n→∞

1 5



1+ 5 2

n+1

1−

5 2

n+1

1 5

h1+ 5 2

n

1−

5 2

ni

= lim

n→∞

ϕn+1− (1 − ϕ)n+1

ϕn− (1 − ϕ)n = lim

n→∞

ϕ − (1 − ϕ)1−ϕϕ n 1 −1−ϕϕ n

= ϕ

(28)

„Złota liczba (złota proporcja)” ϕ =

1+

5

2

≈ 1.618

Własność.

n→∞lim

FIB(n + 1)

FIB(n) = 1 + 5

2 .

Dowód, I sposób.

n→∞lim

FIB(n + 1)

FIB(n) = lim

n→∞

1 5



1+ 5 2

n+1

1−

5 2

n+1

1 5

h1+ 5 2

n

1−

5 2

ni

= lim

n→∞

ϕn+1− (1 − ϕ)n+1

ϕn− (1 − ϕ)n = lim

n→∞

ϕ − (1 − ϕ)1−ϕϕ n 1 −1−ϕϕ n

= ϕ

(29)

lim

n→∞ FIB(n+1)

FIB(n)

=

1+

5

2

= ϕ =

1+

5

2

≈ 1.618

Dowód, II sposób. Ponieważ ciąg FIB(n+1)FIB(n)  jest nierosnący i ograniczony z dołu (na przykład przez 0), więc ma granicę; oznaczmy ją przez x . Oczywiście tę samą granicę x ma ciąg FIB(n−1)FIB(n) .

x = lim

n→∞

FIB(n + 1)

FIB(n) = lim

n→∞

FIB(n) + FIB(n − 1) FIB(n)

= 1 + lim

n→∞

FIB(n − 1)

FIB(n) = 1 + 1

limn→∞ FIB(n) FIB(n−1)

= 1 + 1 x Jedynym dodatnim rozwiązaniem równania x = 1 + 1x jest x = ϕ.

(30)

„Złoty podział (złota proporcja)”

a b

c Dzielimy tak, by

a

b = a + b a .

Po podstawieniu x = ab otrzymamy równanie x = 1 + 1x, którego jedynym dodatnim rozwiązaniem jest x = ϕ = 1+

5

2 ≈ 1.618.

(31)

„Złoty podział (złota proporcja)”

a b

a + b

a b

Dzielimy tak, by

a

b = a + b a .

Po podstawieniu x = ab otrzymamy równanie x = 1 +x1, którego jedynym dodatnim rozwiązaniem jest x = ϕ = 1+

5

2 ≈ 1.618.

(32)

lim

n→∞ FIB(n+1)

FIB(n)

=

1+

5

2

= ϕ =

1+

5

2

≈ 1.618.

Obserwacja.

FIB(1) FIB(0) = 1

1 = 1 FIB(2)

FIB(1) = 2

1 = 1 +1 1 FIB(3)

FIB(2) = 3

2 = 1 + 1 1 +11 FIB(4)

FIB(3) = 5

3 = 1 + 1 1 +1+11

1

(33)

lim

n→∞ FIB(n+1)

FIB(n)

=

1+

5

2

= ϕ =

1+

5

2

≈ 1.618

Obserwacja.

Kolejne wyrazy FIB(n+1)FIB(n) można wyrazić ułamkiem łańcuchowym:

1 + 1

1 + 1

1+ 1

1+ 1

1+ 1

1+ 1 1+...

(34)

Liczby Stirlinga II rodzaju

Liczby Stirlinga II rodzaju, oznaczane {nk} („ k podzbiorów n”) lub S (n, k), opisują liczbę sposobów podziału zbioru n elementowego na k niepustych podzbiorów, których kolejność nie jest istotna.

Przykład. {43} =6, gdyż czteroelementowy zbiór, na przykład {A, B, C , D} możemy podzielić na sześćsposobów na trzy niepuste podzbiory:

{A}, {B}, {C , D}

{A}, {C }, {B, D}

{A}, {D}, {B, C } {B}, {C }, {A, D}

{B}, {D}, {A, C } {C }, {D}, {A, B}

(35)

Liczby Stirlinga II rodzaju

Przykład.

{32} =3, gdyż trójelementowyzbiór {A, B, C } możemy podzielić natrzy sposoby na dwaniepuste podzbiory:

{A}, {B, C }; {B}, {A, C }; {C }, {B, A}.

(36)

Liczby Stirlinga II rodzaju

Niektóre liczby Stirlinga II rodzaju:

n/k 0 1 2 3 4 5 6 7 8

0 - - - -

1 0 1 - - - -

2 0 1 1 - - - -

3 0 1 3 1 - - - - -

4 0 1 7 6 1 - - - -

5 0 1 15 25 10 1 - - -

6 0 1 31 90 65 15 1 - -

7 0 1 63 301 350 140 21 1 -

8 0 1 127 966 1701 1050 266 28 1

(37)

Liczby Stirlinga II rodzaju

Liczby Stirlinga II rodzaju, oznaczane {nk} („ k podzbiorów n”), opisują liczbę sposobów podziału zbioru n elementowego na k niepustych podzbiorów, których kolejność nie jest istotna.

Przykłady.

{n0} = 0 dla n ­ 1

{n1} = 1 dla n ­ 1 (istnieje tylko jeden podział na jeden niepusty podzbiór) {nn} = 1 (istnieje tylko jeden podział na n niepustych zbiorów)

{nk} = 0 dla k > n (nie da się podzielić zbioru n elementowego na n + 1 lub więcej niepustych podzbiorów)

(38)

Liczby Stirlinga II rodzaju, wzór rekurencyjny

{nk} =

0, dla (n ­ 1 ∧ k = 0) ∨ k > n 1, dla (n ­ 1 ∧ k = 1) ∨ k = n

{n−1k−1}+k · {n−1k } w pozostałych przypadkach Uzasadnienie. Niech X = {c1, c2, . . . , cn}. Rozdzielmy wszystkie podziały tego zbioru na dwie klasy: te które zawierają zbiór

jednoelementowy {c1} oraz te, które go nie zawierają. Klasa pierwsza zawiera {n−1k−1}elementów, gdyż pozostałe n − 1 elementy dzielimy na k − 1 zbiorów. Klasa druga zawiera k · {n−1k }elementów, gdyż najpierw dzielimy zbiór X \ {c1} = {c2, . . . , cn} na k niepustych podzbiorów (mamy {n−1k } możliwości), potem dołączamy element c1 do jednego z tych zbiorów (mamy k możliwości).

(39)

Wieże Hanoi

Wieże Hanoi.

Mamy trzy paliki (wieże) A, B, C . Paliki B i C są puste, a na paliku A znajduje się n krążków o różnych średnicach, nanizanych w porządku od największego (na dole) do najmniejszego (na górze). Należy przenieść krążki na palik B (wolno posłużyć się palikiem C ) stosując reguły:

można przenosić tylko po jednym krążku;

nie można umieszczać krążka większego na mniejszym.

Medoda dla n = 1 (jeden ruch, r1= 1): A → B.

Medoda dla n = 2 (trzy ruchy, r2 = 3): A → C , A → B, C → B.

(40)

Metoda dla n = 3 (siedem ruchów, r

3

= 7):

Ilustracja.

palik A tu są

palik B tu mają być

palik C

pomocniczy pomocniczy

(41)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B,

Ilustracja.

palik A tu są

palik B tu mają być

palik C

pomocniczy pomocniczy

palik A tu są

palik B tu mają być

palik C

pomocniczy

(42)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C ,

Ilustracja.

(43)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C , B → C ,

Ilustracja.

(44)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C , B → C , A → B,

Ilustracja.

(45)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C , B → C , A → B, C → A,

Ilustracja.

(46)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C , B → C , A → B, C → A, C → B,

Ilustracja.

(47)

Metoda dla n = 3 (siedem ruchów, r

3

= 7): A → B, A → C , B → C , A → B, C → A, C → B, A → B.

Ilustracja.

(48)

Algorytm dla n (liczba ruchów: r

n

= 2

n

− 1).

Wiemy, że r1 = 1, r2 = 3, r3 = 7.

Algorytm rekurencyjny.

Przenosimy n − 1 górnych krążków ze słupka A na słupek C wykorzystując słupek B (zobacz czwarty rysunek na poprzednim slajdzie). Możemy „zapomnieć” o największym krążku. Wykonamy więc rn−1 ruchów.

Wykonujemy jeden ruch. Przenosimy największy krążek z A na B (piąty rysunek). Ten krążek jest już na właściwym miejscu.

Przenosimy n − 1 krążków ze słupka C na słupek B wykorzystując słupek A. Wykonamy rn−1 ruchów.

Otrzymamy

rn= rn−1+ 1 + rn−1 = 2rn−1+ 1.

(49)

Algorytm dla n (liczba ruchów: r

n

= 2

n

− 1).

Czas na dowód indukcyjny, że jeśli

rn=

(1 dla n = 1

2rn−1+ 1 dla n ­ 2 , to

rn= 2n− 1.

1 Dla n = 1 mamy

r1= 1 =21− 1.

2 Zakładamy, że rn−1= 2n−1− 1. Wtedy

rn=2rn−1+ 1= 2(2n−1− 1) + 1 = 2 · 2n−1− 2 + 1 =2n− 1.

Udowodnimy też ten wzór później inną metodą - korzystając z funkcji tworzących.

Cytaty

Powiązane dokumenty

Należy zaznaczyć, że wskazany w analizie przedział czasowy jest szczególny dla formułowania się wizji etniczności zarówno na potrzeby społeczeństwa dominującego, jak i

„ lista jest albo pusta, albo składa się z jednego elementu poprzedzającego inny, kolejny element

Czy istnieje taki k-elementowy zbiór S wierzchołków grafu G, że każdy z pozostałych wierzchołków jest osiągalny z jakiegoś wierzchołka należącego do S drogą składającą się

Typ zależności między osobnikami dwóch gatunków, gdzie jeden żyje kosztem drugiego, równocześnie nie mogąc bez niego utrzymać się przy życiu.. Współżycie osobników

Uczestnik moźe przejrzeć te listy, których tematy go zainteresują i odnieść się do tych wątków dyskusji, które wydadzą mu się ważne.. Najciekawsze listy

Rozprawa dotyczyła modelowania wybranych procesów socjo-ekonomicznych w układach złożonych, a konkretnie procesu kształtowania cen w układzie kupujących i sprzedawców.

Narysuj w pustej pętli tyle kropek, ile jest razem domów na osiedlach.. Narysuj w pustej pętli tyle kresek, ile jest razem kwiatków

jest wymierna, czy niewy-