You are on page 1of 10

Sadržaj predavanja br. 1 Doc.dr. Haris Šupić Kako postići uspjeh na ovom predmetu?

) Redovno dolazite na predavanja i vježbe.


vježbe Na predavanjima ćete:
1 ƒ Razumjeti i usvojiti pojmovni sistem relevantan za ovaj predmet
ƒ Naučiti i razumjeti koncepte relevantne za algoritme i strukture podataka
‰ Neke uvodne napomene
ƒ Vidjeti praktičnu realizaciju mnogih teoretski objašnjenih koncepata.
‰ Algoritmi u kontekstu razvoja softvera
ƒ Naučiti razlikovati bitno od nebitnog.
‰ Upotreba
U t b pseudokoda
d k d za opis
i algoritama
l it
‰ Vrijeme izvođenja algoritama
)Redovno dolazite na vježbe i samostalno rješavajte zadatke.
‰ Eksperimentalni pristup ƒ Ključna aktivnost koja će vas voditi uspješnom polaganju predmeta je da
‰ Teoretska analiza samostalno ili timski ako je to potrebno rješavate postavljene zadatke.
‰ big-O notacija ƒ Zadatke
Z d tk kkoje
j ne uspijete
ij t riješiti
ij šiti na vježbama,
j žb potrudite
t dit se da
d ih riješite
ij šit kod
k d
‰ Jednostavni primjeri analize složenosti kuće

)Redovno i samostalno radite domaće zadaće

)Ukoliko je potrebno dodatno pročitajte potrebne segmente iz drugih izvora (


literatura, WWW, ...)
1 2
Algoritmi i strukture podataka Algoritmi i strukture podataka

Kako nećete postići uspjeh na ovom predmetu? Literatura

Ne možete očekivati da ćete položiti predmet ako:


Lit t
Literatura:

' Ne radite samostalno domaće zadaće


1. Bilješke i slajdovi s predavanja (moći će se vidjeti na WEB situ Fakulteta)
' Ne trudite se da samostalno rješavate zadatke na vježbama
2.T.Cormen, C. Leiserson, R. Rivest, C.Stein. “Introduction to Algorithms”
' Ne dola
dolazite
ite redovno
redo no na predavanja
preda anja 2001, MIT Press, Cambridge, MA, USA

' Ne slušate pažljivo predavanja i aktivno učestvujete u nastavi 3. Alfred V. Aho “Data Structures and Algorithms”, 1983, Addison-Wesley

' Krenete učiti predmet nekoliko dana prije ispita

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

Pojam algoritma Važnost struktura podataka i algoritama

‰ Da bi mogli da oblikujemo programe sa


