You are on page 1of 57

NAPREDNI ALGORITMI I

STRUKTURE PODATAKA
APSTRAKTNI TIP PODATAKA POLINOM
PRVO PREDAVANJE
Ciljevi kolegija
• Apstraktno razmišljanje o novom problemu
• Nalaženje rješenja novog problema
• Primjena standardnih metoda na novom problemu

2
Motivacija
• Razvoj sve sofisticiranijih programskih alata
• smanjuje se potreba za programerima kojima je osnovno
znanje kodiranje
• raste potražnja za ljudima koji znaju razmišljati o
problemu i nalaziti rješenja
• "Nismo učili kako se rješava ovaj problem" nije
opravdanje za izostanak rješenja

3
Problem vuka, koze i kupusa (1)
• Potrebno je čamcem preko rijeke prevesti vuka, kozu i
kupus.
• Čamac je toliko malen da je u njega moguće smjestiti
samo čovjeka, a s njim još ili vuka, ili kozu, ili kupus.
• Ako čovjek na obali ostavi
• vuka i kozu, onda će vuk pojesti kozu
• kozu i kupus, onda će koza pojesti kupus
• Kada je čovjek prisutan, onda su svi sigurni (nitko
nikoga neće pojesti)
• Kako je čovjek uspio prevesti svo troje na drugu obalu
rijeke?

4
Problem vuka, koze i kupusa (2)
• Vuk ne jede kupus, zbog čega je prvo potrebno
prevesti kozu. Vuka i kupus možemo ostaviti na
obali i bez čovjeka.

5
Problem vuka, koze i kupusa (3)
• Vuk ne jede kupus, zbog čega je prvo potrebno
prevesti kozu. Vuka i kupus možemo ostaviti na
obali i bez čovjeka.

• Nakon što je prevezao kozu na drugu obalu, čovjek


se vraća.

6
Problem vuka, koze i kupusa (4)
• Vuk ne jede kupus, zbog čega je prvo potrebno
prevesti kozu. Vuka i kupus možemo ostaviti na
obali i bez čovjeka.

• Nakon što je prevezao kozu na drugu obalu, čovjek


se vraća.

• Sada stavlja u čamac kupus i prevozi ga na drugu


obalu.

7
Problem vuka, koze i kupusa (5)
• Međutim, kupus i koza ne smiju ostati zajedno.
Stoga čovjek ostavlja samo kupus, a kozu vraća kod
vuka.

8
Problem vuka, koze i kupusa (6)
• Međutim, kupus i koza ne smiju ostati zajedno.
Stoga čovjek ostavlja samo kupus, a kozu vraća kod
vuka.

• Kako ne bi došlo do toga da vuk pojede kozu, čovjek


ostavlja kozu, a vuka vozi na desnu obalu.

9
Problem vuka, koze i kupusa (7)
• Međutim, kupus i koza ne smiju ostati zajedno.
Stoga čovjek ostavlja samo kupus, a kozu vraća kod
vuka.

• Kako ne bi došlo do toga da vuk pojede kozu, čovjek


ostavlja kozu, a vuka vozi na desnu obalu.

• Ostavlja vuka i kupus.

10
Problem vuka, koze i kupusa (8)
• Vraća se po kozu i prevozi je na drugu obalu rijeke.

11
Problem vuka, koze i kupusa (9)
• Vraća se po kozu i prevozi je na drugu obalu rijeke.

• Problem je riješen !

12
Problem prelaska preko mosta (1)
• Svijetom vladaju zombiji.
• U vašem društvu nalaze se još tri osobe - profesor, asistent i
spremačica.
• Zombiji trče za vama, a pred vama se nalazi most.
• Ispod mosta - golema provalija.
• Kako ćete pobjeći od zombija preko mosta?

13
Problem prelaska preko mosta (2)
• Zombijima je potrebno 17 minuta da vas dostignu
• Vašim pratiocima je potrebna različita količina vremena da
prijeđu most, a morate ih sve spasiti:
• Vi most možete prijeći za jednu minutu,
• asistent za dvije minute,
• spremačica za pet minuta,
• profesor za deset minuta.
• Preko mosta u isto vrijeme mogu prelaziti samo dvije osobe
• U posjedu ste svjetiljke koja može osvijetliti samo jedan mali
dio puta ispred vas. Osoba koja prelazi most mora biti ispred
druge osobe i držati svjetiljku ili hodati odmah iza osobe koja
drži svjetiljku. Nitko ne može prijeći most bez pomoći
svjetiljke.
• Svi moraju prijeći most prije nego što zombiji dođu do njega.
14
Problem prelaska preko mosta (3)
• Prvi prelazak
• Vi i asistent
• Dvije minute
• Vi ste brži, ali morat ćete usporiti kako bi asistent bio
ukorak s Vama

