SVEUČILIŠTE/UNIVERZITET „VITEZ“ U VITEZU FAKULTET POSLOVNE INFORMATIKE STUDIJ PRVOG CIKLUSA, PRVA GODINA STUDIJA SMJER: INFORMACIJSKE TEHNOLOGIJE
KLASIFIKACIJA ALGORITAMA SEMINARSKI RAD
Travnik, 18.01.2015. godine
SVEUČILIŠTE/UNIVERZITET „VITEZ“ U VITEZU FAKULTET POSLOVNE INFORMATIKE STUDIJ PRVOG CIKLUSA, PRVA GODINA STUDIJA SMJER: INFORMACIJSKE TEHNOLOGIJE
KLASIFIKACIJA ALGORITAMA SEMINARSKI RAD
IZJAVA: Ja, Karić Haris, student Sveučilišta/Univerziteta „Vitez“ u Vitezu, indeks broj: 033515/DIT, odgovorno i uz moralnu i akademsku odgovornost izjavljujem da sam ovaj rad izradio potpuno samostalno uz korištenje citirane literature i pomoć profesora, odnosno asistenta.
Potpis studenta: ______________
STUDENT: Haris Karić PREDMET: Strukture podataka i algoritmi PROFESOR: Prof. dr. sc. Lazo Roljić ASISTENT: Mr.sc. Dragan Mlakić
SADRŽAJ 1.
UVOD..................................................................................................................................1 1.1 PROBLEM, PREDMET I OBJEKT ISTRAŽIVANjA....................................................1 1.2 RADNA HIPOTEZA I POMOĆNE HIPOTEZE.............................................................2 1.3 NAUČNE METODE.......................................................................................................2 1.4 STRUKTURA RADA.....................................................................................................3
2.0 ALGORITMI OPĆENITO....................................................................................................4 2.1 NASTANAK I KRATKA HISTORIJA............................................................................6 3.0 KLASIFIKACIJA ALGORITAMA......................................................................................8 3.1 KLASIFIKACIJA.............................................................................................................8 3.2 PODJELA PREMA IMPLEMENTACIJI........................................................................9 3.3 PODJELA PREMA PARADIGMI PROGRAMIRANJA...............................................10 4. ZAKLJUČAK.......................................................................................................................15 5. LITERATURA......................................................................................................................16
4
1. UVOD 1.1 PROBLEM, PREDMET I OBJEKT ISTRAŽIVANjA
Opšteprihvaćena definicija algoritma ne postoji,međutim u literaturi najčešće nalazimo da je algoritam konačan slijed dobro definiranih naredbi za ostvarenje zadatka, koji će za dano početno stanje terminirati u definiranom konačnom stanju. Bolje objašnjenje riječi algoritam bi bilo da je algoritam konačni niz instrukcija, od kojih svaka ima jasno značenje i može biti izvršena u konačnom vremenu. Iste instrukcije mogu se izvršiti više puta, pod pretpostavkom da same instrukcije ukazuju na ponavljanje. Ipak, zahtijevamo da, za bilo koje vrijednosti ulaznih podataka, algoritam završava nakon konačnog broja ponavljanja.
1.2 SVRHA I CILjEVI ISTRAŽIVANjA
Algoritam je korak po korak procedura osmišljena kako bi izvršila operaciju, a koji (poput karte ili dijagrama toka) će dovesti do traženog rezultata, ako su pravilno izvršeni. Algoritmi imaju određen početak i definitivan kraj i konačan broj koraka. Nekoliko kratkih algoritama može se kombinirati za obavljanje složenih zadataka kao što je pisanje računalnog programa. Recept za kuhanje nekog jela, dijagnoza, rješavanje problema, su neki uobičajeni primjeri jednostavnih algoritama pogodnih za rješavanje strukturiranih problema (primjenom sekvencijalne analize),međutim, neprikladni su za probleme u kojima su potrebni vrijednosni sudovi. Svrha ovog rada je nabrojati, klasificirati alogoritme prema implementaciji, paradigmi programiranja , području istrazivanja i slozenosti algoritma.
5
1.2 RADNA HIPOTEZA I POMOĆNE HIPOTEZE Na osnovnu predmeta i problema istraživanja, moguće je postaviti glavnu (radnu) hipotezu:
“Algoritme možemo klasificirati prema implementaciji, paradigmi programiranja , području istrazivanja i složenosti algoritma. ”
1.3 NAUČNE METODE U ovom seminarskom radu koristit ću slijedeće naučne (stručne) metode:
metoda analize i sinteze metoda dokazivanja metoda deskripcije metoda modeliranja
1.4 STRUKTURA RADA
6
Struktura seminarskog rada je usklađena sa Uputstvom za pisanje seminarskog rada na prvom ciklusu studija na Sveučilištu/Univerzitetu “Vitez” kao i sa temom seminarskog rada. Seminarski rad sadrži pet poglavlja. Prvo poglavlje je Uvod, a koji se sastoji od pet potpoglavlja, a to su:
Problem, predmet i objekt istraživanja Svrha i ciljevi istraživanja Radna hipoteza i pomoćne hipoteze Naučne metode Struktura rada
Drugo poglavlje je Algoritmi općenito i tu nalazimo najcesše opise pojma algoritam,te kratku historiju nastanka algoritama.
U trećem poglavlju nabrojana je Klasifikacija algoritama i objašnjen je svaki pojam št je bolje moguće.
Četvrto poglavlje je Zaključak u kojem je sublimirano sve ono što je urađeno.
I peto poglavlje je Literatura koju sam koristio u ovom radu.
7
2.0 ALGORITMI OPĆENITO Algoritam je opis za rješavanje nekog problema. Riječ dolazi iz prezimena persijskog matematičara Al Horezmija. Algoritam je bio izraz koji opisuje način računanja decimalnim brojevima uvedenim oko 1600. godine u Evropi. Algoritmičarima su se ranije zvali oni matematičari koji ne operišu simbolima množina predstavljenim na abakusu, nego jednim (indijskim ili arapskim) sistemom znakova za brojeve (od 16. vijeka raširenim u Evropi). U novije vreme, algoritam je pojam koji se gotovo isključivo vezuje za informatiku i, mada ne postoji jedinstvena opšteprihvaćena definicija, podrazumeva se da je u pitanju nekako opisana procedura za obavljanje posla. U tu svrhu se definišu algoritamski jezici. To su formalizovani jezici kojima se relativno lako opisuju postupci rešavanja problema predstavljenih algoritmom, takvi su naprimer programski jezici Algol, Fortran i Kobol. U matematičkoj logici je algoritam generalizovan pojam i odnosi se na postupak za postupno pretvaranje nizova znakova. Pojam algoritma pripada osnovnim pojmovima matematike. Smisao riječi (ne definicija pojma) je da je algoritam tačan propis o izvršenju, određenim redosljedom, nekog niza operacija za rješavanje svih zadataka zadatog tipa. Propis u ovoj formulaciji predstavlja konačni skup pravila, tj. opis postupka kojim se izvršavaju operacije. Pojedina operacija algoritma naziva se algoritamski korak, a određeni redosljed podrazumjeva preciznu informaciju o tome koji je algoritamski korak prvi, koji je poslednji (kojim se algoritam završava), i koji algoritamski korak sledi za posmatranim.. Redosled izvršavanje algoritamskih koraka pri jednom izvršavanju algoritma određuje njegovu algoritamsku strukturu. Algoritamska struktura može biti linijska, kada se posle jednog algoritamskog koraka može izvršavati samo algoritamski korak koji se još nije izvršavao pri tom izvršavanju algoritma, i ciklična, kada se posle jednog algoritamskog koraka moˇze izvršavati i algoritamski korak koji se već izvršavao pri tom izvršavanju algoritma. U linijskoj algoritamskoj strukturi, dakle, svaki algoritamski korak izvršava se najviše jedanput pri jednom izvršavanju algoritma, dok se kod ciklične algoritamske strukture jedan algoritamski korak može izvršavati i više puta pri jednom izvršavanju algoritma. Iako neformalna, prethodna formulacija odražava pojam algoritma koji se stihijski oblikovao tokom vijekova. Navedimo ovde i definiciju algoritma prema Webster’s Ninth New Collegiate rječniku: algoritam je procedura za rešavanje nekog matematičkog problema (kao što je nalaženje najvećeg zajedničkog delioca) u konačnom broju koraka, koja često uključuje ponavljanje 8
neke od operacija; ili šire, korak po korak određena procedura za rješavanje problema ili dolaženje do nekog cilja. Sama rječ algoritam dolazi od imena srednjevekovnog arapskog matematičara Al Horezmi, koji je još u IX veku formulisao pravila po kojima se izvršavaju četiri aritmetičke operacije u dekadnom sistemu. To su prvi i najjednostavniji algoritmi. U razumijevanju pojma algoritma potrebno je jasno razlikovati konkretni (pojedinačni) zadatak od skupa svih zadataka jednog, istog tipa. Na primjer, traženje rešenja algebarske jednačine x2 − 4 = 0 je konkretni zadatak čije je rešenje skup brojeva {−2, 2}, kao što je i sabiranje dva zadata cela dekadna broja, npr. 1256 i 157989, konkretni zadatak sa konkretnim rešenjem 159245. S druge strane, skup svih zadataka istog tipa formuliše se kao problem. Na primer, naći postupak koji omogućuje rešavanje proizvoljne kvadratne jednačine, ili izračunavanje zbira bilo koja dva cela broja u dekadnom sistemu. Za problem je karakteristično prisustvo parametara (promenljivih) kojima se postiže konačna formulacija moguće beskonačnog skupa zadataka posmatranog tipa. Zato je rešenje problema jedan zajednički propis (metoda,algoritam) koji omogućuje rešavanje bilo kog konkretnog zadatka datog problema, čim su poznate konkretne vrednosti promenljivih za taj zadatak. Konkretne vrednosti promenljivih nazivaju se ulaznim podacima algoritma, dok se rešenje konkretnog zadatka za zadate ulazne podatke naziva rezultatom rada algoritma. Za rešavanje jednog problema moguće je, u opštem slučaju, primeniti veći broj različitih metoda, i pritom doći do različitih algoritama, različitih po svojoj složenosti, ali i po svojoj efikasnosti. Izgradnja algoritma, kada je moguća, povezana je, u opštem slučaju, sa suptilnim i složenim rasuđivanjem koje zahtjeva kreativnost, visoku stručnost i veliku dovitljivost. Osim što treba da bude korektan (da rešava problem za koji je izgrađen), dobar algoritam treba da bude i efikasan, tj. da izvršavanjem što manjeg broja, što jednostavnijih operacija za dati ulaz proizvede rešenje zadatka. Zato se proces izgradnje algoritma može podjeliti u četiri faze: konstrukcija, dokaz korektnosti, analiza efikasnosti, implementacija(u programskom jeziku). Problemi koji mogu da nastanu u svakoj od ovih faza utiču na modifikaciju i ponovno izvršenje prethodnih faza. Konstrukcija i dokaz korektnosti mogu se objediniti u proces izvođenja algoritma iz formalne specifikacije, pri kojem se izgrađuje algoritam koji garantovano zadovoljava specifikaciju,tj. garantovano korektan algoritam. S druge strane, izvršavanje algoritma, tj. proces rješavanja pripadnih konkretnih zadataka, od trenutka kada je algoritam već izgrađen, potpuno je ”automatski”, u smislu da se od onoga ko tu radnju izvodi (čovjek ili mašina) zahtjeva samo
9
da je u stanju da obavlja izračunavanje i upravljanje, tj. da izvršava elementarne operacije od kojih se proces sastoji, i da se tačno pridržava postavljenog propisa (algoritma).1 Procesi koji teku po strogo određenom algoritmu susreću se prije svega u matematici, ali i u drugim područjima ljudske djelatnosti. Algoritmi se mogu zapisati u različitim notacijama – prirodnim jezikom, dijagramima toka, pseudojezikom, programskim jezikom, itd.
2.1 NASTANAK I KRATKA HISTORIJA
Algoritam je u matematiku uveo iranski matematičar Muhamed Al Horezmi. Napisao je knjigu Al Horezmi o indijskoj veštini računanja gdje u islamsku matematiku uvodi indijske cifre i decimalni brojni sistem. Ova knjiga biva kasnije prevedena na latinski kao Algoritmi de numero indorum. Od lošeg latinskog prevoda njegovog prezimena i potiče riječ algoritam, i dugo je označavala postupak za račun sa decimalnim brojnim sistemom (i indijskim odnosno, kako se kasnije pričalo, arapskim ciframa). Riječ "algoritam" dolazi od latinskog prijevoda imena iranskog matematičara Al-Hvarizmija koji se bavio trigonometrijom, astronomijom, zemljopisom, kartografijom, a smatra se ocem algebre jer je definirao osnovna pravila rješavanja linearnih i kvadratnih jednadžbi. Njegovi radovi su osnova razvoja mnogih matematičkih i prirodnih disciplina, među njima i računarstva..2
Prvi zapis algoritma prilagođen računalu pripada Adi Byron iz 1842 (pa se zbog ovoga smatra prvom programerkom), a računao je Bernoullijeve brojeve. Računalo za koje je napisan je bio analitički stroj, koji je zamislio, ali nikad u potpunosti proveo u djelo, Englez Charles Babbage. Analitički stroj je trebalo biti prvo programabilno računalo, sastavljeno u potpunosti od mehaničkih dijelova. Mehanički dijelovi i fizička glomaznost su glavni razlozi zašto nikad nije završen. Nedostatak čvrste matematičke forme pravio je određene probleme matematičarima i logičarima 19. i 20. stoljeća prilikom analiziranja algoritama. Definicija Turingovog stroja je 1 http://poincare.matf.bg.ac.rs/~gordana/programiranjeI/Finale.pdf (20.01.2015) 2 https://sh.wikipedia.org/wiki/Algoritam (20.01.2016) 10
riješila većinu tih problema, a predstavio ju je engleski matematičar Alan Turing. Turingov stroj omogućava izvođenje većine današnjih algoritama (uz određene prilagodbe), a dodatno olakšava i analizu složenosti zbog svoje jednostavnosti izvedbe (glava, funkcija pomaka glave te beskonačna ili jako duga traka za čitanje/pisanje) Primjenom Turingovog stroja kao idealnog modela definirani su mnogi moderni problemi vezani uz analizu algoritama, kao npr. Turingov problem zaustavljanja ili klase NP-teških i NP-potpunih problema.3
3 https://hr.wikipedia.org/wiki/Algoritam (20.01.2016) 11
3.0 KLASIFIKACIJA ALGORITAMA
Algoritam je ključni pojam u računarskoj obradi podataka jer je računarski program izvjestan algoritam koji računaru objašnjava koje korake (naredbe) i kojim redoslijedom treba da obavlja. Tako se algoritmom može smatrati bilo koji niz instrukcija koja se može uraditi na Tjuring-kompletnoj mašini. Tipično, kada se uz algoritam vezuje pojam obrade podataka, podrazumijeva se da se podatak prvo učita preko ulazne jedinice a ispisuje se na izlaznu jedinicu ili čuva za kasniju upotrebu. Sačuvani podaci se smatraju dijelom unutrašnjeg stanja sistema. Za svaki računarski posao algoritam mora biti jasno definisan; naveden na način koji podrazumjeva sve moguće situacije koje se mogu pojaviti. Znači, svaki uslovni korak se mora sistematično obraditi, slučaj po slučaj; uslov za svaki slučaj mora biti jasan i izračunljiv. Pošto je algoritam jasan niz preciznih koraka, redoslijed izračunavanja je uvijek kritičan za funkcionisanje algoritma. Pretpostavlja se da su instrukcije navedene jasno, da počinju od vrha i da teku do dna. Ova ideja se formalno opisuje kontrolom toka.
3.1 KLASIFIKACIJA
Postoji više načina klasifikacija algoritama, a metodologija klasifikacije je tema mnogih rasprava. Najčešća klasifikacija koja se može pronaći u literaturi je prema:
Implementaciji Paradigmi programiranja/dizajna Području istraživanja Složenosti
12
3.2 PODJELA PREMA IMPLEMENTACIJI Prema načinu implementacije algoritmi se mogu podijeliti na:
Rekurzivni ili iterativni algoritam je takav algoritam koji poziva (referencira) sam sebe uzastopno sve dok ne ne ispuni uslov prestanka, ujedno ova metoda se najčešće koristi u funkcionalnom programiranju. Iterativni algoritmi koriste repetitivne(ponavljajuće) strukture kao što su petlje, a ponekad i dodatne strukture podataka kao što su Stacks (hrpa) da bi riješili zadane probleme. Neki problemi su naravno prikladniji za provedbu jednog ili drugog algoritma.
Logični Algoritam se može promatrati kao kontrolirana logička dedukcija. Ovaj pojam može se izraziti kao:Algoritam = logika + kontrola. Logika komponenta izražava aksiome koji se mogu koristiti za izračunavanje i kontrola komponenta određuje način na koji se primjenjuje na odbitak aksioma. To je osnova za logiku programerske paradigme. U čistim logičkim programskim jezicima upravljačka komponenta je fiksna i algoritam je određen samo logičkom komponentom. Mana ovog pristupa je elegantna semantika: promjena aksioma ima dobro definiranu promjene u algoritmu.
Serijski, paralelni ili distribuirani
Kada se razgovara o algoritmima , obično je to pod predpostavkom da računari izvršavaju jednu po jednu instrukciju algoritma odnosno programa. Ova računala nazivamo serijska računala. Algoritam namjenjen takvom okruženju naziva se serijski algoritam za razliku od paralelnih ili distribuiranih algoritama. Paralelni algoritmi koriste prednost kompjuterski arhitekture gdje nekoliko procesora može raditi na problemu u isto vrijeme, dok distribuirani algoritmi koriste više uređaja povezanih mrežom. Paralelni ili distribuirani algoritmi dijele probleme na vise simetričnih ili asimetričnih podproblema i dolaze do rezultata zajedno. Potrošnja resursa u ovakvim algoritmima ne otpada samo na potrošnju procesora odnosno za svaki procesor, već i na komunikaciju između samih procesora. Neki algoritmi sortiranja se mogu paralelizirati veoma učinkovito, ali njihova komunikacija može biti 'skuplja' od rada procesora. Iterativni algoritmi su obično paralelni,(paraleliziraju se). Neki problemi nemaju paralelnih algoritama.
13
Deterministički ili ne-deterministički
Deterministički algoritmi rješavaju problem s tačnim rješenjem na svakom koraku algoritma, dok ne-deterministički algoritmi rješavaju problem nagađanjem, tačnost nagađana se moze poboljšati kroz upotrebu heruistike.
Precizni ili približni
Za razliku od većine algoritama koji mogu naći tačno rješenje, približni algoritmi traže vrijednost koja je blizu pravog rješenja. Aproksimativni( približni) algoritmi se mogu koristiti i kao deterministički i kao nasumični. Ovakvi algoritmi imaj praktičnu vrijednost za mnoge veće probleme.
Kvantni algoritam
Radi na stvarnom modelu kvantnog računanja. Izraz se obično koristi za one algoritme koji se sami po sebi čine kvantni, ili koriste neku bitnu osobinu kvantnog računanja kao što su kvantna superpozicija ili kvantna isprepletenost.
3.3 PODJELA PREMA PARADIGMI PROGRAMIRANJA Drugi način klasificiranja algoritama jeste prema njihovoj metodologiji dizajna ili paradigme. Postoji određen broj paradigmi, svaki različit od drugog. Nadalje, svaka od tih kategorija uključuje mnoge različit vrste algoritma. Neke najčešće paradigme su:
Brute-force(brutalni)metod ili iscrpna pretraga
Ovo je navina metoda pokušavaja svakog mogućeg rješena kako bi se pronašlo koje najbolje odgovara. Iako zvuči naivno ova metoda je veoma efektivna, ali nije efikasna pošto zahtjeva dosta vremena i računalnih resursa za probavanje svake moguće kombinacije. Najčešće se koristi u softverima za pogađanje šifara za otključavanje fajlova, ili za pogađanje korisničke šifre za neki web servis.
14
Podjeli pa vladaj Algoritmi smanjuju stepen složenosti problema podjelom na dva ili više manjih problema od iste vrste (obično rekurzivno), dok od problema ne ostane toliko mali dio da se može jednostavno riješiti. Jednostavan primjer podjeli pa vladaj se zove smanji pa osvoji algoritam, koji rješava identičan manji podproblem i koristi rješenje ovog podproblema kako bi rješio veći problem.
Pretraga i enumeracija
Mnogi problemi (kao što je igranje šaha) se mogu modelirati kao problemi na grafovima. Za istraživanje pomoću grafa algoritam određuje pravila za kretanje po grafu i koristan je za ovakve tipove problema. Ova kategorija svakako uključuje pretraživanje algoritma, grananje ,ograđivanje, popisivanje i backtracking(vraćanje).
Slučajni algoritmi
Ovaj tip algoritma pravi neke odluke slučajno ( ili pseudo-slučajno). Mogu biti veoma korisni kod pronalaženja približnih rješenja za probleme gdje pronalaženje potpuno tačnog rješenja može biti veoma nepraktično. Za neke od ovih tipova problema ,poznato je da najbrže aproksimacije moraju uključivati neke nasumičnosti.
Smanjenje složenosti
Ova tehnika uključuje rješavanje težih problema pretvarajući ga u poznatiji za koji imamo asimptotske optimalne algoritme. Cilj je pronaći reducirajući algoritam čija složenost nije uvjetovana rezultirajućim reduciranim algoritmom.
15
Problemi optimizacije
Za probleme optimizacije postoji više specifičnih klasifikacija algoritama; algoritmi za ovakve probleme padaju u jednu ili vise opštih grupa opisanih u prethodnom tekstu, ali kaou i u jednu od sljedećih grupa:
Linearno programiranje
Problem se rješava korišćenjem linearnog programiranja kada postoji više linearnih nejednačina a zadatak je naći maksimum (ili minimum) po nekom kriterijumu. Mnogi realni problemi (kao što je maksimiziranje protoka u usmjerenom grafu) mogu biti iskazani na ovaj način, a onda rešeni nekim 'generičkim' algoritmom, kao što je Simpleks algoritam.
Dinamičko programiranje
Kada problem pokazuje optimalnu podstrukturu, u smislu da se optimalno rešenje problema može konstruisati iz optimalnog rešenja potproblema, i preklapanjem potproblema, što znači da se isti potproblem koristi za rješavanje više različitih primjera problema, možemo riješiti brzo koristeći dinamičko programiranje, pristup koji izbjegava ponovno izračunavanje rešenja koja su već izračunata. Na primjer, najkraći put do cilja iz čvora težinskog grafa može biti nađen koristeći najkraći put do cilja od svih obližnjih čvorova.
Pohlepni algoritam
Algoritam lakomosti je sličan dinamičkom programiranju, ali je razlika u tome što rešenja potproblema ne moraju biti poznata u svakom trenutku. Stoga, pri traženju rešenja je moguće napraviti i 'lakom' izbor onoga što izgleda najbolje u tom trenutku.
16
Heuristički algoritmi i algoritmi slučajnosti ne odgovaraju u potpunosti strogoj definiciji algoritma Algoritmi slučajnosti prave u nekim situacijama slučajan (ili pseudo slučajan) izbor; za neke probleme se stvarno može dokazati da se do najbržeg rešenja može doći samo uvođenjem izvesnog stepena slučajnosti. Genetički algoritam pokušava da nađe rešenje problema imitirajući biološki evolucioni proces, koji u nizu slučajnih mutacija daje uzastopne generacije 'rešenja'. Tako računar simulira razmnožavanje i 'preživljavanje najprilagođenijih'. U genetičko programiranje je ovaj pristup proširen na algoritme. Heuristički algoritmi su takvi algoritmi čija je osnovna namjena nalaženje optimalnog rešenja, u stvari približnog rešenja, jer vreme ili memorijski prostor za izvršavanje algoritma za nalaženje tačnog najboljeg rešenja nije praktično moguće. Primjer algoritama koji su ovakvog tipa su za lokalno pretraživanje, tabu pretraživanje ili algoritam simuliranog otpuštanja, vrsta heurističkog algoritma slučajnosti koji varira rešenje problema u slučajnim iznosima. Naziv simulacija otpuštanja aludira na metalurški proces suprotan kaljenju kada se metal greje pa sporo hladi radi otklanjanja defekta u materijalu. Namera slučajnog variranja je traženje što bližeg rešenja opštem optimalnom rešenju, a ne jednostavno lokalno optimalno rešenje. Ideja je da se amplituda slučajne veličine smanjuje kako se približavamo rešenju.
Podjela prema području istraživanja
Svako polje nauke ima svoje probleme i potrebne su joj efikasni algoritmi. Srodni problemi se često proučavaju zajedno. Neki primjeri su algoritmi za pretragu, sortiranje, spajanje, numeričku analizu, grafove, stringove, računarsku geometriju, kombinatoriku, mašinsko učenje, kriptografiju, kompresiju podataka i tehnike parsiranja. Oblasti imaju težnju da se preklapaju jedni sa drugima, a napredak algoritma u jednom polju može da unapredi algoritme u drugim, ponekad totalno nesrodnim, oblastima. Na primer, dinamičko programiranje je prvobitno namenjeno za optimizaciju potrošnju resursa u industriji, ali se danas koristi u rešavanje širokog polja problema u mnogim poljima.
17
Podela prema složenosti U teoriji složenosti, što nije isto što i teorija izračunljivosti, se izučava problematika složenosti, kompleksnosti, algoritma, u smislu zauzimanja resursa, a to su prostor (količina zauzete memorije) i vreme (količina potrošenog vremena procesora). Složenost je funkcija veličine ulaznih podataka. Algoritmi se prave za rešenje opšteg problema, bez obzira na veličinu ulaza, ali sa druge strane razne ulazne veličine izazivaju da programi troše razne količine resursa. Vremenska složenost algoritma se iskazuje kao broj elementarnih koraka za obavljanje algoritma, što je zavisno od veličine ulaza, a koja može biti izražena u bitovima ili nekim sličnim merilom. Ako kažemo da je algoritam (A) uređivanja niza od n elemenata problem vremenske složenosti n², znači da dvostruko veći broj elemenata zahteva četiri puta više vremena za uređivanje. Ako je, pak drugi algoritam (B) malo pažljivije napisan i brži je dvostruko, on će raditi dvostruko brže za bilo koju veličinu niza. Međutim, ako se programer namuči i osmisli suštinski drugačiji algoritam (C) za uređivanje, on stvarno može biti reda složenosti n·log(n). Algoritmi (A) i (B) su iste složenosti, jer se u notaciji sa velikim O obeležavaju sa O(n²), a u govoru se zovu 'algoritmi kvadratne složenosti', dok je algoritam (C) 'algoritam složenosti n·log(n)'. Zaključak: algoritam (C) je najbolji sa stanovišta korišćenja vremena za velike setove ulaznih podataka. Prostorna složenost se na isti način odnosi na funkciju zavisnosti zauzimanja memorijskog prostora u zavisnosti od veličine ulaza. Dešava se da je pronalaženje algoritma manje vremenske složenosti vezano sa povećanjem prostorne složenosti. Obično se algoritmi dele na one logaritamske složenosti, linearne, kvadratne i uopšteno polinomijalne složenosti, kao i one najzahtevnije, eksponencijalne složenosti.4
4 https://en.wikipedia.org/wiki/Algorithm#Classification (21.01.2016) 18
4. ZAKLJUČAK Kako je postavljena radna hipoteza koja glasi: “Algoritme možemo klasificirati prema implementaciji, paradigmi programiranja , području istrazivanja i složenosti algoritma. ”
Smatram da je u potpunosti i dokazana, mada kako je algoritam opši pojam i koristi u mnogo naučnih disciplina, iako je najzastupljeniji u informatici preciznije u razvijanu novog softvera( programiranju) u ovom radu nisu navedene sve klasifikacije posto se mogu uzimati razliciti kriteriji za klasifikaciju. Takođe za svaku metodu algoritma moze se dati primjer u nekom programskom jeziku ili pseudokodu ili daiagramu, ali zbog opsirnosti rada to nije urađeno. Navedene su najčešće klasifikacije koje se mogu pronaći u literaturi.
19
5. LITERATURA
1. 2. 3. 4.
https://en.wikipedia.org/wiki/Algorithm#Classification (21.01.2016) https://hr.wikipedia.org/wiki/Algoritam(21.01.2016 ) http://poincare.matf.bg.ac.rs/~gordana/programiranjeI/Finale.pdf (20.01.2015) https://sh.wikipedia.org/wiki/Algoritam (20.01.2016)
20