You are on page 1of 17

NAZIV ŠKOLE

PREDMET

NAZIV SEMINARSKOG RADA

Mentor: Student:

Mesec, godina
Sadržaj
1. UVOD ...................................................................................................................................... 1
2. PRIMENA, KARAKTERISTIKE I ZNAČAJ ALGORITAMA ............................................ 2
3. ELEMENTI ALGORITMA .................................................................................................... 4
4. ALGORITMI I STRUKTURE PODATAKA ......................................................................... 6
4.1. Linijska algoritamska struktura............................................................................................ 6
4.2. Razgranata algoritamska struktura ....................................................................................... 7
4.3. Ciklična algoritamska struktura ........................................................................................... 7
5. SVAKODNEVNI ALGORITMI ............................................................................................. 8
6. KLASIFIKACIJA ALGORITAMA ...................................................................................... 10
6.1. Podela prema paradigmi programiranja ......................................................................... 10
6.2. Podela prema implementaciji ......................................................................................... 11
6.3. Podela prema oblastima rada.......................................................................................... 11
6.4. Podela prema složenosti ..................................................................................................... 12
6.5. Podela prema izračunljivosti .............................................................................................. 12
7. OCENA ALGORITMA ........................................................................................................ 13
8. ZAKLJUČAK ........................................................................................................................ 14
9. LITERATURA ...................................................................................................................... 15
Algoritmi

1. UVOD

Neformalno govoreći, algoritam je potpuno (precizno) definisana procedura (postupak)


koji uzima (dobija) jednu ili više ulaznih vrednosti i dalje (proizvodi, generiše) jednu ili više
izlaznih vrednosti. Te vrednosti obično se zovu ulazni i izlazni podaci algoritma.

Algoritme možemo posmatrati kao alate za rešavanje zadatih problema (računarski


problemi). Postavka problema opisuje, u opštem slučaju, određenu vezu (relaciju) između ulaznih
i izlaznih podataka. Algoritam opisuje specifičan postupak za dostizanje te veze.
U novije vreme, algoritam je pojam koji se gotovo isključivo vezuje za informatiku i, mada
ne postoji jedinstvena opšte prihvać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 na primer programski jezici C, C++, C#, Java, Fortan itd.
Algoritam je u matematiku uveo persijski matematičar Muhamed Al Horezmi. Napisao je
knjigu Al Horezmi o indijskoj veštini računanja gde u arapsku 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 reč algoritam, i dugo je
označavala postupak za račun sa decimalnim brojnim sistemom (i indijskim odnosno, kako se
kasnije pričalo, arapskim ciframa).
Algoritam predstavlja šematski prikazano, postupno rešavanje nekog problema, toka
nekog procesa ili izrade nekog predmeta.
Prvi algoritam koji se može smatrati procedurom čija je namena račun na automatskoj
mašini je napisala Ejda Bajron 1842. godine. U pitanju je algoritam za račun Bernulijevih
brojeva na analitičkoj mašini Čarlsa Bebidža. Ta mašina nikad nije proradila, ali je njen algoritam
ostavio dubok trag. Danas se to priznaje kao prvi računarski algoritam, a Ejda Bajron, ledi Lavlejs,
je priznata kao prvi programer u istoriji. U njenu čast je i jedan od najkompleksnijih programskih
jezika dobio naziv Ada.
Značajan napredak u formalizaciji uvođenja algoritma u matematiku i logiku je učinio Alan
Tjuring u svojim radovima definisanjem Tjuringove mašine. To je primitivan automat, misaona
tvorevina, ali poseduje mogućnost izvođenja nekoliko operacija koje su dovoljne za izvođenje
skoro svih algoritama. Čerč-Tjuringova teza tvrdi da se svaki algoritam koji je dobro definisan
može izvršiti na takvoj mašini. Tako se, i pored jednostavnosti ove mašine, začela teorija konačnih
automata kao nova oblast. Istraživanjem se došlo i do teorijskih problema: Tjuringov problem
zaustavljanja, NP-težak problem, NP-potpun problem i tako dalje.