15
Problem prelaska preko mosta (4)
• Prvi prelazak
• Vi i asistent
• Dvije minute
• Vi ste brži, ali morat ćete usporiti kako bi asistent bio
ukorak s Vama
• Drugi prelazak
• Vi sami
• Jedna minuta
• Morate se vratiti po druge kako biste im predali svjetiljku

16
Problem prelaska preko mosta (5)
• Prvi prelazak
• Vi i asistent
• Dvije minute
• Vi ste brži, ali morat ćete usporiti kako bi asistent bio ukorak s
Vama
• Drugi prelazak
• Vi sami
• Jedna minuta
• Morate se vratiti po druge kako biste im predali svjetiljku
• Treći prelazak
• Profesor i spremačica
• Deset minuta
• Spremačica drži svjetiljku, dok profesor ide za njom

17
Problem prelaska preko mosta (6)
• Četvrti prelazak
• Asistent
• Dvije minute
• Asistent se vraća sa svjetiljkom po Vas

18
Problem prelaska preko mosta (7)
• Četvrti prelazak
• Asistent
• Dvije minute
• Asistent se vraća sa svjetiljkom po Vas
• Peti prelazak
• Vi i asistent
• Dvije minute
• Zajedno prelazite most i pobjegli ste zombijima !

19
Osnovni pojmovi
• strukture podataka
• skupine varijabli u nekom programu te veza među tim varijablama
• statički aspekt nekog programa - ono sa čime se radi
• algoritmi
• konačni nizovi instrukcija gdje svaka instrukcija ima jasno definirano
značenje te može biti izvršena u konačnom vremenu
• dinamički aspekt programa - ono što se radi
• tip podatka
• skup vrijednosti koje neki podatak može poprimiti
• način na koji u računalnom progamu organiziramo podatke kako bi
lakše riješili problem
• struktura podataka
• funkcije za rad s tipom podataka

20
Tipovi podataka
• programski jezik C++ podržava:
• tipove podataka
• brojevni (numerički) – cjelobrojni (int), s pomičnim zarezom
(float)
• znakovni (alfanumerički) – char
• logički - bool
• mehanizme agregacije
• polja, znakovni nizovi
• zapisi, unije
• pokazivači

21
Apstraktni tipovi podataka (ATP)
• tipovi podataka koji ne postoje ugrađeni u
programskom jeziku
• programer ih sam implementira prema potrebi
• opća taksonomija
• linearni (lista, red, stog)
• hijerarhijski (općenito stablo, binarno stablo)
• dvodimenzionalni nehijerarhijski (usmjereni i
neusmjereni matematički graf)
• skupovni (skup, prioritetni red, rječnik)
• zadaju se navođenjem jednog ili više tipova
podataka te jedne ili više operacija (funkcija)
22
Implementacija apstraktnog tipa
podataka
• konkretna realizacija apstraktnog tipa podataka u
nekom programskom jeziku
• sastoji se od:
• definicije za strukturu podataka kojom se prikazuju podaci iz
apstraktnog tipa podataka
• potprograma (funkcija) kojima se operacije iz apstraktnog tipa
podataka ostvaruju pomoću odabranih algoritama
• za isti apstraktni tip podataka obično se može smisliti
više različitih implementacija
• implementacije se razlikuju po tome što koriste različite
strukture za prikaz podataka te različite algoritme za
izvršavanje operacija

23
Dijelovi strukture podataka (1)
• ćelija je varijabla koju promatramo kao zasebnu
cjelinu, a ima svoj tip i adresu

• polje čini više ćelija istog tipa pohranjenih na


uzastopnim adresama
0
1
2
3
4
5
6
24
Dijelovi strukture podataka (2)
• zapis (slog) čini više ćelija, koje ne moraju biti istog
tipa, no koje su pohranjene na uzastopnim
adresama

• pokazivač je ćelija koja sadrži adresu ćelije na koju


pokazuje

• kursor je ćelija koja pokazuje na element nekog


polja, a sadrži indeks elementa kojeg treba pokazati

25
ATP polinom
• struktura podataka sastoji se od:
• jednodimenzionalnog polja values[n]
• jednog kursora (cjelobrojne vrijednosti) koji označava
duljinu polinoma.

26
ATP polinom

27
ATP polinom
• p(x)=3x2-2x+1 values
1 0
en -2 1
3 3 2
3
4
5
6

28
ATP polinom
• funkcije koje se izvode na ATP polinom su:
• Zero(p) - iniciranje nul-polinoma
• IsZero(p) - provjera da li je polinom nul-polinom
• Coef(p, pot) - funkcija koja vraća koeficijent u polinomu
uz zadanu potenciju
• Attach(p, pot, val) - pridruživanje vrijednosti
određenom koeficijentu
• Degree(p) - funkcija koja vraća stupanj polinoma
• Add(p1, p2, p3) - zbrajanje dva polinoma
• Mult(p1, p2, p3) - množenje dva polinoma

