Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Vrijeme izvršavanja algoritma Asimptotsko vrijeme izvršavanja Tipične funkcije za vremena izvršavanja algoritma Asimptotska notacija Strukture podataka i algoritmi
Vrijeme izvršavanja algoritma Određivanje vremena izvršavanja algoritma – brojanje jediničnih instrukcija Mane: Kod složenih algoritama teško izvodljivo, često i nemoguće Prilikom analize algoritama mogu se dobiti vrlo komplikovane funkcije za njihova vremena izvršavanja Često je, na osnovu funkcija T(n), teško reći koji je od dva algoritma brži npr.: - T1(n) = 10n3 + n2 + 40n + 80 - T2(n) = 17nlogn - 23n - 10 Strukture podataka i algoritmi
Vrijeme izvršavanja algoritma Analizu algoritama težimo da pojednostavimo što više možemo i tražimo samo red veličine funkcije vremena izvršavanja algoritma za velike vrijednosti njenog argumenta Uzima se jednostavna funkcija koja za velike vrijednosti njenog argumenta najbolje aproksimira tačnu funkciju vremena izvršavanja tog algoritma – asimptotsko vrijeme izvršavanja To je mjera brzine rasta tačnog vremena izvršavanja algoritma sa povećanjem broja njegovih ulaznih podataka Strukture podataka i algoritmi
Vrijeme izvršavanja algoritma Za velike vrijednosti ulaznih podataka (n). Dominantan je najveći stepen funkcije (red veličine) Uticaj konstanti je zanemarljiv T1(n) = 10n3 + n2 + 40n + 80 T2(n) = 17nlogn - 23n – 10 T1(n) ≈ n3 T2(n) ≈ nlogn Strukture podataka i algoritmi
Vrijeme izvršavanja algoritma T1(n) = 10n3 + n2 + 40n + 80 T2(n) = 17nlogn - 23n – 10 T1(n) ≈ n3 T2(n) ≈ nlogn Strukture podataka i algoritmi
Primjer – Vremena izvršavanja 3 algoritma Računar obavlja 1 000 000 operacija u 1 s A1=2n A2=5n2 A3=100n n 2n 5n2 100n A1 A2 A3 1 2 5 100 1 μs 5 μs 100 μs 10 1024 500 1000 1 ms 0,5 ms 2100 5·104 10 000 280 s 0,05 s 0,01 s 21000 5·106 105 2980 s 5 s 0,1 s Strukture podataka i algoritmi
Primjer 1 – Vrijeme izvršavanja algoritma Red 1 2 3 4 5 6 Vrijeme izvršavanja n for i = 1 to n do for j = 1 to n do a[i,j] = 0; swap(a[j], a[j-1]); a[i,i] = 1; 1 2 3 4 5 6 𝑇 𝑛 =𝑛·𝑛 1+1 +𝑛·1 =2 𝑛 2 +𝑛 𝑇 𝑛 ≈ 𝑛 2 Strukture podataka i algoritmi
Primjer 2 – Vrijeme izvršavanja algoritma Red 1 2 3 4 5 6 Vrijeme izvršavanja n for i = 1 to n do for j = 1 to n do if (i == j) then a[i,j] = 1; else a[i,j] = 0; 1 2 3 4 5 6 𝑇 𝑛 =𝑛·𝑛 1+1 =2 𝑛 2 𝑇 𝑛 ≈ 𝑛 2 Strukture podataka i algoritmi
Tipične funkcije vremena izvršavanja Funkcija Neformalno ime 1 konstantna funkcija log 𝑛 logaritamska funkcija 𝑛 linearna funkcija 𝑛 log 𝑛 linearno-logaritamska funkcija 𝑛2 kvadratna funkcija 𝑛3 kubna funkcija 2n eksponencijalna funkcija Brzina izvršavanja algoritma za veliko n Brzina rasta funkcije za veliko n Strukture podataka i algoritmi
Tipične funkcije vremena izvršavanja Strukture podataka i algoritmi
Asimptotska notacija Primjer: 𝑇(𝑛) za 4 algoritma 𝐴1, 𝐴2, 𝐴3, 𝐴4 𝐴1 ∶ □ 𝐴1 ∶ 𝐴2 ∶ 𝐴3 ∶ 𝐴4 ∶ 𝑇1(𝑛) = 2𝑛2 + 𝑛 − 1 𝑇2(𝑛) = 2𝑛 + 3 𝑇3(𝑛) = 10 + 3 log 𝑛 𝑇4(𝑛) = 2𝑛 + 𝑛3 − 100 Strukture podataka i algoritmi
Asimptotska notacija Interesuje nas 𝑇(𝑛) za velike vrijednosti 𝑛 □ Strukture podataka i algoritmi
Asimptotska notacija Interesuje nas 𝑇(𝑛) za velike vrijednosti 𝑛 □ Interesuje nas 𝑇(𝑛) za velike vrijednosti 𝑛 𝑇1(𝑛) = 2𝑛2 + 𝑛 − 1 𝑇2(𝑛) = 2𝑛 + 3 𝑇3(𝑛) = 10 + 3 log 𝑛 𝑇4(𝑛) = 2𝑛 + 𝑛3 − 100 ≈ 𝑛2 ≈ 𝑛 ≈ log 𝑛 ≈ 2𝑛 Strukture podataka i algoritmi
𝑛2 2𝑛 280 s 2980 s Asimptotska notacija 1 osnovna operacija ≈ 1 𝜇𝑠 □ 𝑛2 2𝑛 𝑛 log 𝑛 𝑛 10 1 𝜇𝑠 10 𝜇𝑠 100 𝜇𝑠 100 2 𝜇𝑠 10 𝑚𝑠 1000 3 𝜇𝑠 1 𝑚𝑠 1 𝑠 1 𝑚𝑠 280 s 2980 s Strukture podataka i algoritmi
Funkcije vremena izvršavanja Algoritme međusobno upoređujemo prema njihovim funkcijama asimptotskog vremena izvršavanja Što je funkcija „manja“ algoritam je brži tj. bolji. Kod složenijih funkcija nije uvijek jasno koja je manja. Asimptotska notacija omogućava da se na precizan način uvede relativni poredak za funkcije: - O-zapis, - Ω-zapis, - θ-zapis, - o-zapis. Strukture podataka i algoritmi
Asimptotska notacija Primjer: 𝑇(𝑛) za 4 algoritma 𝐴1, 𝐴2, 𝐴3, 𝐴4 □ Primjer: 𝑇(𝑛) za 4 algoritma 𝐴1, 𝐴2, 𝐴3, 𝐴4 𝑇1(𝑛) = 2𝑛2 + 𝑛 − 1 𝑇2(𝑛) = 2𝑛 + 3 𝑇3(𝑛) = 10 + 3 log 𝑛 𝑇4(𝑛) = 2𝑛 + 𝑛3 − 100 = 𝑂(𝑛2) = 𝑂(𝑛) = 𝑂(log 𝑛) = 𝑂(2𝑛) Strukture podataka i algoritmi
Asimptotska notacija Asimptotska notacija Intuitivno značenje 𝑓(𝑛) = 𝑂(𝑔(𝑛)) 𝑓 ”≤” 𝑔 𝑓(𝑛) = Ω(𝑔(𝑛)) 𝑓 ”≥” 𝑔 𝑓(𝑛) = Θ(𝑔(𝑛)) 𝑓 ”≈” 𝑔 𝑓(𝑛) = 𝑜(𝑔(𝑛)) 𝑓 ”≪” 𝑔 Strukture podataka i algoritmi
Asimptotska notacija Veliko-O 𝑓(𝑛) = 𝑂(𝑔(𝑛)) ako ∃𝑐, 𝑛O, ∀𝑛 ≥ 𝑛O, 𝑓(𝑛) ≤ 𝑐 ⋅ 𝑔(𝑛) □ 𝑔(𝑛) 𝑓(𝑛) 𝑛0 𝑛 Strukture podataka i algoritmi
Asimptotska notacija Primjer: za bubble-sort 𝑇(𝑛) = 𝑛2 − 𝑛 + 1 𝑛2 − 𝑛 + 1 ≤ 𝑛2 + 1 ≤ 𝑛2 + 𝑛2 = 2𝑛2 □ ⇒ 𝑛2 − 𝑛 + 1 ≤ 2𝑛2 ⇒ 𝑇(𝑛) = 𝑂(𝑛2), 𝑛0 = 1, 𝑐 = 2 Strukture podataka i algoritmi
Asimptotska notacija Dominantan term je najvažniji: 𝑛2 − 𝑛 + 1 = 𝑂(𝑛2) Konstantni faktori nisu važni: 2𝑛2 = 𝑂(𝑛2) Pravilo zbira: 𝑂(𝑓(𝑛) + 𝑔(𝑛)) = 𝑂(𝑓(𝑛)) + 𝑂(𝑔(𝑛)) Pravilo proizvoda: 𝑂(𝑓(𝑛) ⋅ 𝑔(𝑛)) = 𝑂(𝑓(𝑛)) ⋅ 𝑂(𝑔(𝑛)) □ □ □ □ Strukture podataka i algoritmi
Asimptotska notacija Veliko-Omega Veliko-Teta Malo-o 𝑓(𝑛) = Ω(𝑔(𝑛)) ako ∃𝑐, 𝑛O, ∀𝑛 ≥ 𝑛O, 𝑓(𝑛) ≥ 𝑐 ⋅ 𝑔(𝑛) □ Veliko-Teta 𝑓(𝑛) = Θ(𝑔(𝑛)) ako 𝑓(𝑛) = 𝑂(𝑔(𝑛)), 𝑓(𝑛) = Ω(𝑔(𝑛)) □ Malo-o 𝑓(𝑛) = 𝑜(𝑔(𝑛)) ako lim 𝑓(𝑛) = 0 □ n→œ 𝑔(𝑛) Strukture podataka i algoritmi
Asimptotska notacija 𝑛→∞ 𝑔(𝑛) 𝑛→∞ 𝑔(𝑛) 𝑛→∞ 𝑔(𝑛) □ Pravilo limesa lim 𝑓(𝑛) = 𝑐 > 0 ⇒ 𝑓(𝑛) = Θ(𝑔(𝑛)) 𝑛→∞ 𝑔(𝑛) lim 𝑓(𝑛) = 𝑐 ≥ 0 ⇒ 𝑓(𝑛) = 𝑂(𝑔(𝑛)) 𝑛→∞ 𝑔(𝑛) lim 𝑓(𝑛) ≠0 ⇒ 𝑓(𝑛) = Ω(𝑔(𝑛)) 𝑛→∞ 𝑔(𝑛) Strukture podataka i algoritmi
Zadatak 1 – Asimptotsko vrijeme izvršavanja algoritma if (x == 0) then for i = 1 to n do a[i] = i; 1 2 3 Red 1 2 3 Vrijeme izvršavanja n 𝑇 𝑛 =1+𝑛 𝑇 𝑛 ≈𝑛 Strukture podataka i algoritmi
Zadatak 2 – Asimptotsko vrijeme izvršavanja algoritma do a[i] = b[i] + c[i]; i = i + 1; while (i != n); 1 2 3 4 5 Red 1 2 3 4 5 Vrijeme izvršavanja n-1 𝑇 𝑛 =1+(𝑛−1) 1+1 =2𝑛−1 𝑇 𝑛 ≈𝑛 Strukture podataka i algoritmi
Zadatak 3 – Asimptotsko vrijeme izvršavanja algoritma Red 1 2 3 4 5 6 7 Vrijeme izvršavanja n if (x == 0) then for i = 1 to n do for j = 1 to n do a[i,j] = 0; else a[i,i] = 1; 1 2 3 4 5 6 7 𝑇 𝑛 =1+𝑛·𝑛·1 =1+ 𝑛 2 𝑇 𝑛 ≈ 𝑛 2 Strukture podataka i algoritmi
Zadatak 4 – Asimptotsko vrijeme izvršavanja algoritma Red 1 2 3 4 5 Vrijeme izvršavanja n ∑j j=1 ∑k k=1 for i = 1 to n do for j = 1 to n do for k = 1 to j do if (i == j) then a[k,k] = 0; 1 2 3 4 5 𝑇 𝑛 =𝑛 𝑗=1 𝑛 𝑗·1 + 𝑘=1 𝑛 𝑘= =𝑛· 𝑛(𝑛+1) 2 + 𝑛(𝑛+1) 2 𝑇 𝑛 = 𝑛 𝑛+1 2 2 𝑇 𝑛 ≈ 𝑛 3 Strukture podataka i algoritmi
Zaključak Određivanje vremena izvršavanja algoritma – brojanje jediničnih instrukcija Analizu algoritama težimo da pojednostavimo što više možemo i tražimo samo red veličine funkcije vremena izvršavanja algoritma za velike vrijednosti njenog argumenta - asimptotsko vrijeme izvršavanja Algoritme međusobno upoređujemo prema njihovim funkcijama asimptotskog vremena izvršavanja - što je funkcija „manja“ algoritam je brži tj. bolji. Asimptotska notacija: O-zapis, Ω-zapis, θ-zapis, o- zapis. Strukture podataka i algoritmi
Hvala na pažnji!