algoritmi i strukture_podataka_2016-01_v01
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Algoritam Dijagrami toka (flowcharts)
www.ckm.ba - Leonardo Miljko
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
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
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
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
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)
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
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
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
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
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
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
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
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
Hvala !
Leonardo Miljko
diplomirani inženjer
elektrotehnike,
računarstva i
informatike
Pitanja?
www.ckm.ba - Leonardo Miljko