29
Iniciranje praznog polinoma 1/2
• Zero(p) values
1 0
en -2 1
3 3 2
3
4
5
6

30
Iniciranje praznog polinoma 2/2
• Zero(p) values
1 0
en -2 1
0 3 2
3
4
5
6

31
Pridruživanje vrijednosti
određenom koeficijentu 1/9
• Attach(p,1,2) values
1 0
en -2 1
3 3 2
3
4
5
6

32
Pridruživanje vrijednosti
određenom koeficijentu 2/9
• Attach(p,1,2) values
1 0
en 2 1
3 3 2
3
4
5
6

33
Pridruživanje vrijednosti
određenom koeficijentu 3/9
• Attach(p,5,2) values
1 0
en 2 1
3 3 2
3
4
5
6

34
Pridruživanje vrijednosti
određenom koeficijentu 4/9
• Attach(p,5,2) values
1 0
en 2 1
3 3 2
3
4
2 5
6

35
Pridruživanje vrijednosti
određenom koeficijentu 5/9
• Attach(p,5,2) values
1 0
en 2 1
6 3 2
3
4
2 5
6

36
Pridruživanje vrijednosti
određenom koeficijentu 6/9
• Attach(p,5,2) values
1 0
en 2 1
6 3 2
0 3
0 4
2 5
6

37
Pridruživanje vrijednosti
određenom koeficijentu 7/9
• Attach(p,5,0) values
1 0
en 2 1
6 3 2
0 3
0 4
2 5
6

38
Pridruživanje vrijednosti
određenom koeficijentu 8/9
• Attach(p,5,0) values
1 0
en 2 1
6 3 2
0 3
0 4
0 5
6

39
Pridruživanje vrijednosti
određenom koeficijentu 9/9
• Attach(p,5,0) values
1 0
en 2 1
3 3 2
0 3
0 4
0 5
6

40
Zbrajanje polinoma 1/6
values values values
1 0 1 0 0
2 1 en 1 1 en 1
en
2 2 4 1 2 0 2
3 1 3 3
4 4 4
5 5 5
6 6 6

n n n

41
Zbrajanje polinoma 2/6
values values values
1 0 1 0 2 0
2 1 en 1 1 en 1
en
2 2 4 1 2 0 2
3 1 3 3
4 4 4
5 5 5
6 6 6

n n n

42
Zbrajanje polinoma 3/6
values values values
1 0 1 0 2 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 0 2
3 1 3 3
4 4 4
5 5 5
6 6 6

n n n

43
Zbrajanje polinoma 4/6
values values values
1 0 1 0 2 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 0 1 2
3 1 3 3
4 4 4
5 5 5
6 6 6

n n n

44
Zbrajanje polinoma 5/6
values values values
1 0 1 0 2 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 0 1 2
3 1 3 1 3
4 4 4
5 5 5
6 6 6

n n n

45
Zbrajanje polinoma 6/6
values values values
1 0 1 0 2 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 4 1 2
3 1 3 1 3
4 4 4
5 5 5
6 6 6

n n n

46
Množenje polinoma 1/10
values values values
1 0 1 0 0
2 1 en 1 1 en 1
en
2 2 4 1 2 0 2
3 1 3 3
4 4 4
5 5 5
6 6 6

n n n

47
Množenje polinoma 2/10
values values values
1 0 1 0 0 0
2 1 en 1 1 en 0 1
en
2 2 4 1 2 5 0 2
3 1 3 0 3
4 4 0 4
5 5 5
6 6 6

n n n

48
Množenje polinoma 3/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 0 1
en
2 2 4 1 2 5 0 2
3 1 3 0 3
4 4 0 4
5 5 5
6 6 6

n n n

49
Množenje polinoma 4/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 1 1
en
2 2 4 1 2 5 0 2
3 1 3 0 3
4 4 0 4
5 5 5
6 6 6

n n n

50
Množenje polinoma 5/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 1 1
en
2 2 4 1 2 5 1 2
3 1 3 0 3
4 4 0 4
5 5 5
6 6 6

n n n

51
Množenje polinoma 6/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 1 1
en
2 2 4 1 2 5 1 2
3 1 3 1 3
4 4 0 4
5 5 5
6 6 6

n n n

52
Množenje polinoma 7/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 5 1 2
3 1 3 1 3
4 4 0 4
5 5 5
6 6 6

n n n

53
Množenje polinoma 8/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 5 3 2
3 1 3 1 3
4 4 0 4
5 5 5
6 6 6

n n n

54
Množenje polinoma 9/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 5 3 2
3 1 3 3 3
4 4 0 4
5 5 5
6 6 6

n n n

55
Množenje polinoma 10/10
values values values
1 0 1 0 1 0
2 1 en 1 1 en 3 1
en
2 2 4 1 2 5 3 2
3 1 3 3 3
4 4 2 4
5 5 5
6 6 6

n n n

56
57

You might also like