1
Algoritmi

2. PRIMENA, KARAKTERISTIKE I ZNAČAJ ALGORITAMA

Postoji veliki broj zadataka koje čovek treba i može da reši pomoću računara koristeći
njegovu sposobnost da za veoma malo vreme obavi veliki broj operacija. Značajna sposobnost
ljudi jeste da uoče šta je potrebno uraditi, da to dobro postave i reše. Sa druge strane, računaru
moramo objasniti kako da reši problem. Ali, kada mu objasnimo kako, on taj problem rešava jako
brzo.
Ako računar naučimo kako da sabira cifre trocifrenog broja, on će ispisati rešenje pre nas.
Dakle ako smo računaru opisali postupak rešavanja problema. On će umeti da na osnovu polaznih
podataka (trocifren broj) dođe do rešenja (zbir cifara). Ako pitamo računar da nam sabere cifre
četvorocifrenog broja, on to neće znati da uradi dok ga mi ne naučimo kako to da radi.

Primenu računara u rešavanju određenog problema(zadatka) možemo podeliti na:


- Definicija problema
- Globalni opis odgovarajućeg algoritma
- Postupna detaljna izrada algoritma
- Pisanje programa na računaru
- Testiranje programa na računaru
- Rešavanje zadatka izvršavanjem programa na računaru

Karakteristike algoritama:
- Algoritam je konačan. Algoritam daje rešenje primenom konačnog broja algoritamskih
koraka. To znači da može da ima 5, 100, 10000, 1000000 koraka, ali ne može da ima
beskonačno. Kada broj koraka nije unapred poznat, treba predvideti postupak koji
ograničava broj koraka.
- Algoritam je definisan. Svaki algoritamski korak mora da bude jednoznačno definisan.
Ne smemo tako pisati algoritam, da nekom ko ga čita kasnije bude nejasno šta smo u
nekom koraku hteli da uradimo. Treba predvideti sve slučajeve bez obzira na različite
počtne podatke.
- Algoritam može da ima jedan ili više ulaznih podataka. Ulazni podaci mogu da se
navedu na početku ili se unose u toku samog algoritma.
- Algoritam mora da ima jedan ili više izlaznih podataka. Najzad, algoritme i pravimo
zato da bismo dobili neke rezultate.
- Algoritam bi trebalo da bude efikasan. Zahteva se postizanje traženog rešenja u što
kraćem vremenu i uz primenu što manjeg broja algoritamskih koraka
- Algoritam mora biti ostvarljiv u računaru. To znači da sve korake koje napišemo u
našem algoritmu zaista možemo da izvršimo i na računaru.

2
Algoritmi

- Rezultat svakog koraka je striktno definisan i zavisi od ulaznih podataka i rezultata


prethodnog koraka.
- Algoritam se zaustavlja nakon određenog broja izvršenih instrukcija.

Da bismo razumeli važnost algoritama i programiranja, potrebno je da shvatimo njihovu


primenu u praksi kroz korišćenje kompjutera. Naime, algoritmima je često potreban specifičan
hardver da bi se određene operacije izvele. Iako samo pisanje nije zahtevno, pojedine operacije
zahtevaju specijalizovane čipove i dodatnu tehniku.
Ovi specijalizovani komadi hardvera već se nalaze svuda oko nas, iako toga možda nismo
svesni. Gde god se vrši neka automatska radnja koja zavisi od postavljenih uslova, za njihovo
sprovođenje se koriste neki čipovi koji to obrađuju.
Što se tiče primene u programiranju, algoritam predstavlja niz naredbi koje se vrše u okviru
nekog programa. Ovde je važno znati da se kompjuteri zasnivaju na doslovnom sprovođenju
komandi korišćenjem informacija koje su mu date. Programiranje je praktično objašnjavanje
računaru njegovim jezikom šta treba da uradi u određenim situacijama.
Naravno, sam kompjuter ne rešava probleme koje mu postavite, već izvršava istrukcije
koje mu zadajete kako bi došao do rešenja. Dakle, ako ne razumete problem i samim tim ne vidite
put do rešenja, ni najmoćniji računar vam neće pomoći.
Da bi algoritam bio primenjiv na računaru, potrebno je da se ispune sledeći uslovi:
- Svaki korak mora da bude definisan – U svakom trenutku mora da bude jasno „šta je
pisac hteo da kaže”, tj. nema mesta dvosmislenim komandama.
- Ne može da bude beskonačan – On mora da ima definisan broj koraka koji će dovesti
do rešenja.
- Mora da postoji jedan ili više podataka na ulazu – Ovi podaci treba da se unesu na
početku ili tokom samog rada.
- Mora da postoji jedan ili više podataka na izlazu – Poenta kreiranja algoritma jeste da
reši problem i ponudi rezultat svog rada.
- Mora biti primenjiv na kompjuteru – Ono što osmislite mora biti primenjivo u praksi,
tj. pisanjem koda u nekom programskoj jeziku.