Komputerski kod = kvalitetno napravljenim programskim kodom
‰ Algoritam je logički niz diskretnih koraka koji opisuju rješenje za neki
dati problem pri čemu rješenje treba biti izračunljivo u konačnom Strukture podataka potrebno je da poznajemo neke osnovne
vremenu. algoritme i strukture podataka.
+
‰ Pod kvalitetno napravljenim programskim
algoritmi kodom podrazumijevamo program koji
efikasno rješava postavljeni problem
Strukture podataka uzimajući u obzir i postavljena ograničenja
( ij
(vrijeme, broj
b j programera i projektanata,
j kt t i
organiziraju informacije drugi resursi)
Ulaz Algoritam Izlaz
‰ Ne može se postati dobar kompjuterski
Algoritmi
profesionalac bez poznavanja osnovnih
algoritama
l i i struktura
k podataka.
d k
manipuliraju informacijama
7 8
Algoritmi i strukture podataka Algoritmi i strukture podataka
Algoritmi i razvoj softvera Algoritmi i razvoj softvera
‰ Ako je riječ o razvoju softvera koji uključuje na desetine hiljada linija
programskog koda, te ako se razvoj odvija u timskom okruženju onda su u ukupni ‰ Mnoge od prethodno navedenih aktivnosti se izvode istovremeno. Na
životni ciklus nekog softverskog proizvoda uključene slijedeće aktivnosti: primjer, dok se kodira jedan od dijelova softverskog proizvoda, u isto
vrijeme može se odvijati proces dizajniranja nekog drugog dijela tog
g softverskog
istog g pproizvoda.
ƒ Analiza
A li problema
bl
ƒ Definicija zahtjeva
‰ Česta je situacija da određeni broj inžinjera radi na jednom dijelu
ƒ Projektiranje
j k i j na visokom
i k i niskom
ik nivou
i razvoja softvera, dok druga grupa inžinjera radi na nekom drugom dijelu
ƒ Implementacija istovremeno.
ƒ Testiranje i verifikacija
ƒ Isporuka softvera ‰ Upravljanje svim aktivnostima u takvim slučajevima nije jednostavan
zadatak.
d k
ƒ Upotreba softvera
ƒ Održavanje softvera

9 10
Algoritmi i strukture podataka Algoritmi i strukture podataka

Algoritmi i razvoj softvera Algoritmi i razvoj softvera


‰ Ciljevi dobro napravljenog softvera ‰ U školskom okruženju razvoj programa završava kada riješimo postavljeni
zadatak i dobijemo ocjenu. Međutim, u stvarnom svijetu promjene u softveru
• treba tačno i u ppotpunosti
p obaviti zadatak za koji
j je
j dizajniran
j
se događaju i u fazi 'održavanja'. Česta
Č situacija je otkrivanje onih grešaka u
Prema tome, prvi korak u razvojnom procesu je tačno i precizno definiranje zahtijeva koje ovoj fazi koje nisu otkrivene u fazi testirnja, recimo. Isto tako, često se žele
softver treba ispuniti. Kad je riječ o programima koje studenti dobivaju na vježbama i
ispitima ti zahtijevi su definirani od strane nastavnika ili asistenta u vidu zadataka. S druge d d ti u postojeći
dodati t j ći softver
ft neke
k nove funkcije
f k ij itd.
itd
strane, kad je riječ o razvoju softvera za primjenu u stvarnom životu, tada dokument koji
opisuje zahtjeve može sadržavati na stotine stranica.
‰ Prema tome,
tome vidimo da su promjene u softveru česte i da se događaju u
• Kvalitetan softver treba biti takav da se može mijenjati; svim fazama njegovog životnog ciklusa. Imajući to na umu, softver-inžinjeri
j pokušavati
trebaju p razvijati
j programe
p g koji
j se mogu
g relativno lako modificirati.
Promjene nekog softvera se događaju u svim fazama njegovog postojanja. Nije rijetkost da
naručilac softvera da jedne spcifikacije koje opisuju željeni softver, a da nakon nekog Nadalje, treba istaknuti činjenicu da se modifikacije u programu često izvode
vremena u manjoj ili većoj mjeri promijeni svoje zahtijeve. Dakako, promjene se dešavaju od strane programera koji uopće nije izvorni autor tog programa, nego je riječ
i u fazi kodiranja. Na primjer, možda smo upravo u toj fazi pronašli neko novo bolje
o programeru-inžinjeru koji radi na održavanju programa koji je neko drugi
rješenje za postavljeni problem. Promjene se događaju i u fazi testiranja. Ako nam
program daje pogrešne rezultate, morat ćemo napraviti neophodne ispravke. razvio (Jednog dana će i neki od vas biti u ulozi da moraju nešto mijenjati u
programima koje je neko drugi razvio).
11 12
Algoritmi i strukture podataka Algoritmi i strukture podataka
Algoritmi i razvoj softvera Algoritmi i razvoj softvera
‰ Sada ćemo navesti neke elemente koji doprinose da se programi mogu lakše
mijenjati:
ƒ Program
g bi trebao biti čitljiv,
j razumljiv
j i dobro dokumentiran. ‰ Kada spomenemo riječ programiranje, ono na šta prvo pomislimo je pisanje
ƒ Velike programe treba podijeliti na manje logičke cjeline koje su relativno programa u nekom od programskih jezika.
nezavisne jadna od druge. ‰ U školama i na fakultetima se u pravilu pišu programi koji rješavaju relativno
ƒ Kvalitetan softver treba biti višekratno iskoristiv. jednostavne probleme.
Jedan od načina da se uštedi vrijeme za oblikovanje softverskih rješenja je ponovna
‰ Međutim, za oblikovanje i razvoj složenijih softverskih proizvoda koji će svoju
upotreba
b programa, klasa,
kl funkcija
f k ij i drugih
d ih komponenti
k i koje
k j su razvijene
ij u
prethodnim projektima. Važno je istaknuti da je za kreiranje softvera koji se može upotrebu naći u stvarnom svijetu potrebno je koristiti mnoge tehnike dizajniranja,
višekratno koristiti potrebno uložiti dosta napora u fazama specifikacije i dizajniranja. j , metode testiranja
standarde kodiranja, j i ostale tehnike da bi se upće
p razvio softver
Nadalje, takav softver treba biti razumljiv i dobro dokumentiran. koji zadovoljava određene standarde kvalitete.
ƒ Kvalitetan softver se treba završiti u predviđenim rokovima;
U stvarnom svijetu vrlo je važno da se razvoj planiranog softvera završi na vrijeme. Pa
tako, na primjer, prije samog otvaranja i početka rada nove banke neophodno je da je
softver
ft koji
k ji ćće biti korišten
k išt razvijen
ij na vrijeme.
ij
13 14
Algoritmi i strukture podataka Algoritmi i strukture podataka

Softver inžinjering Vrijeme izvođenja algoritma

ƒ Većina algoritama transformira


‰ Postavlja se pitanje zašto u takvim situacijama nije prikladno odmah sjesti ulazne objekte u izlazne objekte.
najbolji slučaj
za računar i početi pisati programe. Odnosno, da li je korištenje različitih
ƒ Vrijeme izvođenja nekog algoritma prosječan slučaj
metodologija zapravo ‘gubljenje vremena’. najgori slučaj
obično raste sa veličinom ulaznih 120

‰ 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

‰ Pod softver inžinjeringom podrazumijevamo pristup dizajnu, proizvodnji i prosječan slučaj. 60

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

‰ Glavni nedostaci eksperimentalnog pristupa su:


ƒ Napišemo program koji ƒ potrebno praktično implementirati dotični algoritam
implementira algoritam kojeg 9000 ƒ Rezultati dobiveni praktičnim mjerenjem ne moraju biti indikativni za strukturu
analiziramo 8000 i veličinu ulaznih podataka koji nisu bili uključeni u eksperiment.
7000 ƒ Da bi usporedili dva algoritma moraju se koristiti ista hardverska i softverska
ƒ Izvršavamo program sa ulazima
6000 okruženja

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

Pretpostavke za teoretsku analizu Pseudokod kao sredstvo za opis algoritma


‰ Pseudokod omogućuje opis nekog algoritma na visokom nivou.
nivou

‰ Pseudokod je više strukturiran nego opis nekog algoritma standardnim


‰ Osnovni
O i cilj
ilj analize
li složenosti
l ž i algoritama:
l i jezikom (engleski, njemački, itd.)
pronalaženje efikasnijih algoritama
‰ Pseudokod daje manje detaljan opis nekog algoritma nego što to daje
‰ Za obavljanje analize složenosti algoritama uzet ćemo slijedeće pretpostavke:
program napisan u nekom konkretnom programskom jeziku.
ƒ sekvencijalni jednoprocesorski računar;
ƒ fiksno vrijeme dohvata sadržaja memorijske lokacije; ‰ U mnogim
g situacijama
j se preferira
p korištenje
j pseudokoda
p umjesto
j
ƒ vrijeme obavljanja operacija (aritmetičke, logičke, konkretnog programskog jezika
pridruživanje,
p j , poziv
p funkcije)
j ) je
j ograničeno
g nekom ƒ (Na primjer,
primjer pri pisanju znanstvenih radova obično je prikladnije nove
konstantom kao gornjom granicom; algoritme opisati u pseudokodu nego u konkretnom programskom jeziku jer
će za deset ili ppetnaest godina
g mnogi
g jezici
j biti mrtvi,, pa
p opis
p u pseudokodu
p
garantira čitljivost i razumljivost algoritma i u budućnosti).

