You are on page 1of 36

Algoritmi i strukture podataka

28.09.15

Zatieno licencom http://creativecommons.org/licenses/by-nc-sa/3.0/hr/

Creative Commons

slobodno smijete:
dijeliti umnoavati, distribuirati i javnosti priopavati djelo
remiksirati preraivati djelo

pod sljedeim uvjetima:


imenovanje. Morate priznati i oznaiti autorstvo djela na nain kako je
specificirao autor ili davatelj licence (ali ne nain koji bi sugerirao da Vi ili Vae
koritenje njegova djela imate njegovu izravnu podrku).
nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.
dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate
koristei ga, preradu moete distribuirati samo pod licencom koja je ista ili slina
ovoj.

U sluaju daljnjeg koritenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog
djela. Najbolji nain da to uinite je linkom na ovu internetsku stranicu.
Od svakog od gornjih uvjeta mogue je odstupiti, ako dobijete doputenje nositelja autorskog prava.
Nita u ovoj licenci ne naruava ili ograniava autorova moralna prava.
Tekst licencije preuzet je s http://creativecommons.org/.
Algoritmi i strukture podataka, FER

28.09.15

2 / 36

Sloenost algoritama
Algoritmi
Sloenost algoritama

28.09.15

Abu Ja'far Mohammed ibn Musa al Khowarizmi

Abu Ja'far Mohammed ibn


Musa al Khowarizmi

Muhamed, otac Jafarov, sin Muse

iz Khwarizma

roen u Khwarizmu, danas


Khiva, Uzbekistan, oko 780. g.
umro u Bagdadu, oko 850.
godine.
jedan od 10 najcjenjenijih
matematiara svih vremena

Algoritmi i strukture podataka, FER

28.09.15

4 / 36

Zasluge al Khowarizmija

potie koritenje hindu-arapskih brojeva - uvodi nulu


u Bagdadu oko 825. godine napisao knjigu Hidab al-jabr
w'al-muqubala

Znanost o prenoenju i ponitenju


jabr - prenoenje na suprotnu
stranu jednadbe

muqubala - ponitenje jednakih izraza s lijeve i desne strane


jednadbe

x - 2 = 12 x = 12 + 2

x+y=y+7x=7

al-jabr -> algebra


nematematiki (maursko porijeklo):
algebrista namjeta kostiju

Algoritmi i strukture podataka, FER

28.09.15

5 / 36

Od al Khowarizmija do algoritma...

vjerovao da se bilo koji matematiki problem moe ralaniti na


korake, tj. niz pravila
u latinskom prijevodu knjige (12. stoljee) ispred svakog pravila pie
Dixit Algorizmi - rekao je Al Kowarzimi

algoritam glasi

u poetku algoritmom se nazivaju samo pravila raunanja s


brojevima, kasnije i pravila obavljanja ostalih zadataka u matematici
u XX stoljeu, pojavom raunala, pojam se proiruje na raunarstvo,
a zatim i na druga podruja
pravila za postizanje eljenog rezultata

Algoritmi i strukture podataka, FER

28.09.15

6 / 36

to je algoritam

precizno opisan nain rjeenja nekog problema


jednoznano odreuje to treba napraviti
moraju biti definirani poetni objekti koji pripadaju nekoj klasi
objekata na kojima se obavljaju operacije
kao ishod algoritma pojave se zavrni objekti ili rezultati
konani broj koraka; svaki korak opisan instrukcijom
obavljanje je algoritamski proces

uporabiv, ako se dobije rezultat u konanom vremenu


primjeri za nedoputene instrukcije:
izraunaj 5/0
uveaj x za 6 ili 7

Algoritmi i strukture podataka, FER

28.09.15

7 / 36

Algoritam

algoritam mora biti djelotvoran:

primjeri:

zbrajanje cijelih brojeva je djelotvorno


zbrajanje realnih brojeva nije jer se moe pojaviti broj s beskonano mnogo znamenki

