1. Leonardo Miljko
www.ckm.ba - Leonardo Miljko
Prezentacija nastala na osnovu knjige:
Brano Markić i Dražena Tomić,
Uvod u algoritme i strukture, Ekonomski fakultet , Mostar,2008.
Algoritmi i
strukture podataka
Algoritam
2. DEFINICIJA POJMOVA
• Datafile (datoteka podataka) - skup podataka pomoću kojih se
modelira neki realan objekt
• Slog (record) - je dio datoteke podataka, dio koji tvori datoteku
podataka
• Entitet - podrazumijeva se sve što se može jednoznačno odrediti,
identificirati i razlikovati. Tako široko postavljena definicija
pokazuje da entitet može biti svaki „realan“ ili „apstraktan“ objekt
o kojem u određenom trenutku razmišljamo.
• Polje (field) je dio sloga. Više polja tvori slog. Općenito, svako polje
sadrži jedan tip podataka.
• Ključ (key) omogućuje pretraživanje i pronalaženje slogova.
www.ckm.ba - Leonardo Miljko
3. DEFINICIJA POJMOVA
Struktura podataka Prednosti Nedostaci
Nesortirano polje
(array)
Brzo umetanje
podataka, brzo
pronalaženje podataka
pomoću
Indeksa.
Unaprijed poznat broj
elemenata (veličina).
Sporo brisanje
podataka
Sortirano polje (array) Brzo pretraživanje. Sporo umetanje.
Red (queu) Ponaša se po načelu prvi
ušao, prvi izišao.
Spor pristup članovima
reda.
Stog (stack) Ponaša se po načelu
posljednji ušao, prvi
izišao.
Spor pristup članovima
stoga.
Povezane liste Brzo umetanje i
brisanje.
Sporo pretraživanje.
www.ckm.ba - Leonardo Miljko
4. DEFINICIJA POJMOVA
Struktura podataka Prednosti Nedostaci
Binarna stabla Brzo pretraživanje,
umetanje i brisanje.
Algoritam brisanja je
složen.
Crveno-crna stabla Brzo pretraživanje,
umetanje i brisanje.
Složenost
2-3-4 stabla Brzo pretraživanje,
umetanje i brisanje.
Složenost
Hash tablica Brzi pristup, ako je
poznat ključ. Brzo
umetanje podataka .
Sporo brisanje i
neučinkovita
uporaba memorije.
Gomila (heap) Brzo brisanje, umetanje. Spor pristup podacima.
www.ckm.ba - Leonardo Miljko
5. Algoritam
• U procesu programiranja načela na temelju kojih se
ulazni podaci (veličine) transformiraju u izlazne podatke
(veličine) zovu se algoritam.
• Algoritam se ne odnosi samo na programiranje, on je
pojmovno šira procedura koja se odnosi i na druge vrste
problema.
• Algoritam se definira kao konačan niz nedvosmislenih
koraka koji su izvodljivi, i ako se slijede, dovode do
rješenja problema.
www.ckm.ba - Leonardo Miljko
6. Algoritam
Uvjetno sve faze razvoja programa mogu se podijeliti,
sažeti u dvije:
• faza rješavanja problema
– definiranje zadatka obrade,
– konstrukcija algoritma (dizajn programa) i
– testiranje ispravnosti algoritma,
• faza implementacije
– kodiranje,
– testiranje (izvršavanje programa na računalu),
– dokumentiranje i
– održavanje
www.ckm.ba - Leonardo Miljko
7. Algoritam
Svaki algoritam ima sljedećih pet bitnih osnovnih svojstava:
• ulaz,
• izlaz,
• konačnost,
• definiranost i nedvosmislenost (određenost),
• efikasnost (efektivnost).
www.ckm.ba - Leonardo Miljko
8. Algoritam
Svaki algoritam ima određena svojstva:
• koraci moraju biti slijedni i nedvosmisleni. Nedvosmisleni znači da
nakon izvođenja jednog koraka uvijek je poznat sljedeći korak.
• daju točno rješenje u svim slučajevima. Za svaku kombinaciju
ulaznih vrijednosti izlaz mora biti točan.
• broj koraka je konačan. Algoritam ne smije tijekom izvođenja ući u
beskonačnu petlju. On mora imati kraj. Svaki korak algoritma
može trajati samo jedan konačan vremenski interval
• koraci algoritma moraju biti izvedivi za određeni procesor. Korake
može izvoditi osoba, računalo, mehanički uređaj i sl. Takva
instanca za izvođenje algoritma se naziva procesor
• efikasnost.
www.ckm.ba - Leonardo Miljko
9. Algoritam
Najčešći pristup razvoju algoritma je odozgo prema dolje ili
metodološki pristup koji se zove profinjenje u koracima.
Prema tom pristupu algoritam se dijeli u određen broj
podproblema, podprocesa koji opisuju pojedine dijelove
problema.
Zatim se razvijaju algoritmi za pojedine podprocese koji su
jednostavniji od cijelog procesa.
Proces završava kada se unutar algoritama slože koraci
koje razumije procesor (onaj koji izvodi algoritam –
računalo, čovjek i sl.).
www.ckm.ba - Leonardo Miljko
10. Algoritam
Struktura algoritma
Svaki algoritam bi trebao imati sekcije (dijelove) u
sljedećem redoslijedu:
• Zaglavlje: Naziv algoritma ili naslov.
• Deklaracija : Kratak opis algoritma i
varijabli.
• Tijelo: Niz koraka.
• Kraj algoritma: Naredba kraj.
www.ckm.ba - Leonardo Miljko
11. Algoritam
Algoritam se može zapisati kao pseudokod uporabom šest osnovnih
operacija:
1. Naredbe unosa i čitanja podataka
• Tipične naredbe pseudokoda za prihvaćanje naredbi su:
• Read ime (čitaj ime)
• Get ime (pribavi ime)
• Read broj 1, broj 2
2. Naredbe izlaza i ispisa podataka
• Print ime
• Write „Prosjek je“, Prosjek
www.ckm.ba - Leonardo Miljko
12. Algoritam
3. Naredbe za aritmetičke operacije
• Add Broj To Zbroj ili
• Zbroj = Zbroj + Broj
• Prosjek = Zbroj/Brojač
• Plaća= Broj sati rada * satnica
• Neto plaća= bruto plaća – porezi i doprinosi
4. Naredbe pridruživanja vrijednosti varijablama (inicijalizacija)
• Postavi Brojač na 0 ili pridruži Brojaču 0
• Pridruži varijabli Vrijednost rezultat operacije množenja :
• Vrijednost = Cijena * Količina
www.ckm.ba - Leonardo Miljko
13. Algoritam
5. Računalo može usporediti dvije vrijednosti i odabrati jednu od
dvije moguće akcije
• If B < 0 Then
• Dodaj 1 negativnom broju B
• Else
• Dodaj 2 nenegativnom broju B
• End If
6. Računalo može ponavljati niz akcija dok se ne ispuni određeni
uvjet ili dok je određeni uvjet ispunjen
• Ponavljaj dok je A < = 50
• Read A
• Write A
• A dodati 1 (A=A+1)
• Kraj
www.ckm.ba - Leonardo Miljko
14. Algoritam
Program zapis nekoga algoritma u nekom programskom jeziku, pri
čemu procesor mora poznavati rječnik i gramatiku jezika kojim je
opisan algoritam.
Sintaksa jezika je skup gramatičkih pravila koja određuju kako se
simboli mogu u jeziku rabiti.
Narativni opis koraka algoritma je pseudokod.
Algoritam se može prikazati različitim tehnikama:
• Prirodni jezik
• Pseudokod
• Dijagrami toka (flowcharts)
• Nassi-Sneiderman dijagrami
• Jackson strukturni dijagrami
www.ckm.ba - Leonardo Miljko
15. Algoritam
Prirodni jezik
• Prirodnim jezikom se algoritam zapisuje navođenjem rednog broja
koraka i kratkim opisom koraka na hrvatskom (prirodnom) jeziku.
Primjer zapisa izračunavanja aritmetičke sredine niza brojeva:
Korak 1. Zapiši niz brojeva: 7, 5, 23, 3, 7.
Korak 2. Prebroj dužinu niza. (Za koliko brojeva izračunavamo
prosjek? Odgovor: 5).
Korak 3. Zbroji elemente niza (brojeve): 7+ 5+ 23+ 3+ 7 = 45.
Korak 4. Podijeli zbroj s brojem elemenata u nizu: 45:5 = 9.
Glavna prednost uporabe prirodnog jezika je jednostavnost učenja i
potpuno prirodni prikaz algoritma. Nedostaci su vezani za
prevođenje iz prirodnog u računalni (programski) jezik jer su
rečenice često duge i treba ih zamijeniti odgovarajućim
naredbama jezika čija je sintaksa strogo definirana.
www.ckm.ba - Leonardo Miljko
16. Algoritam
Pseudokod
• Pseudokod je narativni oblik prikaza logike programa koji dizajniramo.
Rabi prirodni, neformalizirani programski jezik izmiješan s
formaliziranim strukturama iz programskog jezika na kojem se temelji
pseudokod. Primjer: Program izračunava bruto i neto plaću
P: BEGIN
unijeti broj redovnih sati u tijeku mjeseca za radnika n
unijeti satnicu za redovni rad
unijeti prekovremeni rad
unijeti cijenu prekovremenog rada
izračunati bruto plaću
unijeti postotak poreza
izračunati poreze i neto plaću radnika n
ispisati izračunati iznos poreza i neto plaće radnika n
GOTO P ;
KRAJ www.ckm.ba - Leonardo Miljko
17. Algoritam
Pseudokod
• Navedeni primjer prikazuje pseudokod kojim se opisuje algoritam
za obračuna bruto plaće, poreza i neto plaće svakog radnika.
Pseudokod u obliku jednostavnih izjavnih rečenica izražava korake
algoritma, a njih program treba slijediti u rješavanju postavljenog
problema.
• Pseudokod je kompromis između prirodnog jezika i programa jer
zadržava u opisu koraka algoritma rečenice prirodnog jezika (što je
prihvatljivo čovjeku) i nastoji ih oblikovati što bliže naredbama
programskog jezika (što je prihvatljivo računalu).
www.ckm.ba - Leonardo Miljko
18. Algoritam
Dijagrami toka (flowcharts)
• U fazi izgradnje algoritma često se koraci prikazuju pomoću
odgovarajućih simbola. To su dobro poznati dijagrami toka. Oni su
grafički prikaz koraka potrebnih za rješenje postavljenog zadatka.
• Dijagram toka se služi grafičkim simbolima koji su međusobno
povezani. Unutar simbola upisuje se riječima i simbolima
prirodnog jezika odgovarajuća operacija.
www.ckm.ba - Leonardo Miljko
20. Algoritam
Nassi-Sneidermanovi dijagrami
Nassi-Sneidermanovi dijagrami se služe grafičkim simbolima kao i
dijagrami toka. Algoritam se smješta u samo jedan pravokutnik.
Koraci algoritma se izvršavaju slijedno. Počinju prvim simbolom na
vrhu pravokutnika a potom slijede ostali simboli do posljednjeg na
dnu pravokutnika.
Simbol se služi ili pseudokodom ili prirodnim jezikom za opis naredbi.
Tri su vrste simbola: sekvencija, selekcija i petlja.
www.ckm.ba - Leonardo Miljko
21. Algoritam
Jackson strukturni dijagrami
Jacksonovi strukturni dijagrami se temelje na ideji podjele zadatka na
jednostavnije dijelove.
Imaju posebne grafičke simbole za osnovne algoritamske strukture:
sekvenciju, selekciju i petlju (iteraciju).
www.ckm.ba - Leonardo Miljko
22. Algoritam
Logičke strukture
Svaki algoritam je moguće napisati uporabom triju osnovnih
kontrolnih struktura - triju logičkih struktura:
• sekvencija
• selekcija
• petlja (iteracija).
Uporabom tih triju kontrolnih struktura mogu se pisati tzv.
strukturirani programi, odnosno takvo programiranje je
strukturirano programiranje.
• Strukturirano programiranje temeljeno je na ideji da svaki
program rabi jednostavne upravljačke strukture koje imaju jedan
ulaz i jedan izlaz.
www.ckm.ba - Leonardo Miljko
23. Algoritam
Logičke strukture
• Sekvencija
U strukturi sekvencije (ponekad se zove i slijed naredbi) naredbe se
izvršavaju jedna iza druge. Programski koraci su povezani serijski.
Jedan programski korak slijedi za drugim
www.ckm.ba - Leonardo Miljko
Korak 1
Korak 2
24. Algoritam
Logičke strukture
• Selekcija
Struktura selekcije vezana je za donošenje odluka u programu,
odnosno za ispitivanje uvjeta. Uvjet koji se testira, unaprijed je
poznat. Ovisno od rezultatu testiranja program se nastavlja
izvoditi po jednoj ili drugoj grani uvjeta.
www.ckm.ba - Leonardo Miljko
Uvjet
(IF)
THEN
(Obrada 1)
ELSE (Obrada 2)
25. Algoritam
Logičke strukture
• Iteracija (petlja)
• Iteracija se ponekad zove i struktura petlje (loop). Ona je jedan od
najsloženijih problema u proceduralnim jezicima koji utječe na
kvalitetu softvera. To je upravljačka struktura koja uzroči
izvršavanje skupine naredbi više puta.
• Struktura petlje opisuje aktivnost u kojoj se proces ponavlja dok
se postavljeni uvjet ne zadovolji.
• Struktura petlje ima više varijanti:
– For-Next u Visual Basicu,
– Do u Fortranu,
– While i For u Pascalu itd.
www.ckm.ba - Leonardo Miljko
26. Algoritam
Logičke strukture
• Iteracija (petlja)
dva oblika logičke strukture petlje:
Do While Do Until
www.ckm.ba - Leonardo Miljko
Ne
Da
Do Until
Tijelo naredbi
Tijelo naredbi
Ne
Da
Do While
Struktura
Do While
27. Algoritam
Složenost algoritma
• Algoritam je detaljan opis rješenja problema, niz slijednih i
nedvosmislenih koraka koje u konačnom vremenu može izvršiti
neki procesor.
• Algoritam je uporabljiv ako se rezultat dobije u konačnom
vremenu.
• Početni objekti su unaprijed definirani i nad njima se obavljaju
operacije.
• Rezultat algoritma su završni objekti ili rezultati .
• Algoritmi nisu iste složenosti i svrha analize složenosti algoritama
je predvidjeti vrijeme u kojem se algoritam može izvršiti.
• Krajnji cilj je izgraditi algoritam koji će biti efikasan.
www.ckm.ba - Leonardo Miljko
28. Algoritam
Složenost algoritma
Analiza algoritma
• Cilj analize algoritma je procijeniti vrijeme izvršavanja algoritma.
Vrijeme je drugi naziv za broj operacija koje program mora
obaviti. Matematički se prikazuje funkcijom oblika T(n) pri čemu n
reprezentira broj (skup) ulaznih objekata algoritma.
• Analiza može biti:
• A priori analiza nastoji unaprijed procijeniti vrijeme izvršavanja
algoritma kao funkciju određenih argumenata. A priori analiza je
neovisna o računalu, programskom jeziku i prevoditelju.
• A posteriori analiza je iskustveni pristup. To je točno vrijeme
izvršavanja algoritma koje mjeri i prikazuje računalo.
www.ckm.ba - Leonardo Miljko
29. Algoritam
Složenost algoritma
O-notacija
Na temelju danog primjera pretpostavit će se da je za algoritam n2
potrebno 10 sekundi za obraditi 1000 brojeva (ulaza). Koliko će
biti potrebno vremena tom algoritmu obraditi 10000 brojeva? U
obliku jednadžbe, vrijeme potrebno za obradu n brojeva T(n) je
umnožak neke konstante K (ta konstanta ovisi o snazi računala) i
složenosti algoritma . Složenost algoritma opisuje funkcija f(n):
T(n) = K * O ( f(n) )
gdje je T(n) vrijeme za n brojeva
K je konstanta proporcionalnosti
O ( f(n) ) je red veličine određen funkcijom f(n).
www.ckm.ba - Leonardo Miljko
30. Algoritam
• Rekurzija
Procedura se zove rekurzivna ako poziva samu sebe. Ona je prirodan
način opisa algoritma. Upravo zato mnogi se programi služe
rekurzijom. U LISP-u, Prologu, LOGO-u i drugim jezicima umjetne
inteligencije rekurzivne procedure ili funkcije pišu se relativno
jednostavno.
U jezicima treće generacije pisanje rekurzivnih procedura povezano
je s uporabom parametara pa se moraju primjenjivati razni
programerski trikovi! Najčešće se za primjer rekurzije navodi
izračunavanje faktorijela.
• Da bi se izračunao faktorijel od broja N, potrebno je slijediti korake:
• Ako je N =1, faktorijel je 1. Inače, da bi se izračunao faktorijel od N, treba
pomnožiti faktorijel(N-1) s N.
Znači, da bi se izračunao faktorijel od 3, mora se prvo izračunati faktorijel od 2, a
da bi se izračunao faktorijel od 2, mora se izračunati faktorijel od 1.
www.ckm.ba - Leonardo Miljko
31. Algoritam
• Rekurzija Zanimljiva uporaba rekurzije su tornjevi Hanoi (Towers Hanoi). U Aziji su
monasi analizirali pomjeranje zlatnih diskova s prvog na treći stup. Ti su diskovi različitih
veličina, a tijekom premještanja se moraju ispuniti sljedeći uvjeti:
• 1. pomjeraju se jedan po jedan,
• 2. veći disk nikada ne smije biti postavljen na manji.
www.ckm.ba - Leonardo Miljko
32. Algoritam
• Rekurzija
Liste i rekurzija
Lista je struktura podataka koja sadrži konačan broj elemenata.
Predstavlja jednu od moćnijih struktura kojima raspolaže i koje rabi Prolog. Rabe je
i drugi programski jezici, npr. LISP (što potječe od engl. riječi LISt Processing).
Stabla i rekurzija
Stablo je rekurzivna struktura podataka u Prologu. Rekurzivnost
stabla kao strukture podataka proizlazi iz činjenice da je svaka
grana stabla i sama stablo.
www.ckm.ba - Leonardo Miljko