Na ovaj način „računarski algoritam” predstavlja nacrt problema i načina za rešavanje


problema. Prednost algoritma je što se može primeniti u bilo kom od programskih jezika, kao što
su: Java, Python, C++, Javascript, PHP…

3
Algoritmi

Slika 2.1.1 Rešavanje problem pisanjem algoritma1

3. ELEMENTI ALGORITMA

Za crtanje algoritama koristimo sledeće elemente:

- Početak i Kraj - identični su i označavaju početak i kraj programa


- Element ulaz - predstavlja unos podataka sa tastature, HD-a, ili bilo kog drugog uređaja
za čuvanje memorije.
- Element izlaz - predstavlja izlazni podatak odnosno rezultat algoritma, najčešće na
ekran računara, ili u neki fajl
- Element operacija-naredba - korak za računanje odnosno izvršenje neke radnje (npr.
sabiranje dva broja)
- Element uslov - koristimo za postavljanje pitanja i određivanja daljeg toka programa
na osnovu odgovora.

Elemente algoritma međusobno povezujemo sa pravom linijom. Svaki algoritam mora


imati svoj POČETAK i KRAJ.

1
https://www.it-akademija.com/sta-je-algoritam#

4
Algoritmi

Slika 3.1.1 Elementi i tok algoritama

Na slici (3.1.1) se vide standardni grafički elementi koji se najčešće koriste prilikom crtanja
dijagrama toka za pisanja Algoritama.
Prvi element je linija toka, koja spaja grafičke elemente i završava se strelicom u onom
smeru u kome se proces (program) nastavlja. Određuje redosled koraka u samom algoritmu,ali i
programu.
Ostali grafički elementi su razumljivi sami po sebi :
Elementi za početak i kraj su identični a označavaju početak i kraj programa.
Element ulaz predstavlja unos podataka bilo sa tastature ili HD-a,CD-a ili bilo kog drugog
mesta odakle se preuzimaju podaci
Element operacija-naredba predstavlja korak u okviru koga se izvršavaju pojedinačne
radnje u okviru pseudo koda ili programa (sabiranje dva broja,dodela vrednosti promenljivoj itd).
Element uslov predstavlja korak za uslovno grananje programa, u okviru njega se
postavljaju pitanja (Ako..onda If..then..else) i određuje se dalji tok programa na osnovu odgovora.
Standardno je da potvrdan odgovor produžava program pravo na dole , a negativan levo ili desno.

5
Algoritmi

Element izlaz -kraj predstavlja izlaz podataka, rezultata na razne uređaje, najčešće monitor,
štampač.

4. ALGORITMI I STRUKTURE PODATAKA