‰ Pseudokod prikriva neke detalje vezane uz dizajn algoritma


19 20
Algoritmi i strukture podataka Algoritmi i strukture podataka
Neki osnovni elementi pseudokoda Primjer izračunavanja broja primitivnih operacija

Primjer: pronalaženje maksimalnog elementa nekog niza

‰ Kontrola toka ‰ Poziv metode (funkcije)


var.method (arg [, arg…]) Algorithm arrayMax(A, n)
– if … then … [else …] Input array A of n integers
– hil … do
while d … ‰ V
Vraćanje
ć j vrijednosti
ij d i O
Output maximum
i element
l off A
– repeat … until … return expression
– for … do … currentMax ← A[0]
– U lačenje zamjenjuje
Uvlačenje amjenj je zagrade
agrade ‰ Neki izrazi
i ra i for i ← 1 to n − 1 do
if A[i] > currentMax then
‰ Deklaracija metode (funkcije) ← Pridruživanje(kao = u C++) currentMax ← A[i]
= Operator usporedbe return
t currentMax
tM
Algorithm method (arg [, arg…]) (kao == u C++)
Input … n2 indeksi i potencije su
Output … dozvoljeni kao i kod
d d ih matematičkih
standardnih ičkih ‰ U ovom primjeru riječi input, output return itd.
input output, itd su iz engleskog
izraza jezika, pa ih je moguće prevesti na bilo koji drugi standardni jezik
(kao n*n u C++)
(njemački, francuski, bosanski, ...) a da za algoritam i dalje kažemo da
21 je opisan u pseudokodu. 22
Algoritmi i strukture podataka Algoritmi i strukture podataka

