Professional Documents
Culture Documents
ASP08P01
ASP08P01
' Ne slušate pažljivo predavanja i aktivno učestvujete u nastavi 3. Alfred V. Aho “Data Structures and Algorithms”, 1983, Addison-Wesley
3 4
Algoritmi i strukture podataka Algoritmi i strukture podataka
Neke dodatne uvodne napomene Nastanak riječi algoritam
U svojoj knjizi arapski matematičar Muhamed ibn Musa al Horezmi (9. stoljeće)
Na ovom mjestu želim istaknuti da je ključna pretpostavka za uspješno je opisao pravila za obavljanje aritmetičkih operacija nad brojevima zapisanim u
dekadskom sistemu.
savladavanje ovog predmeta znanje programskih jezika C/C++.
Original te knjige na arapskom jeziku je izgubljen, ali postoji prijevod na
Svim studentima, a posebno onima koji imaju loše predznanje iz prethodno latinski.
latinski
navedenih jezika savjetujem da u što kraćem roku upotpune svoje znanje iz
U latinskom prijevodu isperd svakog pravila piše:
jjezika C++.
Di it Al
Dixit Algorizmi
i i
U suprotnom, studenti koji budu imali loše predznanje imat će ozbiljnih što je u prijevodu: Algorizmi je govorio
problema s polaganjem ovog ispita
ispita.
Zadnji dio imena al Horezmi pretvoren je u Algorizmi
Stoga ih upozoravamo da manjkavosti u svom znanju pravovremeno Postepeno ‘Algorizmi je govorio’ se pretvara u ‘algoritam glasi’
nadoknade.
d k d
U početku su se pod pojmom algoritma podrazumijevala samo pravila za
računanje brojevima
Danas
D se pod
d algoritmom
l i podrazumijevaju
d ij j pravila
il za obavljanje
b lj j zadataka
d k u
5 različitim oblastima, a najčešće u računarstvu. 6
Algoritmi i strukture podataka Algoritmi i strukture podataka
9 10
Algoritmi i strukture podataka Algoritmi i strukture podataka
Kako programi postaju sve veći i veći, potrebno je pažnju usmjeriti ne objekata 100
eme izvođenja
j negi
samo na kodiranje g i na neka druga
g pitanja
p j vezana uz razvojj softvera. Obično nam je najinteresantniji 80
održavanju računarskih programa pri čemu se za razvoj koriste razni alati Vrijeme izvođenja za prosječan slučaj 40
Vrije
koji inžinjerima pomažu a upravljaju veličinom i kompleksnošću je obično vrlo teško odrediti 20
j
rezultirajućih softverskih pproizvoda. 0
Fokusirat
F k i ćemoć se na vrijeme
ij 1000 2000 3000 4000
Veličina ulaza
izvođenja za najgori slučaj jer je to
lakše analizirati
15 16
Algoritmi i strukture podataka Algoritmi i strukture podataka
Eksperimentalni pristup Teoretska analiza
Vrijeme (ms)
različite veličine
5000 S druge strane teoretska analiza omogućuje
Koristimo neke od funkcija, kao što
4000
Koristimo opis algoritma na visokom nivou umjesto praktične implementacije,
je, na primjer, ugrađena clock()
3000 da bi karakterizirali vrijeme izvođenja algoritma kao funkciju od veličine ulaza
funkcija da dobijemo tačno vrijeme 2000 (n).
izvođenja programa 1000 U obzir uzimamo sve moguće
g ulazne ppodatke
Rezultate mjerenja prikažemo 0
Omogućuje nam da vrednujemo brzinu nekog algoritma neovisno o
0 50 100
grafički hardverskom i softverskom okruženju.
Veličina ulaza
17 18
Algoritmi i strukture podataka Algoritmi i strukture podataka
Analizom pseudokoda možemo odrediti maksimalni broj primitivnih • U najgorem slučaju algoritam arrayMax izvršava 7n − 1 primitivnih
operacija koje izvodi neki algoritam
algoritam, kao funkciju veličine ulaza n.
n operacija.
operacija
• Definirajmo:
Algorithm arrayMax(A,
arrayMax(A n) a = Vrijeme
j potrebno
p za najbržu
j primitivnu
p operaciju
p j
# operations
ti
currentMax ← A[0] 2 b = Vrijeme potrebno za najsporiju primitivnu operaciju
for i ← 1 to n − 1 do 2+n • Neka f(n) označava potrebno vrijeme za najgori slučaj za algoritam
if A[i] > currentMax
tM then
th 2( − 1)
2(n M Onda
arrayMax. O d možemo
ž pisati:
i i
currentMax ← A[i] 2(n − 1)
{ increment counter i } 2(n − 1) a ((7n − 1)) ≤ f(
f(n)) ≤ b(7n
( − 1))
return currentMax 1
Ukupno 7n − 1 • Prema tome, vrijeme izvođenja f(n) je ograničeno sa dvije linearne funkcije.
23 24
Algoritmi i strukture podataka Algoritmi i strukture podataka
Stupanj rasta vremena izvođenja Stupanj rasta vremena izvođenja
T (n )
1E+16
1E+14
1E+12
• Prema tome, linearan stupanj rasta vremena izvođenja f(n) je jedno suštinsko Primijetite da je korištena 1E+10
KkK
25 26
Algoritmi i strukture podataka Algoritmi i strukture podataka
27 28
Algoritmi i strukture podataka Algoritmi i strukture podataka
big-O notacija (malo drugačija pristup grafičkom prikazu) Razumijevanje big-O notacije
Formalna definicija:
10
1
1 10 100 1,000
n
29 30
Algoritmi i strukture podataka Algoritmi i strukture podataka
Ispod je napisana funkcija koja izračunava zbroj cifri nekog zadanog prirodnog Algoritmi kod kojih je dominantni član u opisu efikasnosti oblika an se
broja n. Potrebno je odrediti složenost funkcije? j eksponencijalni
nazivaju p j algoritmi.
g
Međutim, treba istaknuti da eksponencijalni algoritmi imaju uglavnom
int ZbrojCifri (int n)
teoretsku važnost zato što se njihovo izvođenje na današnjim tipičnim
{
računarima nebi moglo izvesti u razumnom vremenu niti za osrednje velike
long zbroj = 0;
while (n > 0) vrijednosti za n.
{
zbroj += n % 10;
n /= 10;
}
}
Složenost gornje funkcije je O(log10 n).
37 38
Algoritmi i strukture podataka Algoritmi i strukture podataka
Da dobijemo osjećaj za neke kategorije kompleksnosti! Praktična vrijednost od poznavanja kategorije komplek.
Iz prethodne tabele možemo, na primjer, vidjeti da neki O(n2) algoritam treba
Tabela prikazuje neke tipične funkcije koje koristimo za klasifikaciju algoritama. nekoliko sati da bi se izvršio ako je veličina ulaza 105.Koliko tačno sati će to biti
Za date vrijednosti u tabeli uzeta je pretpostavka da je konstanta proporcionalnosti to naravno ovisi o konkretnom hardverskom i softverskom okruženju, kao i o
1, te da se jedna primitivna operacija izvršava u 1 mikrosekundi. konstanti proporcionalnosti iz definicije big-O notacije.
Ipak,
p bez obzira na vrijednost
j konstante proporcionalnosti,
p p kategorizacija
g j
f(n) 103 105 106
algoritma kao O(n2) ima vrlo praktičan cilj. Naime, iz te kategorizacije znamo da
log2n 0.000010 sek. 0.000017 sek. 0.000020 sek. za ulaznu veličinu od 105, ne možemo očekivati trenutačno izvršavanje algoritma.
n 0.001 sek. 0.1 sek. 1 sek. Nadalje, ako je proporcionalna konstanta razumno malena, možemo reći da ima
n log2n 0 01 sek
0.01 sek. 1 7 sek
1.7 sek. 20 sek
sek. j
smisla ostaviti računar tijekom noći da obavi pposao dok mi spavamo,
p , ako nam
takav pristup odgovara.
n2 1 sek. 3 sata 12 dana
Potpuno druga situacija je recimo sa algoritmom koji je kategoriziran kao
n3 17 min. 32 stoljeća 30 000 stoljeća
O(n3). Tako kategoriziran algoritam za istu veličinu ulaza (105) je potpuno
2n 10285 stoljeća
j 1010 000 godina
g 10100 000 godina
g nepraktičan.
39 40
Algoritmi i strukture podataka Algoritmi i strukture podataka