Svaki algoritam se sastoji od početka i kraja, dok se između toga nalaze elementi koji
predstavljaju osnovne delove koji sadrže definisani put ka rešenju problema. Da bismo uopšte
počeli sa rešavanjem problema, prvo moramo da ga definišemo i postavimo rešenje.
Algoritam može biti opisan na više načina: prirodnim jezikom, dijagramima, pseudokodom
i programskim jezikom. Dijagrami su možda i najpopularniji način, jer se na jednostavan a slikovit
način predstavlja problem i njegovo rešavanje. Za to vam nije potreban kompjuter, već prosto
olovka i papir na kojem ćemo iscrtati algoritamsku šemu, tj. grafički prikaz algoritma.
U zavisnosti od kompleksnosti problema, u procesu rešavanja koriste se tri osnovne
strukture algoritma: linijski, razgranati, ciklični.

4.1. Linijska algoritamska struktura

Linijska algoritamska struktura je ona gde se koraci izvršavaju jedan po jedan, s tim da se
ne ponavljaju, već se svaki izvršava samo jednom. Reč je o najjednostavnijem obliku, pa ujedno
predstavljaju način za pisanje najprostijih programa. Ipak, to ne znači da ova struktura nije bitna
kada su algoritmi u pitanju.

Slika 4.1.2 Linijski algoritam 2

2
http://www.znanje.org/knjige/computer/algoritmi/01/algoritmi_start_02.htm

6
Algoritmi

4.2. Razgranata algoritamska struktura

Razgranata algoritamska struktura je ona kod koje se svaki korak izvršava jednom ili
nijednom. To zavisi od uslova koji se postavlja, pa se može desiti da se neka komanda nikad ne
izvrši. Više koraka se tako postavlja da bismo pokrili sve moguće uslove, te na ovaj način
pokušavamo da imamo odgovor na svaku situaciju.
To znači da u određenom delu algoritma dolazi do račvanja gde je sledeći korak uslovljen
situacijom na konkretnom račvanju. Kako se lako može desiti da „skrenete levo, a ne desno”,
komande koje se nalaze „desno” nikad neće biti izvršene. Za slučaj da postoji više opcija, koristi
se višestruko grananje.

Slika 4.2.1 Razgranata algoritamska struktura3

4.3. Ciklična algoritamska struktura

Ciklična algoritamska struktura predstavlja mogućnost korišćenja određenih koraka više


puta. To se dešava kada nisu poznate sve vrednosti koje će biti unete. Ciklusi predstavljaju
mogućnost da se vratimo korak unazad i omogućimo unos drugih informacija.
Na ovaj način se kreira petlja, tj. ponavlja se ciklus. To ponavljanje se zove „iteracija”,
što podrazumeva ponavljanje koraka u algoritmu, ali uz korišćenje drugih vrednosti.
Naglašavamo da ove strukture nisu međusobno isključive, naprotiv, one se često koriste zajedno
pri kreiranju algoritma.

3
http://www.znanje.org/knjige/computer/algoritmi/01/algoritmi_razgranata_02.htm

7
Algoritmi

Slika 4.3.1 Ciklična algoritamska struktura4

5. SVAKODNEVNI ALGORITMI

Algoritam kuvanja čaja


Čest primer algoritma iz svakodnevnog života je kuvanje čaja. Svaki korak pripremanja čaja mora
biti izvršen pravilno kako bi se moglo preći na sledeći. Algoritam kuvanja čaja glasi:
– Uzeti lonče i sipati vodu.
– uključiti ringlu na maksimum
– staviti lonče na ringlu
– Sačekati dok voda ne proključa.
– Kad voda proključa, skinuti lonče i isključiti ringlu.
– Staviti kesicu čaja u lonče.

4
http://www.znanje.org/knjige/computer/algoritmi/01/algoritmi_ciklicna_37.htm

8
Algoritmi

– Po želji, dodati kašiku šećera, mleko ili limun.


– Sipati čaj u šolju.
Iz ovog jednostavnog primera može se videti postupnost i konačnost algoritma.

Algoritam za sreću

Slika 5.1.1 Algoritam sreće5


Na slici je dat “Algoritam za sreću”. U pitanju je blok dijagram. Algoritam bi mogao rečima da se
opiše na sledeći način:
– Ako si srećan, nastavi da se ponašaš kao i do sada.
– Ako nisi srećan i ne želiš da budeš srećan, nastavi da se ponašaš kao i do sada.
– Ako nisi srećan i želiš da budeš srećan, onda moraš nešto da promeniš.