sa znanjem programiranja i uz razumijevanje problema koji rjeava, student


moe napisati djelotvoran (effective) algoritam

u konanom vremenu moe se dobiti rezultat koristei olovku i papir.

cilj ovog predmeta je nauiti kako se oblikuje i programira uinkovit (efficient) algoritam.

djelotvoran i uinkovit su u hrvatskom jeziku gotovo sinonimi

effective = onaj koji daje rezultat, djelotvoran


efficient = uspjean, uinkovit (s obzirom na utroene resurse - vrijeme, procesor, disk,
memoriju)

mnoenje se moe svesti na ponavljanje zbrajanja djelotvorno, ali nije uinkovito!


rjeavanje velikog skupa linearnih jednadbi Kramerovim pravilom - djelotvorno, ali nije
uinkovito!

Algoritmi i strukture podataka, FER

28.09.15

8 / 36

Procedura

postupak koji ima sva svojstva kao i algoritam, ali ne mora zavriti u
konanom broju koraka jest raunalna procedura
u jeziku C to moe biti void funkcija

primjeri za proceduru:

Procedura

Algoritam

operacijski sustav raunala


ureiva teksta

vrijeme izvoenja mora biti "razumno"


primjer:
algoritam koji bi izabirao potez igraa aha tako da ispita sve mogue

posljedice poteza, zahtijevao bi milijarde godina na najbrem zamislivom


raunalu
Algoritmi i strukture podataka, FER

28.09.15

9 / 36

Algoritmi i programi

program - opis algoritma koji u nekom programskom jeziku jednoznano


odreuje to raunalo treba napraviti
programiranje - nauiti sintaksu nekog proceduralnog jezika i stei osnovna
intuitivna znanja glede algoritmizacije problema opisanog rijeima
algoritmi + strukture podataka = programi (Wirth)

kako osmisliti algoritme?


kako strukturirati podatke?
kako formulirati algoritme?
kako verificirati korektnost algoritama?
kako analizirati algoritme?
kako provjeriti (testirati) program?

Postupci izrade algoritama nisu jednoznani te zahtijevaju i kreativnost. Inae bi


ve postojali generatori algoritama. Znai da se (za sada?) gradivo ovog
predmeta ne moe u potpunosti algoritmizirati. Koristit e se programski jezik C.
Za saeti opis sloenijih algoritama moe se koristiti pseudokod.

Algoritmi i strukture podataka, FER

28.09.15

10 / 36

Djelotvorno, ali nije uinkovito?

Algoritmi i strukture podataka, FER

28.09.15

11 / 36

Analiza sloenosti algoritama


Analize "a priori" i "a posteriori"
O-notacija
Asimptotsko vrijeme izvoenja
Primjeri

28.09.15

Osnovni pojmovi

svrha
intelektualna razonoda?
predvianje vremena izrauna
pronalaenje uinkovitijih algoritama

pretpostavke:
sekvencijalno jednoprocesorsko raunalo
fiksno vrijeme dohvata sadraja memorijske lokacije
vrijeme obavljanja operacija (aritmetike, logike, pridruivanje, poziv

funkcije) je ogranieno nekom konstantom kao gornjom granicom

Algoritmi i strukture podataka, FER

28.09.15

13 / 36

Analize a priori i a posteriori

izbor skupova podataka za iscrpno testiranje algoritma:


ponaanje u najboljem sluaju (best case scenario)
ponaanje u najgorem sluaju (worst case scenario)
prosjeno (tipino) ponaanje

a priori
trajanje izvoenja algoritma (u najgorem sluaju) kao vrijednost funkcije

nekih relevantnih argumenata (npr. broja podataka)

a posteriori
statistika dobivena mjerenjem na raunalu

Algoritmi i strukture podataka, FER

28.09.15

14 / 36

Analiza a priori

procjena vremena izvoenja, nezavisno od raunala, programskog


jezika, prevoditelja (compilera)
primjeri:
a) x += y;

