Upload
john-cox
View
233
Download
2
Embed Size (px)
Citation preview
Algoritmi i strukture podatakaAlgoritmi i strukture podataka
Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/
Prof. dr. sc. Damir KalpićProf. dr. sc. Vedran MornarProf. dr. sc. Krešimir FertaljDoc. dr. sc. Gordan GledecDr. sc. Zvonimir VanjakMr. sc. Boris MilašinovićIvica Botički, dipl. ing.
Creative CommonsCreative Commons
slobodno smijete:slobodno smijete: dijelitidijeliti — umnožavati, distribuirati i javnosti priopćavati djelo — umnožavati, distribuirati i javnosti priopćavati djelo remiksiratiremiksirati — prerađivati djelo — prerađivati djelo
pod sljedećim uvjetima:pod sljedećim uvjetima: imenovanjeimenovanje. Morate priznati i označiti autorstvo djela na način kako je . Morate priznati i označiti autorstvo djela na način kako je
specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). korištenje njegova djela imate njegovu izravnu podršku).
nekomercijalnonekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. . Ovo djelo ne smijete koristiti u komercijalne svrhe. dijeli pod istim uvjetimadijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate . Ako ovo djelo izmijenite, preoblikujete ili stvarate
koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. ovoj.
U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.
Tekst licencije preuzet je s http://creativecommons.org/.
Algoritmi i strukture podataka, FER, 2007/08. 2 / 35
Složenost algoritamaSloženost algoritama
AlgoritmiAlgoritmiSloženost algoritamaSloženost algoritama
Abu Ja'far Mohammed ibn Musa al KhowarizmiAbu Ja'far Mohammed ibn Musa al Khowarizmi
Abu Ja'far Mohammed ibn Abu Ja'far Mohammed ibn Musa al KhowarizmiMusa al Khowarizmi موسى بن محمد جعفر موسى أبو بن محمد جعفر أبو
الخوارزميالخوارزمي Muhamed, otac Jafarov, sin Muse Muhamed, otac Jafarov, sin Muse
iz Khwarizmaiz Khwarizma rođen u Khwarizmu, danas rođen u Khwarizmu, danas
Khiva, Uzbekistan, oko 780. g.Khiva, Uzbekistan, oko 780. g. umro u Bagdadu, oko 850. umro u Bagdadu, oko 850.
godine. godine. jedan od 10 najcjenjenijih jedan od 10 najcjenjenijih
matematičara svih vremenamatematičara svih vremenaAlgoritmi i strukture podataka, FER, 2007/08. 4 / 35
Zasluge Zasluge al Khowarizmial Khowarizmijaja
potiče korištenje hindu-arapskih brojeva - uvodi nulupotiče korištenje hindu-arapskih brojeva - uvodi nulu u Bagdadu oko 825. godine napisao knjigu “Hidab al-jabr u Bagdadu oko 825. godine napisao knjigu “Hidab al-jabr
w'al-muqubala”w'al-muqubala” الجبر حساب في المختصر الجبر الكتاب حساب في المختصر الكتاب
والمقابلةوالمقابلة Znanost o prenošenju i poništenjuZnanost o prenošenju i poništenju jabr - prenošenje na suprotnu jabr - prenošenje na suprotnu
stranu jednadžbestranu jednadžbe– x - 2 = 12 x - 2 = 12 x = 12 + 2 x = 12 + 2
muqubala - poništenje jednakih izraza s lijeve i desne strane muqubala - poništenje jednakih izraza s lijeve i desne strane jednadžbejednadžbe
– x + y = y + 7 x + y = y + 7 x = 7 x = 7 al-jabr -> algebraal-jabr -> algebra nematematički (maursko porijeklo): nematematički (maursko porijeklo): algebrista algebrista namještač kostiju namještač kostiju
Algoritmi i strukture podataka, FER, 2007/08. 5 / 35
Od al Od al KhowarizmiKhowarizmija do algoritma...ja do algoritma...
vjerovao da se bilo koji matematički problem može raščlaniti na vjerovao da se bilo koji matematički problem može raščlaniti na korake, tj. niz pravilakorake, tj. niz pravila
u latinskom prijevodu knjige (12. stoljeće) ispred svakog pravila pišeu latinskom prijevodu knjige (12. stoljeće) ispred svakog pravila piše Dixit Dixit AlgorizmiAlgorizmi - rekao je Al Kowarzimi - rekao je Al Kowarzimi algoritam glasialgoritam glasi
u početku algoritmom se nazivaju samo pravila računanja s u početku algoritmom se nazivaju samo pravila računanja s brojevima, kasnije i pravila obavljanja ostalih zadataka u matematicibrojevima, kasnije i pravila obavljanja ostalih zadataka u matematici
u XX stoljeću, pojavom računala, pojam se proširuje na računarstvo, u XX stoljeću, pojavom računala, pojam se proširuje na računarstvo, a zatim i na druga područjaa zatim i na druga područja
pravila za postizanje željenog rezultatapravila za postizanje željenog rezultata
Algoritmi i strukture podataka, FER, 2007/08. 6 / 35
Što je algoritamŠto je algoritam
precizno opisan način rješenja nekog problemaprecizno opisan način rješenja nekog problema jednoznačno određuje što treba napravitijednoznačno određuje što treba napraviti moraju biti definirani moraju biti definirani početni objektipočetni objekti koji pripadaju nekoj klasi koji pripadaju nekoj klasi
objekata na kojima se obavljaju operacijeobjekata na kojima se obavljaju operacije kao ishod algoritma pojave se kao ishod algoritma pojave se završni objektizavršni objekti ili ili rezultatirezultati konačni broj koraka; svaki korak opisan konačni broj koraka; svaki korak opisan instrukcijominstrukcijom obavljanje je obavljanje je algoritamski procesalgoritamski proces
uporabiv, ako se dobije rezultat u uporabiv, ako se dobije rezultat u konačnomkonačnom vremenu vremenu primjeri za nedopuštene instrukcije:primjeri za nedopuštene instrukcije:
izračunaj 5/0izračunaj 5/0 uvećaj x za 6 ili 7uvećaj x za 6 ili 7
Algoritmi i strukture podataka, FER, 2007/08. 7 / 35
AlgoritamAlgoritam
algoritam mora biti algoritam mora biti djelotvorandjelotvoran:: u konačnom vremenu može se dobiti rezultat koristeći olovku i papir.u konačnom vremenu može se dobiti rezultat koristeći olovku i papir.
primjeri:primjeri: zbrajanje cijelih brojeva je djelotvornozbrajanje cijelih brojeva je djelotvorno zbrajanje realnih brojeva nije jer se može pojaviti broj s beskonačno mnogo znamenkizbrajanje realnih brojeva nije jer se može pojaviti broj s beskonačno mnogo znamenki
sa znanjem programiranja i uz razumijevanje problema koji rješava, student sa znanjem programiranja i uz razumijevanje problema koji rješava, student može napisati može napisati djelotvorandjelotvoran ( (effectiveeffective) algoritam) algoritam cilj ovog predmeta je naučiti kako se oblikuje i programira cilj ovog predmeta je naučiti kako se oblikuje i programira učinkovitučinkovit ( (efficientefficient) algoritam.) algoritam.
djelotvoran i učinkovit su u hrvatskom jeziku gotovo sinonimi djelotvoran i učinkovit su u hrvatskom jeziku gotovo sinonimi effectiveeffective = onaj koji daje rezultat, = onaj koji daje rezultat, djelotvorandjelotvoran efficientefficient = uspješan, = uspješan, učinkovitučinkovit (s obzirom na utrošene resurse - vrijeme, procesor, disk, (s obzirom na utrošene resurse - vrijeme, procesor, disk,
memoriju)memoriju)– množenje se može svesti na ponavljanje zbrajanja – djelotvorno, ali nije učinkovito!množenje se može svesti na ponavljanje zbrajanja – djelotvorno, ali nije učinkovito!– rješavanje velikog skupa linearnih jednadžbi Kramerovim pravilom - djelotvorno, ali nije rješavanje velikog skupa linearnih jednadžbi Kramerovim pravilom - djelotvorno, ali nije
učinkovito!učinkovito!
Algoritmi i strukture podataka, FER, 2007/08. 8 / 35
ProceduraProcedura
postupak koji ima sva svojstva kao i algoritam, ali ne mora završiti u postupak koji ima sva svojstva kao i algoritam, ali ne mora završiti u konačnom broju koraka jest računalna konačnom broju koraka jest računalna proceduraprocedura u jeziku C to može biti u jeziku C to može biti voidvoid funkcija funkcija
primjeri za proceduru: primjeri za proceduru: operacijski sustav računalaoperacijski sustav računala uređivač tekstauređivač teksta
vrijeme izvođenja mora biti "razumno"vrijeme izvođenja mora biti "razumno" primjer:primjer:
algoritam koji bi izabirao potez igrača šaha tako da ispita sve moguće algoritam koji bi izabirao potez igrača šaha tako da ispita sve moguće posljedice poteza, zahtijevao bi milijarde godina na najbržem zamislivom posljedice poteza, zahtijevao bi milijarde godina na najbržem zamislivom računaluračunalu
Algoritam
Procedura
Algoritmi i strukture podataka, FER, 2007/08. 9 / 35
Algoritmi i programiAlgoritmi i programi
programprogram - opis algoritma koji u nekom programskom jeziku jednoznačno - opis algoritma koji u nekom programskom jeziku jednoznačno određuje što računalo treba napravitiodređuje što računalo treba napraviti
programiranjeprogramiranje - naučiti sintaksu nekog proceduralnog jezika i steći osnovna - naučiti sintaksu nekog proceduralnog jezika i steći osnovna intuitivna znanja glede algoritmizacije problema opisanog riječimaintuitivna znanja glede algoritmizacije problema opisanog riječima
algoritmi + strukture podataka = algoritmi + strukture podataka = programiprogrami (Wirth) (Wirth) kako kako osmislitiosmisliti algoritme? algoritme? kako kako strukturiratistrukturirati podatke? podatke? kako kako formuliratiformulirati algoritme? algoritme? kako kako verificirativerificirati korektnost algoritama? korektnost algoritama? kako kako analiziratianalizirati algoritme? algoritme? kako kako provjeritiprovjeriti (testirati) program? (testirati) program?
Postupci izrade algoritama nisu jednoznačni te zahtijevaju i kreativnost. Inače bi Postupci izrade algoritama nisu jednoznačni te zahtijevaju i kreativnost. Inače bi već postojali generatori algoritama. Znači da se (za sada?) gradivo ovog već postojali generatori algoritama. Znači da se (za sada?) gradivo ovog predmeta ne može u potpunosti algoritmizirati. Koristit će se predmeta ne može u potpunosti algoritmizirati. Koristit će se programski jezik Cprogramski jezik C. . Za sažeti opis složenijih algoritama može se koristiti Za sažeti opis složenijih algoritama može se koristiti pseudokodpseudokod..
Algoritmi i strukture podataka, FER, 2007/08. 10 / 35
Analiza složenosti algoritamaAnaliza složenosti algoritama
Analize "a priori" i "a posteriori"Analize "a priori" i "a posteriori"O-notacijaO-notacijaAsimptotsko vrijeme izvođenjaAsimptotsko vrijeme izvođenjaPrimjeriPrimjeri
Osnovni pojmoviOsnovni pojmovi
svrhasvrha intelektualna razonoda?intelektualna razonoda? predviđanje vremena izračunapredviđanje vremena izračuna pronalaženje učinkovitijih algoritamapronalaženje učinkovitijih algoritama
pretpostavke:pretpostavke: sekvencijalno jednoprocesorsko računalosekvencijalno jednoprocesorsko računalo fiksno vrijeme dohvata sadržaja memorijske lokacijefiksno vrijeme dohvata sadržaja memorijske lokacije vrijeme obavljanja operacija (aritmetičke, logičke, pridruživanje, poziv vrijeme obavljanja operacija (aritmetičke, logičke, pridruživanje, poziv
funkcije) je ograničeno nekom konstantom kao gornjom granicomfunkcije) je ograničeno nekom konstantom kao gornjom granicom
Algoritmi i strukture podataka, FER, 2007/08. 12 / 35
Analize “a priori” i “a posteriori”Analize “a priori” i “a posteriori”
izbor skupova podataka za iscrpno testiranje algoritma:izbor skupova podataka za iscrpno testiranje algoritma: ponašanje u ponašanje u najboljemnajboljem slučaju ( slučaju (best case scenariobest case scenario)) ponašanje u ponašanje u najgoremnajgorem slučaju ( slučaju (worst case scenarioworst case scenario)) prosječnoprosječno (tipično) ponašanje (tipično) ponašanje
a priori a priori trajanje izvođenja algoritma (trajanje izvođenja algoritma (u najgorem slučajuu najgorem slučaju) kao vrijednost funkcije ) kao vrijednost funkcije
nekih relevantnih argumenata (npr. nekih relevantnih argumenata (npr. broja podatakabroja podataka)) a posteriori a posteriori
statistika dobivena mjerenjem na računalustatistika dobivena mjerenjem na računalu
Algoritmi i strukture podataka, FER, 2007/08. 13 / 35
Analiza Analiza “a priori” “a priori”
procjena vremena izvođenja, nezavisno od računala, programskog procjena vremena izvođenja, nezavisno od računala, programskog jezika, prevoditelja (jezika, prevoditelja (compileracompilera))
primjeri:primjeri:a)a) x += yx += y;; 11
b)b) for(i = 1; i <= n; i++) {for(i = 1; i <= n; i++) { nn x += y;x += y;
}}
c)c) for(i = 1; i <= n; i++) {for(i = 1; i <= n; i++) { nn22
for(j = 1; j <= n; j++) {for(j = 1; j <= n; j++) { x += y;x += y; }}}}
Algoritmi i strukture podataka, FER, 2007/08. 14 / 35
Složenost algoritmaSloženost algoritma
treba nam alat kojim ćemo usporediti treba nam alat kojim ćemo usporediti učinkovitostučinkovitost algoritama algoritama u pomoć dolazi u pomoć dolazi matematikamatematika
promatramo kako se ponaša promatramo kako se ponaša vrijeme izvođenjavrijeme izvođenja kad broj kad broj ulaznihulaznih podataka postane podataka postane dovoljno velikdovoljno velik
primjer: inverzija matrice od primjer: inverzija matrice od nn x x nn elemenata traje 10n elemenata traje 10n33 sekundi sekundi inverzija matrice 100 x 100 elemenata traje inverzija matrice 100 x 100 elemenata traje 1 minutu1 minutu inverzija matrice 200 x 200 elemenata trajat će inverzija matrice 200 x 200 elemenata trajat će 8 minuta8 minuta (2 (233=8)=8) kako kako izrazitiizraziti vrijeme izvođenja kao funkciju od vrijeme izvođenja kao funkciju od nn??
– npr. vrijeme izvođenja raste s nnpr. vrijeme izvođenja raste s n33
Algoritmi i strukture podataka, FER, 2007/08. 15 / 35
O O - notacija- notacija
f(n) = O(g(n)) f(n) = O(g(n)) ako postoje dvije pozitivne konstante ako postoje dvije pozitivne konstante cc i i nn00 takve da vrijedi takve da vrijedi f(n)f(n) ccg(n)g(n) za za
sve sve nn nn00 traži se traži se najmanjinajmanji g(n)g(n) za koji to vrijedi za koji to vrijedi
drugim riječima, procjenjuje se trajanje kao red veličine određen temeljem broja podataka drugim riječima, procjenjuje se trajanje kao red veličine određen temeljem broja podataka n, n,
pomnoženo s nekom konstantom pomnoženo s nekom konstantom cc primjeri:primjeri:
nn33+5n+5n22+77n = O(n+77n = O(n33))
Koliki je posao prenijeti Koliki je posao prenijeti 11 stolicu iz dvorane A u dvoranu B? stolicu iz dvorane A u dvoranu B? Koliki je posao prenijeti Koliki je posao prenijeti nn stolica iz A u B? stolica iz A u B? Koliki je posao prenijeti Koliki je posao prenijeti nn stolica iz A u B, s time da se kod donošenja svake nove stolice sve dotada stolica iz A u B, s time da se kod donošenja svake nove stolice sve dotada
donesene stolice u B moraju pomaknuti, pri čemu se za pomicanje stolice u dvorani B ulaže isti trud donesene stolice u B moraju pomaknuti, pri čemu se za pomicanje stolice u dvorani B ulaže isti trud kao i kod prijenosa jedne stolice iz A u B?kao i kod prijenosa jedne stolice iz A u B?
1 + 2 + 3 + 4 + ...+ n = n(n+1)/2 = n1 + 2 + 3 + 4 + ...+ n = n(n+1)/2 = n22/2 + n/2 = O (n/2 + n/2 = O (n22))
Algoritmi i strukture podataka, FER, 2007/08. 16 / 35
O O - notacija- notacija
analizom “a priori” dobije se vrijeme izvođenja algoritma analizom “a priori” dobije se vrijeme izvođenja algoritma O(g(n))O(g(n)) ako je broj izvođenja operacija nekog algoritma ovisan o nekom ulaznom ako je broj izvođenja operacija nekog algoritma ovisan o nekom ulaznom
argumentu argumentu nn oblika oblika polinoma polinoma mm-tog stupnja-tog stupnja, onda je vrijeme izvođenja za taj , onda je vrijeme izvođenja za taj algoritam algoritam O(nO(nmm)) dokaz:dokaz:
Ako je vrijeme izvođenja određeno polinomom:Ako je vrijeme izvođenja određeno polinomom:
A(n) = aA(n) = ammnnmm + ... + a + ... + a11n + an + a00
onda vrijedi:onda vrijedi:
A(n)A(n) aamm nnmm + ... + + ... +aa11n +n +aa00
A(n)A(n) ((aamm + + aam-1m-1// n + ... +n + ... +aa11 //nnm-1m-1++aa00// nnmm)) nnmm
A(n)A(n) ( (aamm + ... ++ ... +aa11 + +aa00)) nnmm , , za svakiza svaki nn11
uz: uz: cc = = aamm + ... ++ ... +aa11 + +aa00 ii nn00 = 1= 1 tvrdnja je dokazanatvrdnja je dokazanaAlgoritmi i strukture podataka, FER, 2007/08. 17 / 35
O O - notacija- notacija
može se kaomože se kao cc koristiti bilo koja konstanta veća od koristiti bilo koja konstanta veća od aamm ako je ako je nn dovoljno velik:dovoljno velik:ako neki algoritam ima ako neki algoritam ima kk odsječaka čija vremena su: odsječaka čija vremena su:
cc11nnm1m1, c, c22nnm2m2,...,c,...,ckknnmkmk
onda je ukupno vrijemeonda je ukupno vrijeme
cc11nnm1 m1 + c+ c22nnm2 m2 +... + c+... + ckknnmkmk
znači da je za taj algoritam vrijeme izvođenja jednako znači da je za taj algoritam vrijeme izvođenja jednako O(nO(nmm)), gdje je, gdje jemm = = maxmax{{mmii}, }, i =i =11,...,k,...,k
Algoritmi i strukture podataka, FER, 2007/08. 18 / 35
O O - notacija- notacija
vrijedi za dovoljno veliki vrijedi za dovoljno veliki nn::O(1) < O(log n) < O(n) < O(nlog n) < O(nO(1) < O(log n) < O(n) < O(nlog n) < O(n22) < O(n) < O(n33) < ...< O(2) < ...< O(2nn) < O(n!)) < O(n!)
O(1)O(1) znači da je vrijeme izvođenja ograničeno znači da je vrijeme izvođenja ograničeno konstantomkonstantom ostale vrijednosti, ostale vrijednosti, do predzadnjedo predzadnje, predstavljaju , predstavljaju polinomnapolinomna vremena vremena
izvođenja algoritmaizvođenja algoritma– svako sljedeće vrijeme izvođenja je veće za red veličinesvako sljedeće vrijeme izvođenja je veće za red veličine
predzadnji izraz predstavlja predzadnji izraz predstavlja eksponencijalnoeksponencijalno vrijeme izvođenja vrijeme izvođenja– ne postoji polinom koji bi ga mogao ograničiti jer za dovoljno veliki ne postoji polinom koji bi ga mogao ograničiti jer za dovoljno veliki nn ova funkcija ova funkcija
premašuje bilo koji polinompremašuje bilo koji polinom algoritmi koji zahtijevaju eksponencijalno vrijeme mogu biti algoritmi koji zahtijevaju eksponencijalno vrijeme mogu biti nerješivinerješivi u u
razumnom vremenu, razumnom vremenu, bez obzira na brzinubez obzira na brzinu slijednog računala slijednog računala
Algoritmi i strukture podataka, FER, 2007/08. 19 / 35
- notacija- notacija
f(n) = f(n) = (g(n)) (g(n)) ako postoje dvije pozitivne konstante ako postoje dvije pozitivne konstante cc i i nn00
takve da vrijedi takve da vrijedi f(n)f(n) cc g(n)g(n) za sveza sve nn > > nn00
traži se traži se najvećinajveći g(n)g(n) za koji to vrijedi za koji to vrijedidonja granica donja granica za vrijeme izvođenja algoritmaza vrijeme izvođenja algoritmaniti u kojem slučaju izvođenje ne može biti kraće od niti u kojem slučaju izvođenje ne može biti kraće od
– npr. množenje dvije matrice od npr. množenje dvije matrice od nn x x nn elemenata uvijek traje elemenata uvijek traje
(n(n22) = O (n) = O (n22))– zbrajanje zbrajanje nn brojeva brojeva uvijekuvijek traje traje (n) = O (n)(n) = O (n)– pronalaženjepronalaženje nekog broja među nekog broja među nn nesortiranih brojeva nesortiranih brojeva (1) (1) O (n) O (n)
Algoritmi i strukture podataka, FER, 2007/08. 20 / 35
- notacija- notacija
f(n) = f(n) = (g(n)) (g(n)) ako postoje pozitivne konstante ako postoje pozitivne konstante cc11,, cc22 i i nn00 takve da takve da
vrijedi vrijedi cc11g(n)g(n) f(n)f(n) cc22g(n)g(n) za sve za sve nn > > nn00
f f ii g g rastu jednako brzo za velike rastu jednako brzo za velike nn omjer omjer ff i i gg je između je između cc11 i i cc22
drugim riječima, jednaka su trajanja za najbolji i za najgori slučajdrugim riječima, jednaka su trajanja za najbolji i za najgori slučaj
primjer:primjer: Treba po abecedi sortirati Treba po abecedi sortirati nn kontrolnih zadaća tako da se prvo pronađe prvi kontrolnih zadaća tako da se prvo pronađe prvi
po abecedi, zatim se u preostalima traži prvi itd.po abecedi, zatim se u preostalima traži prvi itd.– postupak jednako traje bez obzira na eventualnu uređenost:postupak jednako traje bez obzira na eventualnu uređenost:
O(nO(n22) = ) = (n(n22) = ) = (n (n22) )
Algoritmi i strukture podataka, FER, 2007/08. 21 / 35
Asimptotsko vrijeme izvođenjaAsimptotsko vrijeme izvođenja
f(n) ~ g(n) f(n) ~ g(n) ako je ako je
čita se: "čita se: "f(n)f(n) je asimptotski jednako funkciji je asimptotski jednako funkciji g(n)g(n)”” precizniji je precizniji je opis vremena izvođenjaopis vremena izvođenja nego nego OO-notacijom-notacijom
zna se i red veličine vodećeg člana i konstanta koja ga množizna se i red veličine vodećeg člana i konstanta koja ga množi ako je, primjerice:ako je, primjerice:
f(n)f(n) = = aakknnkk + ... + + ... + aa00
tada je:tada je:
f(n) =f(n) = O(nO(nkk)) ii f(n) ~f(n) ~ aakknnkk
primjeri: primjeri: 3*23*2xx+7 logx+x ~ +7 logx+x ~ 3*23*2xx
za primjer sortiranja s prethodnog slajda (sortiranje zadaća):za primjer sortiranja s prethodnog slajda (sortiranje zadaća):– zbog linearnog smanjivanja preostalog skupa u kojem se traži prvi, asimptotsko trajanje je:zbog linearnog smanjivanja preostalog skupa u kojem se traži prvi, asimptotsko trajanje je:
~~ nn22/2/2
1)(
)(lim
ng
nf
n
Algoritmi i strukture podataka, FER, 2007/08. 22 / 35
nn
i = n(n+1)/2 = O (ni = n(n+1)/2 = O (n22))i=1i=1
Asimptotsko vrijeme izvođenjaAsimptotsko vrijeme izvođenja
u izračunu učestalosti obavljanja nekih naredbi često se javljaju u izračunu učestalosti obavljanja nekih naredbi često se javljaju sume oblika:sume oblika:
nn22/2/2
for (i = 1; i <= n; i++)for (i = 1; i <= n; i++)
for (j = 0; j < i; i++) {...}for (j = 0; j < i; i++) {...}
Algoritmi i strukture podataka, FER, 2007/08. 23 / 35
Razne složenosti Razne složenosti u logaritamskom mjeriluu logaritamskom mjerilu
Algoritmi i strukture podataka, FER, 2007/08. 24 / 35
OO-notacija - primjeri-notacija - primjeri
IspisiTrazi.cIspisiTrazi.c ispisiispisi
petlja se uvijek obavi petlja se uvijek obavi nn puta puta (n) (n) ,, O(n) O(n) ,, (n) (n)
trazitrazi vrijeme izvođenja je vrijeme izvođenja je O(n)O(n) donja granica je donja granica je ( (11))
– u najboljem slučaju u prvom koraku nađe traženi član poljau najboljem slučaju u prvom koraku nađe traženi član polja– u najgorem slučaju mora pregledati sve članove poljau najgorem slučaju mora pregledati sve članove polja
Algoritmi i strukture podataka, FER, 2007/08. 25 / 35
Analiza “a posteriori”Analiza “a posteriori”
stvarno vrijeme potrebno za izvođenje algoritma na konkretnom stvarno vrijeme potrebno za izvođenje algoritma na konkretnom računaluračunalu
#include <sys\timeb.h> // gdje je deklarirano
struct timeb {
time_t time; // broj sekundi od ponoći, 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, 2007/08. 26 / 35
Analiza “a posteriori”Analiza “a posteriori”
u programu:u programu:
Universal Time Co-ordinated (UTC) novi naziv za Greenwich Mean Time (GMT)
struct timeb vrijeme1, vrijeme2; long trajanjems;
ftime (&vrijeme1);
...
ftime (&vrijeme2);
trajanjems = 1000 * (vrijeme2.time - vrijeme1.time) +
vrijeme2.millitm - vrijeme1.millitm;
Algoritmi i strukture podataka, FER, 2007/08. 27 / 35
Zadaci za vježbuZadaci za vježbu
Za algoritamZa algoritam
odrediti:odrediti:a) a) apriornoapriorno vrijeme izvođenja vrijeme izvođenjab) odrediti b) odrediti asimptotskuasimptotsku ocjenu za ocjenu za prosječnoprosječno vrijeme izvođenja vrijeme izvođenjac) c) asimptotsku asimptotsku ocjenuocjenu vremena izvođenja za vremena izvođenja za najboljinajbolji slučaj slučajd) d) asimptotsku asimptotsku ocjenuocjenu vremena izvođenja za vremena izvođenja za najgorinajgori slučaj slučaje) za kakvu vrijednost varijable b nastupa e) za kakvu vrijednost varijable b nastupa najgorinajgori slučaj? slučaj?
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (a[i] == b) {if (a[i] == b) {
printf ("i = %d\n", i);printf ("i = %d\n", i);
break;break;
}}
}}
Algoritmi i strukture podataka, FER, 2007/08. 28 / 35
Zadaci za vježbuZadaci za vježbu
Napisati funkciju koja računa zbroj znamenki zadanog prirodnog Napisati funkciju koja računa zbroj znamenki zadanog prirodnog broja N. Kolika je složenost funkcije?broja N. Kolika je složenost funkcije?
int zbrojZnamenki (int N) {
int zbroj = 0;
while (N > 0) {
zbroj += N % 10;
N /= 10;
}
return zbroj;
}
Algoritmi i strukture podataka, FER, 2007/08. 29 / 35
Zadaci za vježbuZadaci za vježbu
Stvarno trajanje O ~
5n5n22+7n+4+7n+4 nn22 5n5n22
3n3n22+700n+2+700n+2 nn22 3n3n22
nn22+7logn+40+7logn+40 nn22 nn22
0,1*20,1*2nn+100n+100n22 22nn 0,1*20,1*2nn
(2n+1)(2n+1)22 nn22 4n4n22
6nlogn + 10n6nlogn + 10n nlognnlogn 6nlogn6nlogn
8logn + 10008logn + 1000 lognlogn 8logn8logn
3n! + 23n! + 2nn + n + n1010 n!n! 3n!3n!
3*53*5nn + 6*2 + 6*2nn + n + n100100 55nn 3*53*5nn
Algoritmi i strukture podataka, FER, 2007/08. 30 / 35
Primjeri ovisnosti trajanja o broju podataka i složenostiPrimjeri ovisnosti trajanja o broju podataka i složenosti
n T(n) = n T(n) = n lg(n) T(n) = n2 T(n) = n3 T(n) = 2n
5 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, 2007/08. 31 / 35
Što se može riješiti u zadanom vremenuŠto se može riješiti u zadanom vremenu
Vremenska složenost
Veličina najvećeg slučaja problema koji se može riješiti za 1 sat
danas raspoloživim računalom
100 puta bržim računalom
1000 puta bržim računalom
n 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, 2007/08. 32 / 35
Relativni udio komponenti uRelativni udio komponenti u izrazu:izrazu: n4 + n3log n + 2 (n-1) O ( 2n )
n n4 n3 log n 2(n-1)
1 1 0 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, 2007/08. 33 / 35
Utjecaj veličine konstante Utjecaj veličine konstante K = 1 000 000
n K n K n2 K n4 K 2n
1 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, 2007/08. 34 / 35
Što znači “dovoljno veliki n”, tj. n > nŠto znači “dovoljno veliki n”, tj. n > n00
Izvor: Izvor: Cormen,Cormen, Leiserson & Rivest: Leiserson & Rivest: Introduction to algorithmsIntroduction to algorithms, 2/e,MIT Press, 2001, 2/e,MIT Press, 2001
Algoritmi i strukture podataka, FER, 2007/08. 35 / 35