algoritmi i strukture_podataka_2016-01_v01

33
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

Upload: leonardo-miljko

Post on 22-Jan-2018

102 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Algoritmi i strukture_podataka_2016-01_v01

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

Page 2: Algoritmi i strukture_podataka_2016-01_v01

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

Page 3: Algoritmi i strukture_podataka_2016-01_v01

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

Page 4: Algoritmi i strukture_podataka_2016-01_v01

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

Page 5: Algoritmi i strukture_podataka_2016-01_v01

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

Page 6: Algoritmi i strukture_podataka_2016-01_v01

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

Page 7: Algoritmi i strukture_podataka_2016-01_v01

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

Page 8: Algoritmi i strukture_podataka_2016-01_v01

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

Page 9: Algoritmi i strukture_podataka_2016-01_v01

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

Page 10: Algoritmi i strukture_podataka_2016-01_v01

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

Page 11: Algoritmi i strukture_podataka_2016-01_v01

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

Page 12: Algoritmi i strukture_podataka_2016-01_v01

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

Page 13: Algoritmi i strukture_podataka_2016-01_v01

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

Page 14: Algoritmi i strukture_podataka_2016-01_v01

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

Page 15: Algoritmi i strukture_podataka_2016-01_v01

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

Page 16: Algoritmi i strukture_podataka_2016-01_v01

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

Page 17: Algoritmi i strukture_podataka_2016-01_v01

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

Page 18: Algoritmi i strukture_podataka_2016-01_v01

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

Page 19: Algoritmi i strukture_podataka_2016-01_v01

Algoritam Dijagrami toka (flowcharts)

www.ckm.ba - Leonardo Miljko

Page 20: Algoritmi i strukture_podataka_2016-01_v01

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

Page 21: Algoritmi i strukture_podataka_2016-01_v01

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

Page 22: Algoritmi i strukture_podataka_2016-01_v01

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

Page 23: Algoritmi i strukture_podataka_2016-01_v01

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

Page 24: Algoritmi i strukture_podataka_2016-01_v01

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)

Page 25: Algoritmi i strukture_podataka_2016-01_v01

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

Page 26: Algoritmi i strukture_podataka_2016-01_v01

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

Page 27: Algoritmi i strukture_podataka_2016-01_v01

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

Page 28: Algoritmi i strukture_podataka_2016-01_v01

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

Page 29: Algoritmi i strukture_podataka_2016-01_v01

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

Page 30: Algoritmi i strukture_podataka_2016-01_v01

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

Page 31: Algoritmi i strukture_podataka_2016-01_v01

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

Page 32: Algoritmi i strukture_podataka_2016-01_v01

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

Page 33: Algoritmi i strukture_podataka_2016-01_v01

Hvala !

Leonardo Miljko

diplomirani inženjer

elektrotehnike,

računarstva i

informatike

Pitanja?

www.ckm.ba - Leonardo Miljko