b) for(i = 1; i <= n; i++) { n


x += y;
}
c) for(i = 1; i <= n; i++) { n2
for(j = 1; j <= n; j++) {
x += y;
}
}
Algoritmi i strukture podataka, FER

28.09.15

15 / 36

Sloenost algoritma

treba nam alat kojim emo usporediti uinkovitost algoritama


u pomo dolazi matematika

promatramo kako se ponaa vrijeme izvoenja kad broj ulaznih


podataka postane dovoljno velik
primjer: inverzija matrice od n x n elemenata traje 10n3 sekundi
inverzija matrice 100 x 100 elemenata traje 1 minutu
inverzija matrice 200 x 200 elemenata trajat e 8 minuta (23=8)
kako izraziti vrijeme izvoenja kao funkciju od n?

npr. vrijeme izvoenja raste s n3

Algoritmi i strukture podataka, FER

28.09.15

16 / 36

O - notacija

f(n) = O(g(n)) ako postoje dvije pozitivne konstante c i n0 takve da vrijedi f(n) cg(n) za
sve n n0

trai se najmanji g(n) za koji to vrijedi

drugim rijeima, procjenjuje se trajanje kao red veliine odreen temeljem broja podataka n,
pomnoeno s nekom konstantom c

primjeri:

n3+5n2+77n = O(n3)

Koliki je posao prenijeti 1 stolicu iz dvorane A u dvoranu B?

Koliki je posao prenijeti n stolica iz A u B?

Koliki je posao prenijeti n stolica iz A u B, s time da se kod donoenja svake nove stolice sve dotada
donesene stolice u B moraju pomaknuti, pri emu se za pomicanje stolice u dvorani B ulae isti trud
kao i kod prijenosa jedne stolice iz A u B?
1 + 2 + 3 + 4 + ...+ n = n(n+1)/2 = n2/2 + n/2 = O (n2)

Algoritmi i strukture podataka, FER

28.09.15

17 / 36

O - notacija

analizom a priori dobije se vrijeme izvoenja algoritma O(g(n))

ako je broj izvoenja operacija nekog algoritma ovisan o nekom ulaznom


argumentu n oblika polinoma m-tog stupnja, onda je vrijeme izvoenja za taj
algoritam O(nm)

dokaz:
Ako je vrijeme izvoenja odreeno polinomom:

A(n) = amnm + ... + a1n + a0


onda vrijedi:

A(n) am nm + ... +a1n +a0


A(n) (am + am-1/ n + ... +a1 /nm-1+a0/ nm) nm
A(n) (am + ... +a1 +a0) nm , za svaki n1
uz: c = am + ... +a1 +a0
Algoritmi i strukture podataka, FER

i n0 = 1 tvrdnja je dokazana
28.09.15

18 / 36

O - notacija

moe se kao c koristiti bilo koja konstanta vea od am ako je n


dovoljno velik:
ako neki algoritam ima k odsjeaka ija vremena su:

c1nm1, c2nm2,...,cknmk
onda je ukupno vrijeme

c1nm1 + c2nm2 +... + cknmk


znai da je za taj algoritam vrijeme izvoenja jednako O(nm), gdje je
m = max{mi}, i =1,...,k

Algoritmi i strukture podataka, FER

28.09.15

19 / 36

O - notacija

vrijedi za dovoljno veliki n:


O(1) < O(log n) < O(n) < O(nlog n) < O(n2) < O(n3) < ...< O(2n) < O(n!)
O(1) znai da je vrijeme izvoenja ogranieno konstantom
ostale vrijednosti, do predzadnje, predstavljaju polinomna vremena

izvoenja algoritma

svako sljedee vrijeme izvoenja je vee za red veliine

predzadnji izraz predstavlja eksponencijalno vrijeme izvoenja

ne postoji polinom koji bi ga mogao ograniiti jer za dovoljno veliki n ova funkcija
premauje bilo koji polinom

algoritmi koji zahtijevaju eksponencijalno vrijeme mogu biti nerjeivi u

razumnom vremenu, bez obzira na brzinu slijednog raunala


Algoritmi i strukture podataka, FER

28.09.15

20 / 36

- notacija

f(n) = (g(n)) ako postoje dvije pozitivne konstante c i n0


takve da vrijedi f(n) c g(n) za sve n > n0
trai se najvei g(n) za koji to vrijedi
donja granica za vrijeme izvoenja algoritma
niti u kojem sluaju izvoenje ne moe biti krae od

npr. mnoenje dvije matrice od n x n elemenata uvijek traje

(n2) , O (n3)
zbrajanje n brojeva uvijek traje (n) = O (n)
pronalaenje nekog broja meu n nesortiranih brojeva (1) O (n)

Algoritmi i strukture podataka, FER

28.09.15

21 / 36

- notacija

f(n) = (g(n)) ako postoje pozitivne konstante c1, c2 i n0 takve da


vrijedi c1g(n) f(n) c2g(n) za sve n > n0
f i g rastu jednako brzo za velike n
omjer f i g je izmeu c1 i c2
drugim rijeima, jednaka su trajanja za najbolji i za najgori sluaj

primjer:
Treba po abecedi sortirati n kontrolnih zadaa tako da se prvo pronae prvi

po abecedi, zatim se u preostalima trai prvi itd.

postupak jednako traje bez obzira na eventualnu ureenost:

O(n2) = (n2) = (n2)


Algoritmi i strukture podataka, FER

28.09.15

22 / 36

Asimptotsko vrijeme izvoenja

f(n) ~ g(n) ako je

ita se: "f(n) je asimptotski jednako funkciji g(n)

precizniji je opis vremena izvoenja nego O-notacijom

f ( n)
1
lim
n g ( n)

zna se i red veliine vodeeg lana i konstanta koja ga mnoi

ako je, primjerice:


f(n) = aknk + ... + a0
tada je:

f(n) = O(nk) i f(n) ~ aknk


primjeri:

3*2x+7 logx+x ~ 3*2x

za primjer sortiranja s prethodnog slajda (sortiranje zadaa):

zbog linearnog smanjivanja preostalog skupa u kojem se trai prvi, asimptotsko trajanje je:

~ n2/2
Algoritmi i strukture podataka, FER

28.09.15

23 / 36

Asimptotsko vrijeme izvoenja

u izraunu uestalosti obavljanja nekih naredbi esto se javljaju


sume oblika:
for (i = 1; i <= n; i++)
for (j = 0; j < i; i++) {...}
n

i = n(n+1)/2 = O (n2)
i=1

n2/2

Algoritmi i strukture podataka, FER

28.09.15

24 / 36

Razne sloenosti u logaritamskom mjerilu

Algoritmi i strukture podataka, FER

28.09.15

25 / 36

O-notacija - primjeri
IspisiTrazi.c

ispisi
petlja se uvijek obavi n puta (n) ,

O(n) , (n)

trazi
vrijeme izvoenja je O(n)
donja granica je (1)

u najboljem sluaju u prvom koraku nae traeni lan polja


u najgorem sluaju mora pregledati sve lanove polja

Algoritmi i strukture podataka, FER

28.09.15

26 / 36

Analiza a posteriori

stvarno vrijeme potrebno za izvoenje algoritma na konkretnom


raunalu
#include <sys\timeb.h> // gdje je deklarirano
struct timeb {
time_t time; // broj sekundi od ponoi, 01.01.1970, UTC
unsigned short millitm; // milisekunde
short timezone; // razlika u minutama od UTC
short dstflag; // <>0 ako je na snazi ljetno vrijeme
};
void ftime(struct timeb *timeptr);

Algoritmi i strukture podataka, FER

28.09.15

27 / 36

Analiza a posteriori

u programu:
struct timeb vrijeme1, vrijeme2; long trajanjems;
ftime (&vrijeme1);
...
ftime (&vrijeme2);
trajanjems = 1000 * (vrijeme2.time - vrijeme1.time) +
vrijeme2.millitm - vrijeme1.millitm;

