Algorytmy i struktury danych, AiSD C Lista03

background image

Studia Licencjackie / Inżynierskie

Algorytmy i struktury danych

Lista zadań nr 3


1.

W oparciu o następującą zależność napisz funkcję rekurencyjną wyznaczającą a

n

. Oszacuj

koszt czasowy i głębokość rekursji.

e

nieparzyst

n

parzyste

n

n

a

a

a

a

n

n

n

0

)

(

*

)

(

1

2

/

2

2

/

2

=

=

Uwaga: głębokość rekursji to największa liczba jednocześnie uruchomionych instancji
funkcji (inaczej, długość najdłuższej ścieżki w drzewie wywołań rekurencyjnych).

2.

Przedstaw drzewo wywołań rekurencyjnej funkcji rekurencyjnej

newton

dla

argumentów n=6 i m=3. Odpowiedz na pytanie: ile razy podczas obliczania

newton(10,5)

zostanie wywołana funkcja

newton

dla n równego m lub m równego

zero (chodzi o łączną liczbę takich wywołań).

3.

Napisz funkcję

fibonacci(k,l)

, która jako wartość zwraca najmniejszą wartość p

taką, że p-ta liczba Fibonacciego przy dzieleniu przez k daje resztę l.
Uwaga: zadbaj o to, żeby funkcja zwracała poprawny wynik nawet wówczas, gdy p-ta
liczba Fibonacciego przekracza zakres liczb całkowitych reprezentowanych przez
całkowitoliczbowe typy danych dostępne w kompilatorach.

4.

Rozważmy następujący algorytm wyznaczania najmniejszej liczby w ciągu n-
elementowym: Jeśli n=1 to minimum jest równe jedynemu elementowi ciągu.
W przeciwnym razie dzielimy ciąg na dwa ciągi (prawie) równej długości, wyznaczamy
minima tych dwóch ciągów m

1

i m

2

a następnie wybieramy mniejszą z liczb m

1

, m

2

.

Napisz funkcję rekurencyjną realizującą ten algorytm. Jaki jest czas działania Twojej
funkcji, porównaj go z czasem działania metody iteracyjnej.

5.

Niech funkcja T określona na liczbach naturalnych będzie zadana następującym wzorem:





a.

Napisz rekurencyjną funkcję fTrec(int n, int m) obliczającą wartość funkcji T dla
argumentów n i m. Narysuj drzewo wywołań dla fTrec(2,3) i podaj wartość
T(2,3).

b.

Napisz nierekurencyjną funkcję fTiter(int n, int m) obliczającą wartość funkcji T
dla argumentów n i m, działającą w czasie proporcjonalnym do n

m.

c.

Napisz nierekurencyjną funkcję fTiter(int n, int m) obliczającą wartość funkcji T
dla argumentów n i m, działającą w czasie proporcjonalnym do n

m i

wykorzystującą pamięć o rozmiarze proporcjonalnym do n.

6.

Sortujemy przez scalanie ciąg złożony z 10 elementów. Przedstaw:

a.

drzewo wywołań rekurencyjnych,

b.

parametry wywołań funkcji scalającej.

7.

Sortujemy przez scalanie ciągi złożone z 10, 100, 1000, 10 000 elementów. Dla każdej z
tych wartości ustal, ile poziomów mieć będzie drzewo wywołań rekurencyjnych.

T(n,0) = n dla n

0

T(0,m) = n dla m

0

T(n,m)= T(n-1,m)+T(n,m-1) dla n>0 i

background image

Czy potrafisz znaleźć funkcję, której wartością dla danego n jest liczba poziomów drzewa
wywołań rekurencyjnych sortowania przez scalenie ciągu n-elementowego?


Wyszukiwarka

Podobne podstrony:
Algorytmy i struktury danych, AiSD C Lista04
Algorytmy i struktury danych AiSD-C-Lista01
Algorytmy i struktury danych AiSD-C-Lista03
Algorytmy i struktury danych, AiSD C Lista05
Algorytmy i struktury danych, AiSD C Lista02 1
Algorytmy i struktury danych, AiSD C Lista04
AIDS w7listy, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
W10seek, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
Algorytmy i struktury danych AiSD-C-Wyklad05
egzamin info, pwr, informatyka i zarządzanie, Informatyka, algorytmy i struktury danych, aisd kolokw
Algorytmy i struktury danych, AiSD C Wyklad04 2
ZestawA, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
Algorytmy i struktury danych AiSD-C-Wyklad04
AIDS w6geom, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
w8grafy alg, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
Algorytmy i struktury danych, AiSD C Wyklad03 2
AIDS w5 rekur, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
AIDS w3 sort1, studia, Semestr 2, Algorytmy i struktury danych AISD, AIDS
Algorytmy i struktury danych, AiSD C Wyklad04

więcej podobnych podstron