Lista zadań z matematycznych podstaw informatyki nr 2.
Zadania 1 – 4 to raczej uzupełnienie przerobionego materiału.
Zad. 1. Udowodnij, że funkcje
f (n) = część całkowita √ n oraz
g(n) = część całkowita log
2(n + 1) są pierwotnie rekurencyjne.
Zad. 2. Niech f będzie rosnącą funkcją pierwotnie rekurencyjną taką, że f (0) = 0.
Pokaż, że funkcja
g(n) = max{k : f (k) ¬ n}
jest pierwotnie rekurencyjna.
Zad. 3. Udowodnij, że następujące funkcje są pierwotnie rekurencyjne:
1) hx
1, . . . , x
ni = µy (β(y, 0) = n ∧ ∀
i<nβ(y, i + 1) = x
i), gdzie β oznacza zwy- kła funkcję G¨ odla, przyporządkowująca liczbom x
1, . . . , x
nkod ciągu (x
1, . . . , x
n).
2) conc(a, b) = µx
β(x, 0) = lh(a) + lh(b) ∧ ∀
i<lh(a)(x)
i= (a)
i∧ ∀
i<lh(b)(x)
lh(a)+i= (b)
i, 3) c(a, b) = µx
β(x, 0) = lh(a) + 1 ∧ ∀
i<lh(a)(x)
i= (a)
i∧ (x)
lh(a)= b
,
4) hf i(n, ~ x) = hf (0, ~ x), f (1, ~ x), . . . , f (n − 1, ~ x)i przy założeniu, że f jest funkcją pierwotnie rekurencyjną (definicja hf i nie wygląda na poprawną, ale mam nadzieję, że jest zrozumiała).
Zad. 4. W tym zadaniu funkcją β G¨ odla nazywamy całkowitą funkcję rekurencyjną β : N
2→ N taką, że
1) β(a, i) ¬ a − 1 dla wszystkich a, i,
2) dla każdego ciągu a
0, . . . , a
k−1istnieje liczba a taka, że równości β(a, i) = a
isą prawdziwe dla wszystkich i < k.
Niech f oznacza zwykła funkcję pary: f (n, m) = (n + m)(n + m + 1)
2 + n.
Funkcję β G¨ odla można zdefiniować tak, aby
β(f (a
0, f (a
1, f (a
2, f (. . . , a
n) . . .))), i) = a
idla i = 1, . . . , n. Podaj definicję takiej funkcji β i udowodnij, że spełnia lemat G¨ odla i jest funkcją pierwotnie rekurencyjną. Pokaż też, że związane z nią funkcje lh, (·)
·oraz h·, . . . , ·i są pierwtnie rekurencyjne.
Zad. 5. Wyobraź sobie bardziej skomplikowany schemat rekursji (np. funkcję przy- porządkowującą formule liczbę wolnych wystąpień zmiennych w tej formule). Po- każ, że tak definiowane funkcje można zdefiniować za pomocą rekursji prostej. Idea rozwiązania: przypuśćmy, że za pomocą tego typu rekursji definiujemy funkcję f . Najpierw zdefiniuj przez rekursję prostą funkcję F przyporządkowującą liczbie n numer (kod) ciągu f (0), f (1), . . . , f (n − 1). Następnie podaj odpowiednią definicję f wykorzystującą funkcję F .
Zad. 6. Przyjmijmy, że
M (n, 1, 3) = n
n, M (n, 1, p+1) = M (n, n, p), M (n, m+1, p) = M (M (n, 1, p), m, p).
Udowodnij, że te trzy równości definiują funkcję rekurencyjną. Znajdź dziedzinę tej funkcji. Czy jest to funkcja pierwotnie rekurencyjna (dziedzinę można poprawić!)?
Funkcja ta bywa nazywana funkcją Steinhausa - Mosera.
Zad. 7. Rozważmy następujący algorytm:
Dane: m 1 oraz n 1;
var L, i, p : positive integer, T : array [1..m] of non negative integer;
function next(var p) : boolean;
begin p := 1;
while p ¬ m and T [p] = 0 do p := p + 1;
next := p ¬ m end;
begin
L := n; for i := 1 to m − 1 do T [i] := 0; T [m] := 1;
while next(p) do
for i := 1 to p − 1 do T [i] := L;
T [p] := T [p] − 1; L := L + 1 write(L)
end.
Dla jakich m i n podany algorytm kończy pracę? Jeżeli coś liczy, to oceń jego złożoność rozumianą na przykład jako liczba wykonań głównej pętli while.
Zad. 8. Przyjmijmy, że
U (n, a, x) =