Zadanie 1.
Uporządkuj rosnąco, ze względu na rząd wielkości następujące funkcje:
,
,
,
,
,
,
,
,
,
,
,
Odpowiedzi do zadania 1.
<
<
<
<
<
<
<
,
,
,
,
Zadanie 2.
Podaj możliwie najlepsze oszacowanie następującej funkcji stosując notację O:
Funkcja |
|
|
|
|
|
Odpowiedzi do zadania 2.
Oszacowanie |
|
|
|
|
|
Zadanie 3.
Podaj możliwie proste oszacowanie następującej funkcji stosując notację Θ:
Funkcja |
|
|
|
|
|
Odpowiedzi do zadania 3.
Oszacowanie |
|
|
|
|
|
Notacja Θ
Zapisujemy jako: f(n) = Θ(g(n))
Taki zapis oznacza, że f jest tego samego rzędu co g, czyli istnieją takie stałe c1 i c2 że:
c1 · |g(n)| ≤ |f(n)| ≤ c2 · |g(n)|
Czyli funkcja g(n) jest ograniczeniem górnym dla f (n).
Jak sprawdzić, czy f(n) = Θ(g(n)) ?
Upewniamy się, że
lub konkretniej
Przykładowy wykres:
Zadanie 4.
Algorytm A mający złożoność obliczeniową
wykonuje się na pewnym
komputerze K dla n=100 w czasie 5 sekund.
Jak duże zadanie będziemy w
stanie rozwiązać w ciągu 5 sekund na komputerze K1
dokładnie 1024 razy szybszym niż K?
Zadanie 5.
Ile czasu zajmie wykonanie zadania dla danych wejściowych
rozmiaru 10 algorytmem A
o złożoności
wiedząc, że wykonanie zadania o
rozmiarze 12 zajmuje (przy użyciu tego samego algorytmu)
864 sekundy?
Odpowiedź do zadania 5.
Złożoność algorytmu A dla danych rozmiaru n określona jest
przez funkcję
.
Zatem dla danych rozmiaru 12 algorytm ten wykona
operacji dominujących.
Czas, jaki jest potrzebny do wykonania zadania o rozmiarze12,
wynosi dokładnie 864 sekundy, czyli wykonanie jednej operacji
dominującej
zajmuje
.
Dla danych rozmiaru 10 algorytm A wykona dokładnie
operacji dominujących, co ostatecznie zajmie
sekund.
Zadanie 6.
Na komputerze K wykonanie algorytmu A dla danych o rozmiarze 6
zajmuje 8 sekund. Złożoność tego algorytmu opisuje funkcja
.
Ile czasu będzie potrzebował komputer K1,
dokładnie 1024 razy szybszy od komputera K,
do wykonania algorytmu A dla danych rozmiaru 20?
Odpowiedź do zadania 6.
sekund
Zadanie 7.
Mamy do posortowania tablicę zawierającą milion (106) liczb.
Do dyspozycji mamy
Komputer K1 - wykonujący 1 milion (106) operacji na sekundę,
Komputer K2 - wykonujący 100 milionów (108) operacji na sekundę.
Na komputerze K1 sortujemy przy użyciu algorytmu sortowania
przez scalanie
Na komputerze K2 sortujemy przy użyciu algorytmu sortowania
przez wstawianie
Który, komputer wykona zadanie sortowania w krótszym czasie?
Odpowiedź do zadania 7.
Komputer osobisty : wykonuje 1 milion (106) operacji na sekundę
Sortujemy algorytmem przez scalanie :
Superkomputer : wykonuje 100 milionów (108) operacji na sekundę.
Sortujemy algorytmem przez wstawianie:
T(106) = 2 * (106)2 / 108= 20 000 sekund ≈5.56 godzin
Komputer osobisty wykona zadanie 20 razy szybciej.
UWAGA: Sortowanie przez wstawianie jest szybsze od
sortowania przez scalanie dla małych n
Zadanie 8.
Dla podanego poniżej fragmentu kodu algorytmu określ jego
złożoność asymptotyczną przy użyciu notacji
for (i=sum=0;i<n;i++)
sum += a[i];
Pętla for wykonuje się n razy a podczas każdej iteracji 2 przypisania, jedno sum drugie i (2n) oraz 2 przypisania w deklaracji
2+2n = O(n)
Zadanie 9.
Dla podanego poniżej fragmentu kodu algorytmu określ jego złożoność asymptotyczną przy użyciu notacji
:
for (i = 0; i < n; i++){
for(j = 1, sum = a[0]; j<=i; j++)
sum += a[j];
cout<<"suma podtablicy od 0 do "<< i <<" to <<sum<<endl;
Zadanie 10.
Dla K=3, L=6 Podaj ile wynosi X.
Określ jego złożoność asymptotyczną przy użyciu notacji
1. Zaimplementuj algorytm przy pomocy Dev C++ 4.9.9.2
2. Określ (wraz z dowodem matematycznym) złożoność algorytmu przy użyciu notacji O.
ODPOWIEDZI DO ZADAŃ
Zadanie 4.
Złożoność algorytmu A dla danych rozmiaru n określona jest przez zależność
. Dla danych rozmiaru 100 algorytm ten wykona
operacji dominujących. Czas jaki jest potrzebny do wykonania zadania o rozmiarze 100 na komputerze K wynosi dokładnie 5 sekund. To samo zadanie (czyli
operacje dominujące) komputer K1 wykona w
sekundy. Zatem w ciągu dokładnie 5 sekund komputer K1 wykona
operacje dominujące, co ostatecznie odpowiada rozmiarowi danych wejściowych równemu
.
Zadanie 8.
Pętla for wykonuje się n razy a podczas każdej iteracji 2 przypisania, jedno sum drugie i (2n) oraz 2 przypisania w deklaracji
2+2n = O(n)
Zadanie 9.
Inicjalizacja zmiennej i,
Pętla zewnętrzna wykonywana jest n razy,. Za każdym razem wykonywana jest iteracja pętli wewnętrznej, instrukcja drukowania oraz przypisania zmiennych i, j, sum. Pętla wewnętrzna wykonywana jest i razy dla każdego
przy czym w każdej iteracji wykonywane są dwa przypisania: jedno zmiennej sum , drugie zmiennej j.
Liczba przypisań w całym programie wynosi więc: