Lista zadań 3: Rekurencja, schemat rekursji i funkcje pierwotnie
Transkrypt
Lista zadań 3: Rekurencja, schemat rekursji i funkcje pierwotnie
Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne Elementy Logiki i Teorii Mnogości 2015/2016 Zadanie 1. Oblicz iteracyjnie i rekurencyjnie f (4), gdzie f jest funkcją określoną na zbiorze liczb naturalnych taką, że f (0) = 1, f (1) = −1 oraz (a) f (n) = f (n − 1)2 + f (n − 2), (b) f (n) = 2f (n−1) , (c) f (n) = (−3)n f (n − 1), (d) f (n) = n · f (n − 1), (e) f (n) = f (n − 1) · f (n − 2) + 2 dla dowolnej liczby naturalnej n 2. Zadanie 2. Podaj rekurencyjną definicję następujących ciągów: (a) an = 5 dla n ∈ N, (b) an = 2n dla n ∈ N, (c) an = 5n + 2 dla n ∈ N, (d) an = n! dla n ∈ N, (e) dowolnego ciągu arytmetycznego o ustalonym wyrazie pierwszym i ustalonej różnicy, (f) dowolnego ciągu geometrycznego o ustalonym wyrazie pierwszym i ustalonym ilorazie. Zadanie 3. Znajdź postać jawną ciągu (an )n∈N , gdzie (a) a0 = 1, an = nan−1 dla n 1, (b) 1 a0 = 5, an = nan−1 dla n 1, (c) a0 = 0, an = an−1 + 1 dla n 1, a0 = 0, (d) an = an−1 + n2 dla n 1, (e) a0 = 7, a0 = 2, an = 3an−1 − 2an−2 dla n 2. (f) a1 = 3, a = 2a n n−1 − an−2 dla n 2, (g) a0 = 1, 2 an = n an−1 dla n 1, a1 = 3, Zadanie 4. Definiujemy rekurencyjnie ciąg (an )n∈N w następujący sposób: a0 = a1 = 1, an = 2an−1 + an−2 dla n 2. (a) Oblicz iteracyjnie i rekurencyjnie a6 . (b) Udowodnij, że wszystkie wyrazy ciągu (an )n∈N są nieparzyste. Zadanie 5. Udowodnij, że jeśli a0 = 2, an = an−1 + 2an−2 dla n 2, a1 = 3, to an 2n dla dowolnego n ∈ N. Zadanie 6*. Ciąg Fibonacciego dany jest wzorem rekurencyjnym F0 = 0, Fn = Fn−1 + Fn−2 dla n 2. F1 = 1, Udowodnij, że (a) Fn = √1 5 √ n 1+ 5 2 − √1 5 √ n 1− 5 2 , n 0, (b) 2|F3k dla k 0, (c) Pn k=1 Fk = Fn+2 − 1 dla n 0. Zadanie 7. Podaj rekurencyjną definicję ciągu obliczanego przez następującą funkcję w C/C++: int ciag(int n) { 2 int a0 = 1; int wyn = a0; for (int i = 1; i <= n; i++) { wyn = 2 * wyn + 3; } return wyn; } Zadanie 8. Sprawdź, czy poniższe dwie funkcje w C/C++ (ciag i ciagRek) obliczają wyrazy tego samego ciągu: • int ciag(int n) { int a0 = 1; int wyn = a0; for (int i = 1; i <= n; i++) { wyn = 5 * wyn; } return wyn; } • int ciagRek(int n) { if (n == 0) return 1; else return 5 * ciagRek(n-1); } Podaj wzór jawny tego ciągu, a następnie wykaż indukcyjnie, że jest on rosnący. Zadanie 9. Palindromem nad alfabetem Σ nazywamy słowo nad Σ postaci a1 a2 ...an−1 an an an−1 ...a2 a1 lub a1 a2 ...an−1 an ban an−1 ...a2 a1 . Palindrom jest więc słowem, które czyta się tak samo od lewej strony do prawej oraz od prawej do lewej. Niech Σ = {0, 1}, zaś P będzie zbiorem zdefiniowanym rekurencyjnie w następujący sposób: 3 • 0 ∈ P oraz 1 ∈ P , • jeśli a ∈ P , to 0a0 ∈ P oraz 1a1 ∈ P . Czy zbiór P jest zbiorem wszystkich palindromów? Jeśli nie, to zmień powyższą definicję tak, aby zbiór P posiadał tę własność. Zadanie 10. Niech Σ = {a, b} będzie alfabetem i niech sn oznacza liczbę tych wszystkich słów długości n nad Σ, które nie zawierają podsłowa 0 ab0 . (a) Oblicz s0 , s1 , s2 , s3 . (b) Znajdź wzór na sn i udowodnij, że jest on poprawny. Zadanie 11. Niech Σ = {a, b} będzie alfabetem i niech tn oznacza liczbę tych wszystkich słów długości n nad Σ, w których litera 0 a0 występuje parzystą liczbę razy. (a) Oblicz t0 , t1 , t2 , t3 . (b) Znajdź wzór na tn i udowodnij, że jest on poprawny. Zadanie 12. Niech Σ będzie alfabetem, zaś tail funkcją zdefiniowaną na zbiorze wszystkich list [Σ] nad Σ następującą formułą rekurencyjną tail([]) = [], tail([a]) = [a], dla a ∈ Σ, tail(a : l) = tail(l), dla a ∈ Σ, l ∈ [Σ]. Udowodnij, że dla dowolnej, niepustej listy l = [a1 , a2 , . . . , an ] ∈ [Σ] zachodzi tail(l) = [an ]. Zadanie 13. Niech Σ będzie alfabetem, zaś head funkcją zdefiniowaną na zbiorze wszystkich list [Σ] nad Σ następującą formułą rekurencyjną head([]) = [], head([a]) = [a], dla a ∈ Σ, head(l + +[a]) = head(l), dla a ∈ Σ, l ∈ [Σ]. Udowodnij, że dla dowolnej, niepustej listy l = [a1 , a2 , . . . , an ] ∈ [Σ] zachodzi head(l) = [a1 ]. 4 Zadanie 14. Niech pn oznacza liczbę wszystkich podziałów zbioru {1, ..., n} na dwa niepuste i rozłączne podzbiory. Znajdź zależność rekurencyjną dla ciągu (pn )n∈N i wyznacz jego postać jawną. Zadanie 15. W pewnym mieście jeden człowiek zachorował na grypę. Każdego następnego dnia każda chora osoba zarażała dziennie dokładnie cztery zdrowe osoby. Ile chorych było po n dniach, przy założeniu, że chory zaczyna zarażać po 24 godzinach od zachorowania oraz nikt w czasie tych n dni nie wyzdrowiał? Rozwiązanie podaj w postaci rekurencyjnej oraz jawnej. Zadanie 16. Proces przydzielania n dzieci do n miejsc w klasie może być podzielony na dwie fazy: (1) wybór dziecka na pierwsze miejsce i (2) przypisanie pozostałych n − 1 dzieci do pozostałych miejsc. Niech An oznacza liczbę różnych przypisań n dzieci do n miejsc. (a) Napisz rekurencyjną definicję ciągu An . (b) Oblicz rekurencyjnie A6 . (c) Czy ciąg An wydaje Ci się znajomy? Zadanie 17. Weźmy pod uwagę proces przydzielania 2n dzieci do n wagoników kolejki tak, by w każdym wagoniku było dwoje dzieci. Najpierw wybieramy dwoje dzieci do pierwszego wagonika (pokaż, że można to zrobić na 2n(2n−1) 2 sposobów). Następnie przydzielamy pozostałe dzieci do pozostałych n − 1 wagoników. Niech Bn będzie liczbą sposobów, na które można przydzielić 2n dzieci do n wagoników. (a) Napisz rekurencyjną definicję ciągu Bn . (b) Oblicz rekurencyjnie B3 . (c) Oblicz B5 metodą iteracyjną. (d) Podaj ogólny wzór na Bn . Definicja Funkcja f : N → N jest określona poprzez schemat rekursji zastosowany do funkcji h : N2 → N i liczby n0 ∈ N, o ile: (1) f (0) = n0 , (2) f (n + 1) = h(n, f (n)) dla dowolnego n ∈ N. Zadanie 18. Podaj, jaką funkcję określa schemat rekursji zastosowany do funkcji h : N2 → N i liczby n0 ∈ N, jeśli (a) h(m, n) = 0, 5 (b) h(m, n) = n, (c) h(m, n) = m, (d) h(m, n) = n + 1, (e) h(m, n) = m + n dla dowolnych m, n ∈ N. Zadanie 19. Funkcję f : N → N określ za pomocą schematu rekursji, jeśli: (a) f (n) = 2n, (b) f (n) = 2n , (c) f (n) = n2 , (d) f (n) = n2 + 3n + 5. Definicja (1) Funkcją zerową nazywamy funkcję zero : N → N taką, że zero(n) = 0 dla dowolnego n ∈ N. (2) Funkcją następnika nazywamy funkcję succ : N → N taką, że succ(n) = n + 1 dla dowolnego n ∈ N. (3) Niech k 1 oraz i = 1, ..., k. Definiujemy funkcję rzutu Πki : Nk → N następującym wzorem: Πki (n1 , ..., nk ) = ni dla dowolnych n1 , ..., nk ∈ N. Zadanie 20. Podaj jawną postać następujących funkcji: (a) succ ◦ zero, (b) succ ◦ succ ◦ succ, (c) succ ◦ Π32 . Zadanie 21. Przedstaw funkcję f : Nm → N w postaci superpozycji funkcji zero, succ oraz Πki (dla odpowienich i oraz k), jeżeli: (a) m = 1, f (n) = n + 2 dla dowolnego n ∈ N, 6 (b) m = 3, f (n1 , n2 , n3 ) = 0 dla dowolnych n1 , n2 , n3 ∈ N, (c) m = 2, f (n1 , n2 ) = 3 dla dowolnych n1 , n2 ∈ N. Zadanie 22*. Udowodnij, że następujące funkcje są pierwotnie rekurencyjne: (a) f (n) = 2, (b) f (n) = n0 , gdzie n0 jest ustaloną liczbą naturalną. (c) f (x, y) = x + y, (d) f (x, y) = x · y, (e) fn (x) = xn , (f) f (x) = (x + 1)!, (g) f (x, y) = x − y, gdy x y 0, gdy x < y . 7