5
https://skolakoda.org/svakodnevni-algoritmi

9
Algoritmi

6. KLASIFIKACIJA ALGORITAMA

Postoji više načina za razvrstavanje algoritama, a metodologija klasifikacije je tema


mnogih rasprava.

6.1. Podela prema paradigmi programiranja

Jedan način razvrstavanja je po metodologiji projektovanja ili primenjenom obrascu.


Postoji izvestan broj različitih obrazaca kako se pristupa realizaciji algoritama. Dalje, svaka od
navedenih kategorija sadrži više različitih tipova algoritama. Neki uobičajeno korišćeni obrasci su:
 Podeli pa vladaj algoritmi smanjuju stepen složenosti problema podelom na dva ili više
manjih problema od iste vrste (obično rekurzivno), dok od problema ne ostane toliko mali deo
da se može jednostavno rešiti.
 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 rešavanje više različitih
primera problema, možemo rešiti brzo koristeći dinamičko programiranje, pristup koji
izbegava ponovno izračunavanje rešenja koja su već izračunata. Na primer, 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.
– Linearno programiranje. Problem se reš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 usmerenom
grafu) mogu biti iskazani na ovaj način, a onda rešeni nekim 'generičkim' algoritmom,
kao što je Simpleks algoritam.
– Pretraga i numeracija. Mnogi problemi (kao što je igranje šaha) mogu biti modelovani
kao problemi grafa. Algoritam pretraživanja grafa daje pravila kretanja kroz graf i
koristan je baš za ovakve probleme. Ova kategorija obuhvata i algoritme pretraživanja i
povratka kroz stablo odlučivanja (bektreking).
– Heuristički algoritmi i algoritmi slučajnosti ne odgovaraju u potpunosti strogoj
definiciji algoritma

10
Algoritmi

1. 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.
2. 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čkom programiranju je ovaj pristup proširen na algoritme.
3. Heuristički algoritmi su takvi algoritmi čija je osnovna namena 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.
Primer 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.

6.2. Podela prema implementaciji

Drugi način razvrstavanja je po implementaciji. Rekurzivni algoritam je takav algoritam


koji poziva (referencira) sam sebe uzastopno dok se neki uslov ne ispuni, što je metoda primenjena
kod funkcionalnog programiranja. Algoritmi se obično razmatraju uz pretpostavku da u jednom
trenutku izvršavaju jednu instrukciju jednog algoritma. Takvi računari se ponekad zovu serijski
računari. Algoritmi osmišljeni za takvo okruženje se zovu serijski ili sekvencijalni algoritami,
nasuprot paralelnim i distribuiranim algoritmima. Paralelni algoritmi prednosti računarske
arhitekture kod koje više procesora u istom trenu rešava isti problem, dok se kod distribuiranih
algoritama koristi više računara povezanih u računarsku mrežu. Paralelni ili distribuirani algoritmi
dele problem u više simetrični ili asimetričnih potproblema i kasnije sastavljaju rezulata. Za ove
algoritme je pored procesorskih ciklusa je važna brzina komunikacije između procesora.

6.3. Podela prema oblastima rada

Svako polje nauke ima svoje problem i potrebne su joj efikasni algoritmi. Srodni problem
se često proučavaju zajedno. Neki primeri 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.

11
Algoritmi

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.

6.4. 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.

6.5. Podela prema izračunljivosti

Algortime je moguće klasifikovati i prema izračunljivosti. Ovo se obično radi tako što se
razmatraju klase algoritama što omogućava smanjenje vremenskih i memorijskih resursa koji se
koriste u izračunavanju. Na primer, klasa rekurzivnih algoritama uključuje algoritme za sve
funkcije koje se mogu izračunati pomoću Tjurnigove mašine.

12
Algoritmi

7. OCENA ALGORITMA

Postavljeni algoritamski problemi se mogu, u većini slučajeva, rešiti na razne načine. Na