Primjer izračunavanja broja primitivnih operacija Procjenjivanje vremena izvođenja

‰ 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

Slika prikazuje stupnjeve rasta 1E+30


• Uticaj promjena hardverskog i softverskog okruženja je sljedeći: slijedećih funkcija: 1E+28
Kubna funkcija
1E+26
– Vrijeme izvođenja f(n) se mijenja proporcionalno nekom konstantnom Linearne ≈ n 1E+24 Kvadratna funkcija
1E+22
faktoru. Kvadratne ≈ n2 1E+20 Linerna funkcija
1E+18
– S druge strane, stupanj rasta vremena izvođenja f(n) se ne mijenja. Kubne ≈ n3

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

unutrašnje svojstvo algoritma arrayMax. logaritamska skala za 1E+8


1E+6
obe
b koordinatne
k di t osi. i 1E+4
1E+2
Nagib pojedinih krivulja 1E+0
odgovara
g stupnju
p j rasta 1E+0
0 1E+2 1E+4 1E+6
6 1E+8
8 1E+10
0
dotičnih funkcija n

25 26
Algoritmi i strukture podataka Algoritmi i strukture podataka

Uticaj konstantnih faktora big-O notacija

‰ Na stupanj rasta ne utiču 10,000


1E+27
1E 27
slijedeći elementi: 1E+24 Quadratic
• Za date funkcije f(n) i g(n), 3n

ƒ Konstantni faktori 1E+21 Quadratic kažemo da je f(n) reda O(g(n)) 2n+10


Linear 1,000
1E+18 Linear ako
k postoje
j pozitivne
ii k
konstante
ƒ Članovi nižeg reda 1E+15 n
T (n )

c and n0 takve da vrijedi:


1E+12 100
‰ Neki p
primjeri:
j
1E+9
ƒ 102n + 105 je linearna 1E+6 f(n) ≤ cg(n) za n ≥ n0
10
j
funkcija 1E+3
• Primjer: 2n + 10 je O(n)
1E+0
ƒ 105n2 + 108n je
1E+0 1E+2 1E+4 1E+6 1E+8 1E+10
– 2n + 10 ≤ cn
1
j
kvadratna funkcija n – (c − 2) n ≥ 10
1 10 100 1 000
1,000
– n ≥ 10/(c − 2) n
– Uzmimo: c = 3 i n0 = 10

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:

c n0 ∈R+ , takvi da sa sve n>n0 vrijedi:


f(n) je O(g(n)) ako postoje c, • Na primjer: funkcija f(n)=n2 1 000 000
1,000,000
n^2
nije O(n)
100n
f(n) ≤ c g(n) – n2 ≤ cn
100,000
10n
– n≤c 10,000 n
– Gornja nejednakost ne
može
ž biti
bi i zadovoljena
d lj jer
j c 1,000
mora biti konstanta
100

10

1
1 10 100 1,000
n
29 30
Algoritmi i strukture podataka Algoritmi i strukture podataka

Algoritmi sa polinomskom vremenskom složenošću Jednostavni primjeri za big-O notaciju


