Studia Licencjackie / InŜynierskie Algorytmy i struktury danych

Lista zadań nr 1

1. Sprawdź czy zachodzą zaleŜności:

a. n 2 = O(2 n)

b. 2 n = O( n 2)

c. 100 n 2+13 n+10 = O( n 3) d. 100 n 2+13 n+10 = O( n 2) e. 100 n 2+13 n+10 = O( n) f. 10 n log n + 5 n = O( n 2) 2. Napisz funkcję w C, która wyznaczy wartość wyraŜenia n

1

suma = ∑

!

1 k

k =

gdzie n jest argumentem funkcji. Wyznacz złoŜoność czasową Twojego rozwiązania.

3. Napisz funkcję w C, która wyznaczy wartość wyraŜenia n

= ∑ k

suma

k

1 n

k =

gdzie n jest argumentem funkcji. Wyznacz złoŜoność czasową Twojego rozwiązania.

4. Dany jest następujący algorytm:

Specyfikacja

Dane: liczba naturalna n i ciąg a …

1

an liczb całkowitych (zapisany w tablicy a) Wynik: ......................................................................................................................................

Algorytm:

for(i=0; i<n; i++){

d[i]=0;

for(j=0; j<n; j++) if (a[j]==a[i]) d[i]++;

}

Dla tego algorytmu:

a) uzupełnij specyfikację,

b) wyznacz złoŜoność czasową.

5. Podaj algorytm (specyfikację i implementację) upraszczający ułamek n/ m. Oszacuj jego złoŜoność czasową.

Uwaga: aby uprościć ułamek, wystarczy licznik i mianownik podzielić przez ich największy wspólny dzielnik.

6. Podaj algorytm (specyfikację i implementację), który dla ciągu zer i jedynek c1, …, cn wyznacza wartość liczby o zapisie binarnym c1 c2 … cn. Ile mnoŜeń i dodawań wykonuje Twój algorytm?

Uwaga: skorzystaj z faktu, Ŝe wartość((c1…ck+1)2) = 2⋅wartość((c1…ck)2) + ck+1, czyli

„doczytując” kolejne cyfry moŜna uaktualniać wartość reprezentowanej liczby.

Przykład: wartość (1011012) = 2⋅wartość(101102) + 1 = 45

7. Wyznacz wartości wykładnika k z przedziału [513, 1024], dla których algorytm szybkiego potęgowania podany na wykładzie wykona: a. najwięcej mnoŜeń

b. najmniej mnoŜeń

W odpowiedziach do punktów a. i b. podaj wartość k, liczbę wykonanych mnoŜeń i potęgi liczby m, które będą domnaŜane do wyniku (czyli zmiennej wynik).