Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Strukture podataka i algoritmi 2. DIZAJN I ANALIZA ALGORITAMA
2
Dizajn i analiza algoritama
Koraci za dobijanje dobrog algoritma Dizajn algoritma Provjera tačnosti algoritma Analiza algoritma Određivanje vremena izvršavanja algoritma Strukture podataka i algoritmi (30)
3
Algoritam Algoritmi ulaz (instanca problema) izlaz (rješenje instance)
algoritamski koraci izlaz (rješenje instance) Strukture podataka i algoritmi (30)
4
Algoritmi Dizajn algoritma: pisanje niza naredbi koje sačinjavaju algoritam za rješenje datog problema Analiza algoritma: određivanje koliko algoritam zauzima resurse računara (vrijeme, memoriju, …) □ □ Strukture podataka i algoritmi (30)
5
Koraci za dobijanje dobrog algoritma
Eliminisati sve nevažne i remetilačke detalje praktičnog problema koji se rješava – problem predstaviti preko prostih matematičkih pojmova (skupovi, funkcije, grafovi, ...) Napisati algoritam i dokazati njegovu ispravnost Sprovesti analizu algoritma da bi se ustanovila njegova efikasnost Strukture podataka i algoritmi (30)
6
Dizajn algoritama Dobri algoritmi Korektnost (tačnost) i efikasnost
Jednostavnost i jasnoća Algoritamske paradigme: rekurzivni algoritmi, pohlepni algoritmi, dinamičko programiranje, randomizirani algoritmi, … □ Strukture podataka i algoritmi (30)
7
Provjera tačnosti algoritma
Često se svodi na provjeru ispravnosti petlji u algoritmu Provjera izlaznog uslova – da li se izvršavanje petlje sigurno završava Provjera invarijante petlje – da li je ona tačna nakon završetka rada cijele petlje Strukture podataka i algoritmi (30)
8
Provjera invarijante petlje
Invarijanta petlje je formalni iskaz koji je tačan prije svake iteracije petlje Invarijanta petlje je tačna prije prve iteracije petlje Ako je invarijanta petlje tačna prije neke iteracije petlje, ona ostaje tačna i nakon izvršavanja te iteracije tj. prije izvršavanja sledeće iteracije Strukture podataka i algoritmi (30)
9
Primjer – Najveći zajednički djelilac
// Ulaz: pozitivni cijeli brojevi x i y // Izlaz: nzd(x,y) algorithm gcd(x, y) d = min{x,y} while ((x % d != 0) || (y % d != 0)) do d = d – 1; return d; Invarijanta while petlje je uslov d≥nzd(x,y) Strukture podataka i algoritmi (30)
10
Analiza algoritama Ocjena efikasnosti algoritma na osnovu kriterijuma iskorišćenosti računarskih resursa Dragocjeni računarski resursi Vrijeme Memorija Mrežni saobraćaj □ □ Strukture podataka i algoritmi (30)
11
Određivanje vremena izvršavanja algoritma
□ Empirijski Izmjeri se stvarno vrijeme rada odgovarajućeg programa na računaru Lako se izvodi i tačni rezultati Može se primjeniti samo na program napisan u cjelosti Važi samo za poseban slučaj ulaznih podataka i za jedan konkretan računar pod određenim programskim režimom rada Analitički Teorijska analiza rada algoritma ili prebrojavanje jediničnih instrukcija koje se izvršavaju tokom rada algoritma □ Strukture podataka i algoritmi (30)
12
Analitičko određivanje vremena izvršavanja algoritma
Analizirati rad algoritma korak po korak → zaključak vrijeme njegovog izvršavanja Ne dobija se apsolutno precizna ocjena vremena izvršavanja Ocjena je dovoljno dobra da se stekne opšta slika o efikasnosti algoritma Strukture podataka i algoritmi (30)
13
Analitičko određivanje vremena izvršavanja algoritma
Vrijeme izvršavanja algoritma je funkcija veličine ulaznih podataka Za n ulaznih podataka definiše se funkcija T(n) koja daje broj vremenskih jedinica koliko traje izvršavanje algoritma Pretpostavlja se da se sve osnovne instrukcije algoritma izvršavaju za jednu vremensku jedinicu i uzima se najgori slučaj ulaznih podataka (najveće n) Jedinična instrukcija je osnovna računska operacija čije vrijeme izvršavanja je konstantno (ms, μs, ...) Strukture podataka i algoritmi (30)
14
Jedinična instrukcija
Jedinična instrukcija je osnovna računska operacija čije vrijeme izvršavanja je konstantno (ms, μs, ...) Tipične jedinične instrukcije algoritama su: - dodjela vrijednosti promjenljivoj - poređenje vrijednosti dvije promjenljive - aritmetičke operacije - logičke operacije - ulazno/izlazne operacije Strukture podataka i algoritmi (30)
15
Vremenska složenost u najgorem slučaju
Vremenska složenost u najgorem slučaju T(n) je maksimalno vrijeme izvršavanja algoritma za sve ulaze veličine n – vrijeme izvršavanja ili vremenska složenost algoritma Najgori slučaj izvršavanja algoritma je onaj u kojem se izvršava najveći broj jediničnih instrukcija Najgori slučaj određuje gornju granicu vremena izvršavanja za svaki skup ulaznih podataka date veličine Strukture podataka i algoritmi (30)
16
Vremenska složenost osnovnih algoritamskih konstrukcija
Vrijeme izvršavanja Naredba serije S: P; Q; TS = TP + TQ Naredba grananja S: if C then P; else Q; TS = TC + max{TP, TQ} Naredba petlje S: while C do P; do P; while C; for i=j to k do P; TS = n · TP n – najveći broj iteracija petlje Strukture podataka i algoritmi (30)
17
Vrijeme izvršavanja ugnježdenih petlji
for i = 1 to n do // izvršava se n puta (u najgorem slučaju) for j = 1 to n do // izvršava se n puta (u najgorem slučaju) if (i < j) then // izvršava se jednom (jedinična instrukcija) swap (a[i, j], a[j, i]); T(n) = n · n · (1 + 1) = 2n2 Strukture podataka i algoritmi (30)
18
Drugi pristupi za određivanje efikasnosti algoritma
Probabilistička analiza prosječnog vremena izvršavanja algoritma – prosječno vrijeme izvršavanja algoritma je često mnogo teže odrediti nego vrijeme izvršavanja u najgorem slučaju Analiza randomiziranih (slučajnih) algoritama – određuje se očekivano vrijeme izvršavanja na osnovu slučajnih odluka tokom izvršavanja Analiza benčmark podataka – to su tipični ulazni podaci koji se smatraju reprezentativnim za sve podatke Strukture podataka i algoritmi (30)
19
Primjer 1 – najmanji element niza
// Ulaz: niz a i njegov broj elemenata n // Izlaz: indeks najmanjeg elementa niza a algorithm min(a, n) m = a[1]; // najmanji element nađen do sada j = 1; // indeks najmanjeg elementa i = 2; while (i <= n) do // provjeriti sve ostale elemente niza 1 2 3 4 5 6 7 8 9 Red 1 2 3 4 567 8 9 Vrijeme izvršavanja n-1 if (m > a[i]) then // aktuelni element je manji od // privremeno najmanjeg do sada // zapamtiti taj manji element, // kao i njegov indeks m = a[i]; j = i; T(n) = (n-1)(3 + 1) + 1 = 4 + 4(n-1) T(n) = 4n i = i + 1; // preći na sledeći element niza return j; // vratiti indeks najmanjeg elementa Strukture podataka i algoritmi (30)
20
Primjer 2 – maksimalna suma podniza
b1 = [1, 9, -6, -6, 7, -2] neprekidni podniz b2 = [0] neprekidni podniz b1 = [1, -6, -6, -2, -5] nije neprekidni podniz j Si,j = ai + ai aj = ∑ak k=i M = max {0, max Si,j} 1≤i≤j≤n M = max Si,j Strukture podataka i algoritmi (30)
21
Primjer 2 – maksimalna suma podniza
bi = max {Si,i, Si,i+1, ...., Si,n} = max Si,j j=i,...,n M = max {b1, b2, ..., bn } = max bi i=1,...,n Algoritam 1 – parcijalne maksimalne sume podnizova (bi) Algoritam 2 – maksimalna suma podniza (M) Strukture podataka i algoritmi (30)
22
Primjer 2 – parcijalna maksimalna suma podnizova
// Ulaz: indeks i niza a dužine n // Izlaz: element bi = maxj=i,...,n Si,j niza b algorithm B(i, a, n) m = 0; // maksimalna suma podniza od pozicije i S = 0; // sume Si,j za j = i, ..., n for j = i to n do // izračunati Si,j za j = i, ..., n S = S + a[j]; // Si,j = Si,j-1 + aj 1 2 3 4 5 6 7 Red 1 2 3 4 56 7 Vrijeme izvršavanja n-i+1 if (m < S) then // nađena veća suma // ažurirati maksimalnu sumu m = S; T(n,i) = (n-i+1)(1 + 2) + 1 = 3 + 3(n-i+1) T(n,i) = 3(n-i+2) return m; // vratiti bi Strukture podataka i algoritmi (30)
23
Primjer 2 – maksimalna suma podniza
// Ulaz: niz a i njegov broj elemenata n // Izlaz: maksimalna suma podniza M algorithm mcss(ia, n) for i = 1 to n do b[i] = B[i, a, n]; M = max (b, n); return M; Red 1 2 → TP 3 4 Vrijeme izvršavanja n·TP 3(n-i+2)+1 4n+1 1 2 3 4 𝑇 𝑛 = 𝑖=1 𝑛 3 𝑛−𝑖 𝑛+1 +1= =3 𝑖=1 𝑛 𝑛−𝑖 +7𝑛+4𝑛+2= =3 𝑛−1 𝑛 2 +11𝑛+2= 𝑇(𝑛)=1,5 𝑛 2 +9,5𝑛+2 Strukture podataka i algoritmi (30)
24
Zadatak 1 – odrediti vrijeme izvršavanja algoritma
2 3 if (x == 0) then for i = 1 to n do a[i] = i; Red 1 2 3 Vrijeme izvršavanja n T(n) = 1 + n·1 T(n) = 1 + n Strukture podataka i algoritmi (30)
25
Zadatak 2 – odrediti vrijeme izvršavanja algoritma
1 2 3 4 5 i = 1; do a[i] = b[i] + c[i]; i = i + 1; while (i != n); Red 1 2 5 3 4 Vrijeme izvršavanja n-1 T(n) = 1 + (n-1)(1 + 1) T(n) = 2n - 1 Strukture podataka i algoritmi (30)
26
Zadatak 3 – odrediti vrijeme izvršavanja algoritma
1 2 3 4 5 6 7 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; Red 1 2 3 4 5 6 7 Vrijeme izvršavanja n T(n) = 1 + max{(2, 3, 4), (6, 7)} = = 1 + max{n·n·1, n·1} T(n) = 1 + n2 Strukture podataka i algoritmi (30)
27
Zadatak 4 – odrediti vrijeme izvršavanja algoritma
1 2 3 4 5 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; Red 1 2 3 4 5 Vrijeme izvršavanja n ∑j j=1 ∑k k=1 𝑇 𝑛 =𝑛 𝑗=1 𝑛 𝑗·1 + 𝑘=1 𝑛 𝑘= =𝑛· 𝑛(𝑛+1) 2 + 𝑛(𝑛+1) 2 𝑇 𝑛 = 𝑛 𝑛 Strukture podataka i algoritmi (30)
28
Zaključak Dizajn algoritma: pisanje niza naredbi koje sačinjavaju algoritam za rješenje datog problema Analiza algoritma: određivanje koliko algoritam zauzima resurse računara (vrijeme, memoriju, …) Provjera tačnosti algoritma – provjera izlaznog uslova petlje i provjera invarijante petlje Analiza algoritma – ocjena efikasnosti algoritma na osnovu kriterijuma iskorišćenosti resursa računara (vrijeme, memorija) Strukture podataka i algoritmi (30)
29
Zaključak 1 Određivanje vremena izvršavanja algoritma – empirijski i analitički Analitičko određivanje vremena izvršavanja algoritma - Analizirati rad algoritma korak po korak → zaključak vrijeme njegovog izvršavanja Vrijeme izvršavanja algoritma je funkcija veličine ulaznih podataka - Vremenska složenost u najgorem slučaju T(n) Strukture podataka i algoritmi (30)
30
Hvala na pažnji! Strukture podataka i algoritmi (30)
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.