‰ Ako je broj izvođenja operacija nekog algoritma ovisan o nekom ulaznom
‰ Neka je f(n)=7n-2
argumentu n oblika polinoma m-tog stupnja, onda je vrijeme izvođenja za taj
g
algoritam ( m)).
O(n Gornji f(n) je O(n)
Potrebno je c > 0 i n0 ≥ 1 takvi da je 7n-2 ≤ c•n za n ≥ n0
Dokaz: Ako uzmemo c = 7 i n0 = 1, ispunili smo traženi uvjet.
Ako je vrijeme izvođenja određeno polinomom: ‰ Neka je f(n)=3n3 + 20n2 + 5
f(n) = amnm + ... + a1n + a0 Gornji f(n) je O(n3)
Potrebno je c > 0 i n0 ≥ 1 takvi da je ispunjeno 3n3 + 20n2 + 5 ≤ c•n3 za n ≥ n0
onda vrijedi:
Ako uzmemo c = 4 i n0 = 21, ispunili smo traženi uvjet
|f(n)| ≤ |am| nm + ... +|a1|n +|a0| ‰ N k jje f(n)=3
Neka f( ) 3 llog n + log
l log
l n
|f(n)| ≤ (|am| + |am-1|/ n + ... +|a1| /nm-1+|a 0|/ nm) nm
Gornji f(n) je O(log n)
|f(n)| ≤ (|am| + ... +|a
|a1| +|a
|a0|) nm , za svaki n≥1
P b jje c > 0 i n0 ≥ 1 takvi
Potrebno k i da
d je
j ispunjeno
i j 3 llog n + log l n ≤ c•log
l log l n za
n ≥ n0
Uz slijedeće vrijednosti za c i n0 tvrdnja je dokazana:
Ako uzmemo c = 4 i n0 = 2,, ispunili
p smo traženi uvjet.
j
c = |am| + ... +|a1| +|a0| i n0 = 1
31 32
Algoritmi i strukture podataka Algoritmi i strukture podataka
Jednostavni primjeri analize složenosti for petlja unutar for petlje

‰ Analiza “A priori”: procjena vremena izvođenja, nezavisno od hardverskog


Koristeći big-O notaciju analizirajmo vremensku efikasnost slijedećeg
i softverskog okruženja (programskog jezika, kompajlera, ...)
fragmenta C++
C koda.
Budući da ovdje imamo ugnježđene
‰ Jednostavni primjeri: for (k=1;k<=n/2;++k) for petlje broj izvršavanja naredbi u
1
1. x +=+ y; 1 {
unutrašnjoj petlji je jednak produktu
.
2. for(i = 1; i <= n; i++) . broja ponavljanja individualnih
{ n . petlji.
lji To značii da
d je
j broj
b j
x += y; for (j=1;j<=n*n;++j) ponavljanja:
} {
.
3. for(i = 1; i <= n; i++)
. (n/2)*n*n=n3/2
{ n2
.
f (j = 1
for(j 1; j <= n; j
j++)
) }
{ } Prema tome vremenska
x += y
y; p
kompleksnost u ovom primjeru
p j je
j
} O(n3)
33 34
}
Algoritmi i strukture podataka Algoritmi i strukture podataka

for petlja iza for petlje Primjer sa logaritamskom kompleksnošću


Koristeći big
big-O
O notaciju analizirajmo vremensku efikasnost slijedećeg Koristeći big
big-O
O notaciju analizirajmo vremensku efikasnost slijedećeg
fragmenta C++ koda. Ovdje imamo slučaj da jedna for fragmenta C++ koda.
petlja slijedi iza druge for petlje, pa je Kontrolna varijabla k u ovoj petlji se
for (k=1;k<=n/2;++k) k=n;
{ broj izvršavanja operacija izvršenih u while (k>1) prepolovi pri svakom prolazu kroz petlju.
. obe p
petlje
j jednak
j sumi broja
j { Prema tome, broj ponavljanja naredbi
. izvršenih primitivnih operacija u .
unutar petlje je:
. .
} pojedinim petljama. To znači da je .
for (j=1;j<=n*n;++j) broj ponavljanja operacija u obe k=k/2; log2n
{ petlje jednak: }
.
. n/2+n2 Odnosno, vremenska kompleksnost u
. ovom primjeru je:
} Prema tome,
tome vremenska
kompleksnost u ovom primjeru je
O(log2n)
O(n2)
O(
35 36
Algoritmi i strukture podataka Algoritmi i strukture podataka
Primjer analize jednostavne funkcije Eksponencijalni algoritmi

‰ 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

You might also like