Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Struktura podataka i algoritmi – završni 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

14) Algoritam za nalaženje NZD dva broja


Algoritam za nalaženje najvećeg zajedničkog delilaca (NZD) dva broja glasi:
algorithm delilac(i, a, b, delilac)
WRITE Uneti dva cela broja
READ a, b
FOR (i = 1; i <= a && i <= b; i++)
IF (a % i == 0 && b % i == 0)
delilac = i
WRITE delilac
15) Algoritam za nalaženje najvećeg elementa niza
Algoritam za nalaženje najvećeg elementa niza glasi:
algorithm niznajveci(i, num, n, large=0)
WRITE Unesite broj n
READ n
FOR (i = 0; i < n; i++)
WRITE Unesite broj
READ num
IF (num > large); large = num
PRINT Najveci broj u nizu je large
16) Algoritam za sortiranje izborom
Metod sortiranja niza a od n elemenata, koji se naziva sortiranje izborom, zasniva se kao i ostali
metodi. Postupak u ovoj metodi je da se u i-toj iteraciji uzima najmanji element među
elementima i zamenjuje sa elementom ai. Posle prve iteracije će drugi najmanji element niza biti
na drugom mestu, i tako dalje, posle i-te iteracije će i najmanjih elemenata biti poređano u
rastućem redosledu.
17) Algoritam za sortiranje zamenom
Postupak sortiranja zamenjivanjem se sastoji od višestrukih prolaza duž datog niza od dna ka
vrhu. Pri tome, ako dva susedna elementa nisu u dobrom elementu ("lakši" je ispod "težeg"),
zamenjujemo im mesta. Efekat ovog zamenjivanja je da se u prvom prolazu "najlakši" element sa
najmanjom vrednošću penje do vrha. U drugom prolazu, drugi najmanji element se penje do
druge pozicije. U trećem prolazu, treći najmanji element u trećem prolazu dolazi na svoje mesto i
tako dalje.
18) Algoritam za sortiranje ubacivanjem
Postupak sortiranja umetanjem se sastoji od n iteracija, pri čemu se u i-toj iteraciji umeće
element ai na njegovo pravo mesto između prvih i – 1 najmanjih elemenata prethodno uređenih u
rastućem redosledu.
19) Složenost algoritma sortiranja izborom

20) Složenost algoritma sortiranja zamenom

21) Složenost algoritma sortiranja ubacivanjem


Tipična vremena izvršenja

22) Funkcija "veliko O"

23) Funkcija "malo O"


24) Niz, osnovne osobine i operacije
Niz je osnovni nia;in strukturiranja podataka u programiranju i zato se koristi u skoro svim
programskim jezicima. Niz je struktura podataka koja predstavlja sekvencu elemenata istog tipa.
Sekvencijalna, uređenost niza ogleda se u numeraciji njegovih elemenata, red, od prvog do
poslednjeg. Redni broj nekog elementa u nizu se naziva indeks elemenata. Ime niza grupno
označava sve elemente niza kao jednu celinu. Ukupan broj elemenata niza se naziva dužina niza,
koja mora biti unapred zadata.
25) Lista, osnovne osobine i operacije
Lista je fleksibilni niz u kojem možemo dodavati ili uklanjati elemente niza. Glavna razlika u
odnosu na nizove je to što dužina liste nije unapred određena. Sa druge strane, nizovi imaju
prednost kada je u pitanju efikasan pristup proizvoljnom elementu. Pristup svakom elementu
mora početi od prvog elementa i sledeći njegov sledbenik do drugog… dok se ne stigne do
željenog elementa. Prema tome, pristup traženom elementu nije operacija konstantnog vremena,
već zavisi od njegove pozicije. Broj elemenata liste se naziva veličina liste; lista bez elemenata je
prazna lista, za dva susedna elementa se nazivaju sledbenici ili prethodnici. Prvi element se
naziva glava, a poslednji element rep liste.
26) Stek, osnovne osobine i operacije
Stek je posebna vrsta liste kod koje se dodavanja i uklanjanja elemenata obavljaju samo na
jednom kraju koji se naziva vrh steka. Operacije za dodavanje elemenata na početak liste i za
uklanjanje elemenata sa početka liste su druga imena za operacije push i pop. Za implementaciju
steka pomoću nizova može se iskoristiti činjenica da se dodavanja i uklanjanja elemenata vrše
samo na vrhu steka. Zato možemo koristiti samo jedan niz, izjednačiti dno steka sa početkom tog
niza, a zatim uvećati stek prema kraju tog niza.
27) Redovi za čekanje, osnovne osobine i operacije
Red za čekanje je druga specijalna vrsta povezane liste kod koje se elementi dodaju na jednom
kraju liste i uklanjaju sa drugog. Mesto na kojem se elementi dodaju logički predstavlja kraj
reda, a mesto gde se dodaju označava početak reda. Kada se novi element dodaje u red za
čekanje, taj element se uvek priključi na kraj reda. Sa druge strane, kada se uklanja iz reda za
čekanje, izbacuje se prvi element reda. Operacija dodavanja elementa u red za čekanje se naziva
enqueue, a uklanjanje dequeue.
28) Stabla, osnovne operacije i vrste
Stabla su samo specijalni slučaj grafova. Korensko stablo se sastoji od skupa elemenata koji se
nazivaju čvorovi, kao i skupa uređenih parova različitih čvorova povezanih linijama koje se
nazivaju grane. Jed od čvorova korenskog stabla je poseban jer označava koren stabla. Čvorovi
se obično obeležavaju kružićem, a koren stabla se prikazuje na vrhu hijerarhijske strukture koju
čini stablo. Jedna grana stabla je uređen par dva različita čvora. Prvi čvor je roditelj drugog
čvora, deteta. Deca istog roditelja se nazivaju braća. Čvorovi koji imaju bar jedno dete su
unutrašnji, a čvorovi bez dece su spoljašnji/listovi. Osnovne operacije su pretraživanje,
dodavanje, brisanje, određivanje minimuma, maksimuma,…
29) Hip, osnovne osobine i operacije
Binarni hipovi su binarna stabla kod koji svi čvorovi zadovoljavaju specijalno svojstvo. Binarno
stablo se naziva kompletno ako ima čvorove na svim nivoima osim možda poslednjem; svi
poslednji čvorovi moraju biti levo do onih koji nedostaju. Hip je kompletno binarno stablo u
kojem je ključ svakog čvora manji od ključeva dece tog čvora. Tipične operacije nad hipom su
uklanjanje najmanjeg čvora, dodavanje novog čvora i stvaranje hipa od kompletnog binarnog
stabla.

You might also like