primer, najveći zajednički delilac možemo da odredimo tako što krenemo od nekog dovoljno
velikog broja (koji je sigurno veći od najvećeg zajedničkog delioca) i taj broj umanjujemo zap o
jedan, do nalaženja broja koji deli i jedan i drugi ulazni broj.
Kako između mogućih algoritama izabrati onaj “najbolji”? U tu svrhu se ocenjuju
algoritmi. Ocena se zove složenost algoritma (kompleksnost). Složenost algoritma se izražava u
funkciji dimenzije ulaza. Dimenzija ulaza je neki prirodni broj koji karakteriše ulaz. Primera radi,
ako tražimo nzd, to je vrednost većeg od ulaznih brojeva. Ako, pak uređujemo neki niz elemenata,
tako da dobijemo neopadajući niz, to je broj elemenata niza, itd.
Obično se ocenjuje jedna od dve veličine:
1. Vreme izvršavanja algoritma i
2. Količina iskorišćene memorije, odnosno količina pomoćnih podataka
(međurezultata) koji se proizvode u toku izračunavanja.
Prva od merenih karakteristika zavisi od brzine izračunavanja (odnosno od brzine računara
na kome se izvršava izračunavanje). Zbog toga se ne meri vreme izračunavanja već se određuje
broj računskih operacija karakterističnih za problem koji se rešava. Na osnovu prirode problema
(zadataka), obično se lako određuje neka karakteristična radnja koja se ponavlja. Na primer,
– Pri uređivanju niza, to je poređenje (ili, eventualno, zamena mesta dva elementa
niza);
– Pri nalaženju nzd, to je broj provera deljivosti (odnosno broj izvedenih deljenja).
Ova karakteristika algoritma obično se naziva vremenskom složenošću ili složenošću
izračunavanja.
Drugu merenu karakteristiku ne treba posebno komentarisati. Naime, u toku izračunavanja
može biti proizvedena određena količina međurezultata. Radi kasnije upotrebe, neki od
međurezultata se pamte (memorišu). Nekada količina međurezultata može biti veoma velika (a
količina raspoložive memorije je uvek ograničena). U tom slučaju, taj algoritam postaje
neprimenljiv za ulaz dovoljno velike dimenzije. Ovu karakteristiku algoritma nazivaćemo
prostornom složenošću.
U postupku utvrđivanja složenosti mogu se izdvojiti neke faze:
– Određivanje mogućih (karakterističnih) izgleda ulaznih podataka
– Utvrđivanje složenosti za karakteristične ulazne skupove, izdvojene u prethodnoj
fazi.

13
Algoritmi

Karakteristike algoritma zavise i od izgleda ulaznih podataka (to se posebno odnosi na prvu
karakteristiku, tj. složenost izračunavanja). Primera radi, broj poređenja u toku uređenja niza zavisi
u velikoj meri od polaznog niza, odnosno od toga koliko je on vež uređen (niz je već sortiran, niz
je sortiran, ali u obrnutom poretku u odnosu na poredak koji treba napraviti itd.). U proceni
algoritma polazi se od pretpostavke da ulaz može biti proizvoljnog izgleda (generisan pomoću
nekog generatora slučajnih ili pseudoslučajnih brojeva).
Zatim se procenjuje kako izgleda neki prosečan skup. Složenost za takav ulazni skup je
takozvana prosečna složenost algoritma (engl. Average-case). Pored toga se oređuje ulazni skup
za koji dati algoritam ima najlošije karakteristike (najduže se izvršava, najveća količina iskorišćene
memorije). Takvom ulaznom skupu odgovara takozvana složenost u najlošijem slučaju (engl.
Worst-case).
Poslednja faza u ocenjivanju složenosti je određivanje zavisnosti između dimenzije
problema i vremena izračunavanja (broja izdvojenih apstraktnih radnji), odnosno količine
međurezultata. To je vrlo složena faza i zahteva složen matematički aparat. U većini slučajeva nije
moguće potpuno precizno odrediti zavisnost, već se vrše određene procene.
Kao rezultat procene dobija se neka funkcija g:N->N. Vrednost g(n) je procenjeni broj
operacija (ili količina međurezultata) u izračunavanju, ako ulazni skup ima dimenziju n. Dobijena
funkcija g može imati manje ili više složen zapis. Ako je složen zapis, onda se obično data funkcija
zamenjuje nekom drugom funkcijom koja ima jednostavniji zapis, a pri tome i dalje dosta dobro
opisuje zavisnost dimenzije i složenosti.

