Professional Documents
Culture Documents
Algoritam - Ispit - Pitanja
Algoritam - Ispit - Pitanja
1) Pojam algoritma
Algoritam je konačna i precizno definisana procedura, niz dobro definisanih pravila, kojom se
ulazne vrednosti transformišu u izlazne, ili se opisuje izvršavanje nekog postupka. Ovo
prvenstveno znači da se algoritam sastoji od jasne i nedvosmislene specifikacije niza koraka koji
se mogu mehanički izvršiti na računaru. Algoritam rešava neki problem ukoliko se na ulazu
algoritma pretpostavlja ulaz tog problema i na izlazu algoritma se dobije rešenje tog problema za
svaku instancu problema.
Algoritam mora biti postupak koji se sastoji od konačno mnogo koraka koji se mogu izvršiti na
računaru; mora biti postupak po kome je nedvosmisleno određen svaki sledeći korak za
izvršavanje; mora biti ispravan postupak – za svaku instancu problema na ulazu mora dobiti
odgovarajuće rešenje na izlazu.
2) Osobine dobrog algoritma
Algoritam je definisan kao konačan skup postupka za izvršavanje nekog zadatka. Svaki dobar
algoritam mora posedovati sledeće osobine:
Diskretnost – pošto se algoritam sastoji od određenog tipa koraka, postoje određene
operacije koje se u algoritmu mogu koristiti; najčešće su to +, -, *, /.
Determinisanost – svaki algoritamski korak mora biti strogo definisan i potpuno jasan;
posle izvršenja tekućeg algoritamskog koraka, mora biti jednoznačno definisan i sledeći
Efektivnost – sve operacije koje se javljaju u jednom algoritamskom koraku moraju se
izvršiti za razumno kratko vreme.
Rezultativnost – svaki algoritam mora posle konačnog broja koraka generisati rezultat
Masovnost – svaki algoritam definiše postupak za rešavanje klase problema, a ne
pojedinačnog slučaja
Optimalnost – svaki algoritam bi trebalo da teži optimalnom rešavanju problema; što
brže, za što manje memorije.
3) Načini zapisa algoritma
Program mora biti napisan u formi koji računar može da "razume". Svaki algoritamski korak se
zamenjuje nizom instrukcija, jer one čine računarski program. Svaka instrukcija mora biti
napisana po određenim pravilima. Da bi se olakšalo stvaranje algoritama, najčešće se izražavaju
na pseudojeziku koji sadrži elemente i prirodnog i programskog jezika. Takođe postoji i
narativan način zapisa algoritma (koristi precizne rečenice govornog jezika), kao i dijagram toka
(grafički prikaz).
4) Psuedojezik
Pseudojezik je posebna vrsta jezika, kombinacija programskog i govornog jezika. Njegova uloga
je pisanje algoritama, koji se tada naziva pseudokod. Pseudokod je običan opis koraka u
algoritmu. Namenjen je ljudskom čitanju, a ne mašinskom. Obično izostavlja detalje koji su od
suštinskog značaja za mašinsko razumevanje algoritma, kao što su deklaracije prominljivih i kod
specifičan za jezik. Programski jezik je dopunjen detaljima opisa prirodnog jezika, tamo gde je to
prikladno. Svrha upotrebe pseudokoda je da ljudi lakše razumeju od konvencijalnog
programskog jezika.
5) Dijagram toka
Dijagram toka je grafički prikaz kompjuterskog algoritma. Sastoji se od niza simbola koji
definišu tok i smer programa. Prikazuje korake kao različite kutije koje su međusobno povezane
strelicama. Postoji nekoliko vrsta kutija, od koje su najosnovnije terminal (ovalnog oblika), koji
najčešće označavaju početak i kraj programa, proces (pravougaonog oblika), koji označava skup
operacija koje menjaju vrednost, oblik ili lokaciju podataka; input/output (romb), koji označava
proces inputa ili outputa; i odluka (dijamant), koji oznavača put kojim će ići program.
6) Osnovne algoritamske strukture
Postoje 3 osnovne algoritamske strukture:
Linijska (sekvenca) – sve radnje se izvršavaju tačno jednom u redosledu u kome su
navedene.
Razgranata (selekcija) – operacija zavisi od ispunjenosti nekih uslova. Ona omogućuje
dase od više grupe akcije, koje se nalaze u različitim granama razgranate strukture,
izabere ona koje će se izvršiti jednom, dok se sve ostale grupe akcija neće izvršiti
nijednom.
Ciklična (petlja) – određeni broj algoritamskih koraka se više puta ponavlja. Ako je broj
ponavljanja dela algoritma poznat unapred, struktura je konstantna, a ako nije, već zavisi
od ispunjenosti nekog uslova, onda je promenljiva. Tu su javljaju pedlje while-do, repeat-
until,…
7) Iteracije, strukture, vrste i zapis
PETLJE
8) Selekcija, struktura, i zapis
IF ELSE
9) FOR petlja
FOR petlja je kontrolna izjava za navođenje ponavljanja, koji omogućava kodu da se izvršava u
više navrata. Za razliku od drugih petlji, kao što je na primer WHILE petlja, FOR petlje često
odlikuju izraženiji brojači ili izraženije promenljive. Ovo omogućava telu FOR petlje da zna
redosled svakog ponavljanja. FOR petlje se uglavnom koriste kada se broj ponavljanja zna pre
nego što se petlja napiše. Potiče od engleske reči for. Takođe je poznata kao i DO petlja, ali često
je mešana sa DO WHILE petljom, tako da je bolje koristiti FOR.
10) WHILE petlja
WHILE petlja (pre-test loop) je kontrolna izjava za navođenje ponavljanja, koji omogućava kodu
da se izvršava u više navrata. WHILE petlja se može posmatrati kao i ponavljajuća IF naredba.
Sastoji se od bloka naredbi i uslova. Uslov se prvo procenjuje – ukoliko je tačan, naredbe unutar
toka se izvršavaju. Ovo se ponavlja dok uslov postane netačan. Primer bi bio:
algorithm while(x) – x = 0; WHILE (x<5) {WRITE x; x++}
11) REPEAT petlja
REPEAT petlja (post-test loop) je kontrolna izjava za navođenje ponavljanja, koji omogućava
kodu da se izvršava u više navrata. REPEAT petlja izvršava kod najmanje jednom, zatim
neprestano izvršava blok u zavisnosti od datih uslova. Prvo se kod unutar bloka izvršava, zatim
se uslov procenjuje. Ukoliko je uslov tačan, kod bloka se opet izvršava. Ovo se ponavlja dok
uslov ne postane netačan. Moguće je i u nekim poželjim slučajevima da se uslov uvek procenjuje
kao tačan, zbog čega bi se beskonačno ponavljao. Primer bi bio:
algorithm REPEAT(x, y) – x= 0, y=5; REPEAT{WRITE x, x++} WHILE(x<y)
12) Određivanje vremena izvršenja
Dva najvrednija računarska resursa koje svaki algoritam treba da štedi su vreme i memorija;
drugim rečima, efikasnost algoritma identifikujemo dužinom njegovog vremena izvršavanja.
Dva glavna načina da se odredi vreme izvršavanja nekog algoritma su empirijski i analitički.
Empirijski način podrazumeva da se prosto izmeri stvarno vreme rada, dok se analitički način
zasniva na teorijskoj analizi rada algoritma i prebrojavanju jediničnih instrukcija koje se
izvršavaju tokom rada. Više se koristi analitički način, jer on analizira kako algoritam radi, korak
po korak. Vreme izvršavanja skoro uvek zavisi od broja ulaznih podataka koje treba obraditi.
Funkcija T(n) – za vreme izvršavanja u najgorem slučaju – maksimalno vreme izvršavanja tog
algoritma za sve ulaze veličine n.
13) Određivanje složenosti algoritma