Ćwiczenia  ASD 3  (propozycja zadań tablicowych)

 

1.      Zaproponować algorytm wyliczania części całkowitej logarytmu przy podstawie 3 dla dowolnej liczby naturalnej. Sformułować warunek początkowy i końcowy. Wskazać niezmiennik pętli. Uzasadnić poprawność. Oszacować złożoność algorytmu.

2.      Co robi następujący algorytm ? Zakładam, że rozważamy go w strukturze liczb naturalnych.

{  r:= x;  q := 0;
            while r
³y do
              r := r-y;
             q := q+1;
            od;

}

Znaleźć niezmiennik pętli. Sformułować warunek początkowy i końcowy. Policzyć koszt wykonania algorytmu dla dowolnych x, y.

 

Uwagi do rozwiązań:

Ad. Zad1.
Algorytm może wyglądać następująco:

{ m:= 3;  wynik := 0;
   while m
£ n do
           m := m*3; wynik := wynik +1
   od
}

WP ={n>0}, WK={wynik = ëlog 3 nû}

Niezmiennik pętli : m= 3 wynik+1

Rozmiar danych  k = w tym przypadku może to być np. liczbą cyfr w binarnej reprezentacji liczby n, czyli k= lg n. Złożoność algorytmu T(k)= Q(ëlog 3 2 kû}=  Q(k)

 

Ad. Zadanie 2
Uwaga  na przypadek  y =0.

WP = { x*y>0} WK={ r = x mod y,  q = x div y}. Niezmiennik   x= q*y +r

Operacja dominująca +-.  Koszt  = 2 (x div y)

 

Wejściówka

Proponuję, żeby pytania wejściówki  dotyczyły porównywania rzędów funkcji i złożoności.

Przykładowe zadania

1.(np za 3punkty) Dla każdej z wymienionych funkcji ustalić jej rząd,  a następnie uporządkować funkcje ze względu na ich rosnący rząd wielkości.

f1(n) = (n5 +3n+5)/( (n+1)(n-1)),  f2(n) = (n4 +3n+5)/2 2lgn , f3(n) = lg(n!),  f4(n) = lg3 n

 

2.(za 2 punkty)

Jakiego rozmiaru zadanie można zrealizować na pewnym komputerze w  czasie t  przy pomocy algorytmu A o złożoności T(A,n) = n 3, jeśli wiadomo, że  ten sam algorytm, na komputerze 64 razy wolniejszym wykonuje w czsie t zadanie o rozmiarze k.