8. ZAKLJUČAK

Da bismo odgovorili na pitanje šta je algoritam, potrebno je da se prvo vratimo u 9. vek.


Tada je živeo persijski matematičar Muhamed el Horezmi. Veruje se da je upravo on otac algebre
i da je po njemu algoritam dobio ime (na osnovu transkripcije njegovog imena na latinski). Ipak,
ono što danas smatramo algoritmom u računarstvu prva je definisala Ejda Lavlejs u 19. veku.
Ona je napisala prvi algoritam koji bi trebalo da izvrši mašina za računanje, prepoznajući
potencijal nečega iz čega će nastati savremeni kompjuteri. Zbog svog doprinosa, ona se smatra
prvim programerom u istoriji. Danas se na algoritam pre svega gleda kao na osnovu svakog
kompjuterskog programa, te time postaje neizbežni deo priče o programiranju. Zato, ukoliko želite
da se bavite programiranjem, morate da razumete važnost algoritmova.
Postoji dosta definicija algoritma, a nas najviše zanima njegova uloga u rešavanju
računarskih problema. Po jednoj definiciji algoritam predstavlja niz koraka kojih treba da se
držimo kako bismo rešili određeni zadatak. Drugim rečima, on predstavlja skup operacija
potrebnih za rešavanje nekog zadatka koja se izvršavaju po tačno određenom redosledu.

14
Algoritmi

Da bi algoritam rešio problem, potrebno je da se on definiše na „ulazu”, dok se na „izlazu”


nalazi rešenje problema. Ono što je važno napomenuti jeste da algoritam mora imati ispravan
postupak. Dakle, svaki segment postavljenog problema (na ulazu) mora da ima definisano rešenje
(na izlazu). Ukoliko je jasno postavljen i nema nijednu grešku, smatra se da je postupak uspešan.
Algoritmi su značajni za programiranje iz prostog razloga što sami programi predstavljaj
u konkretnu realizaciju algoritama na računaru.
Algoritmi mogu biti opisani na razne načine, od kojih su neki više (pseudokod) ili manje
(prirodan jezik) formalizovani. Jedan od najpoznatijih i najpreglednijih načina za predstavljanje a
lgoritama je putem algoritamske šeme (blok-dijagrama).
Postoji nekoliko podela algoritama, a najpoznatija je prema načinu izvršavanja koraka. P
o njoj, algoritmi mogu biti:
– linijski - algoritmi kod kojih se svaki korak izvršava tačno jedanput;
– razgranati - algoritmi kod kojih se neki koraci mogu izvršiti jednom ili nijednom;
– ciklični - algoritmi kod kojih se neki koraci mogu izvršiti više puta.
Naravno, svaki malo složeniji algoritam u sebe uključuje elemente sva tri tipa.

9. LITERATURA

[1] https://razno.sveznadar.info/02-2razred/5-Algoritam/2-ElementiAlgoritama.htm
[2] https://www.it-akademija.com/sta-je-algoritam#
[3] https://sr.wikipedia.org/wiki/Алгоритам
[4] https://www.skolaprogramiranja.rs/karakteristike-algoritama/
[5] http://www.webnstudy.com/tema.php?id=algoritmi
[6] https://www.skolaprogramiranja.rs/sta-su-algoritmi/
[7] Dragan Urošević, Algoritmi u programskom jeziku C, Mikro knjiga, 2007
[8] https://skolakoda.org/svakodnevni-algoritmi
[9] http://www.znanje.org/knjige/computer/algoritmi/algoritmi.htm

15

You might also like