Universal Time Co-ordinated (UTC)


novi naziv za Greenwich Mean Time (GMT)

Algoritmi i strukture podataka, FER

28.09.15

28 / 36

Zadaci za vjebu

Za algoritam
for (i = 0; i < n; i++) {
if (a[i] == b) {
printf ("i = %d\n", i);
break;
}
}
odrediti:
a) apriorno vrijeme izvoenja
b) odrediti asimptotsku ocjenu za prosjeno vrijeme izvoenja
c) asimptotsku ocjenu vremena izvoenja za najbolji sluaj
d) asimptotsku ocjenu vremena izvoenja za najgori sluaj
e) za kakvu vrijednost varijable b nastupa najgori sluaj?

Algoritmi i strukture podataka, FER

28.09.15

29 / 36

Zadaci za vjebu

Napisati funkciju koja rauna zbroj znamenki zadanog prirodnog


broja N. Kolika je sloenost funkcije?
int zbrojZnamenki (int N) {
int zbroj = 0;
while (N > 0) {
zbroj += N % 10;
N /= 10;
}
return zbroj;
}

Algoritmi i strukture podataka, FER

28.09.15

30 / 36

Zadaci za vjebu
Stvarno trajanje

5n2+7n+4
3n2+700n+2
n2+7logn+40
0,1*2n+100n2
(2n+1)2
6nlogn + 10n
8logn + 1000
3n! + 2n + n10
3*5n + 6*2n + n100

n2
n2
n2
2n
n2
nlogn
logn
n!
5n

5n2
3n2
n2
0,1*2n
4n2
6nlogn
8logn
3n!
3*5n

Algoritmi i strukture podataka, FER

28.09.15

31 / 36

Primjeri ovisnosti trajanja o broju podataka i sloenosti


n

T(n) = n

T(n) = n lg(n)

T(n) = n2

T(n) = n3

T(n) = 2n

0.005 s

0.01 s

0.03 s

0.13 s

0.03 s

10

0.01 s

0.03 s

0.1 s

1 s

1 s

20

0.02 s

0.09 s

0.4 s

8 s

1 ms

50

0.05 s

0.28 s

2.5 s

125 s

13 dana

100

0.1 s

0.66 s

10 s

1 ms

4 x 1013 godina

Algoritmi i strukture podataka, FER

28.09.15

32 / 36

to se moe rijeiti u zadanom vremenu


Vremenska
sloenost

Veliina najveeg sluaja problema koji se moe rijeiti za 1 sat


danas raspoloivim
raunalom

100 puta brim


raunalom

1000 puta brim


raunalom

N1

100N1

1000N1

n2

N2

10 N2

31.6 N2

n3

N3

4.64 N3

10 N3

2n

N4

N4+6.64

N4+9.97

3n

N5

N5+4.19

N5+6.29

Algoritmi i strukture podataka, FER

28.09.15

33 / 36

Relativni udio komponenti u izrazu: n4 + n3log n + 2 (n-1)

O ( 2n )

n4

n3 log n

2(n-1)

10

10 000

1000

512

17

83 521

6 046

65536

18

104 976

7 321

131072

50

6 250 000

212 372

562 949 953 421 312

100

100 000 000

2 000 000

6,3 x 10 29

Algoritmi i strukture podataka, FER

28.09.15

34 / 36

Utjecaj veliine konstante K = 1 000 000

Kn

K n2

K n4

K 2n

106

106

106

2 x 106

10

107

108

1010

1,0 x 108

100

108

1010

1014

1,2 x 1036

1 000

109

1012

1018

~ 10306

Algoritmi i strukture podataka, FER

28.09.15

35 / 36

to znai dovoljno veliki n, tj. n > n0

Izvor: Cormen, Leiserson & Rivest: Introduction to algorithms, 2/e,MIT Press, 2001
Algoritmi i strukture podataka, FER

28.09.15

36 / 36

You might also like