algoritmi i strukture podataka

42
07.02.22 Algoritmi i Algoritmi i strukture podataka strukture podataka Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/ Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović

Upload: ethan-chase

Post on 31-Dec-2015

55 views

Category:

Documents


8 download

DESCRIPTION

Algoritmi i strukture podataka. Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algoritmi i strukture podataka

19.04.23

Algoritmi i strukture podatakaAlgoritmi i strukture podataka

Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

Prof. dr. sc. Damir KalpićProf. dr. sc. Vedran MornarProf. dr. sc. Krešimir FertaljDoc. dr. sc. Gordan GledecDr. sc. Zvonimir VanjakDr. sc. Ivica Botički, dipl. ing.Mr. sc. Boris Milašinović

Page 2: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 2 / 4219.04.23

Creative CommonsCreative Commons

slobodno smijete:slobodno smijete: dijelitidijeliti — umnožavati, distribuirati i javnosti priopćavati djelo — umnožavati, distribuirati i javnosti priopćavati djelo remiksiratiremiksirati — prerađivati djelo — prerađivati djelo

pod sljedećim uvjetima:pod sljedećim uvjetima: imenovanjeimenovanje. Morate priznati i označiti autorstvo djela na način kako je . Morate priznati i označiti autorstvo djela na način kako je

specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). korištenje njegova djela imate njegovu izravnu podršku).

nekomercijalnonekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. . Ovo djelo ne smijete koristiti u komercijalne svrhe. dijeli pod istim uvjetimadijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate . Ako ovo djelo izmijenite, preoblikujete ili stvarate

koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.

Tekst licencije preuzet je s http://creativecommons.org/.

Page 3: Algoritmi i strukture podataka

19.04.23

RekurzijaRekurzija

Page 4: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 4 / 4219.04.23

Osnovna ideja rekurzijeOsnovna ideja rekurzije

procedura poziva samu sebeprocedura poziva samu sebe mora postojati završetak!mora postojati završetak!

Zašto se dug napravljen kreditnom karticom ne može platiti istom Zašto se dug napravljen kreditnom karticom ne može platiti istom kreditnom karticom?kreditnom karticom?

rekurzivni programi su kraći, ali je izvođenje programa duljerekurzivni programi su kraći, ali je izvođenje programa dulje neki jezici (npr. stare verzije jezika FORTRAN) ne podržavaju rekurzijuneki jezici (npr. stare verzije jezika FORTRAN) ne podržavaju rekurziju

za pohranjivanje rezultata i povratak iz rekurzije koristi se struktura za pohranjivanje rezultata i povratak iz rekurzije koristi se struktura podataka stogpodataka stog

rekurzija:rekurzija:

vidi: rekurzijavidi: rekurzija

rekurzija:rekurzija:

ako nije jasno što je ako nije jasno što je to, vidi: rekurzijato, vidi: rekurzija

Page 5: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 5 / 3819.04.23

Elementarna rekurzija i sistemski stogElementarna rekurzija i sistemski stog

......

f(1);f(1);

......

void f(int i)void f(int i)

{{

int v;int v;

f(i+1);f(i+1);

return;return;

}}

void f(int i)void f(int i)

{{

int v;int v;

f(i+1);f(i+1);

return;return;

}}

void f(int i)void f(int i)

{{

int v;int v;

f(i+1);f(i+1);

return;return;

}}

void f(int i)void f(int i)

{{

int v;int v;

f(i+1);f(i+1);

return;return;

}}

11pov.adr.pov.adr.

vv

11pov.adr.pov.adr.

vv22

pov.adr.pov.adr.vv

11pov.adr.pov.adr.

vv22

pov.adr.pov.adr.vv33

pov.adr.pov.adr.vv

11pov.adr.pov.adr.

vv22

pov.adr.pov.adr.vv33

pov.adr.pov.adr.vv44

pov.adr.pov.adr.vv

ElementarnaRekurzijaElementarnaRekurzija

mainmain ff f’f’ f’’f’’ f’’’f’’’

Page 6: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 6 / 4219.04.23

Izračunavanje faktorijelaIzračunavanje faktorijela

jedan od jednostavnih rekurzivnih algoritama jest izračunavanje jedan od jednostavnih rekurzivnih algoritama jest izračunavanje n!n! za za n >= 0n >= 0 0! = 10! = 1 1! = 11! = 1 n! = n* (n-1)!n! = n* (n-1)!

primjer: 4!primjer: 4!k = fakt (4);k = fakt (4);

= 4 * fakt (3);= 4 * fakt (3);

= 3 * fakt (2);= 3 * fakt (2);

= 2 * fakt (1);= 2 * fakt (1);

= 1 = 1

int fakt(int n){int fakt(int n){

if (n <= 1) {if (n <= 1) {

return 1;return 1;

} else {} else {

return n * fakt(n-1);return n * fakt(n-1);

}}

}}

Page 7: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 7 / 3819.04.23

Izračuvananje faktorijelaIzračuvananje faktorijela

......

i=fakt(3);i=fakt(3);

......

int fakt(int n){int fakt(int n){

if (n <= 1) {if (n <= 1) {

return 1;return 1;

} else {} else {

return return

n * fakt(n-1);n * fakt(n-1);

}}

}}

33

FaktorijeliFaktorijeli

mainmainint fakt(int n){int fakt(int n){

if (n <= 1) {if (n <= 1) {

return 1;return 1;

} else {} else {

return return

n * fakt(n-1);n * fakt(n-1);

}}

}}

int fakt(int n){int fakt(int n){

if (n <= 1) {if (n <= 1) {

return 1;return 1;

} else {} else {

return return

n * fakt(n-1);n * fakt(n-1);

}}

}}

faktfakt fakt’’fakt’’fakt’fakt’

3322

332211

1122

66

Page 8: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 8 / 4219.04.23

Zadaci za vježbuZadaci za vježbu

Napisati funkciju koja prima dva cjelobrojna argumenta Napisati funkciju koja prima dva cjelobrojna argumenta xx i i yy i vraća i vraća preko imena vrijednost preko imena vrijednost xxyy.. PotencijaRekurzijomPotencijaRekurzijom

Poziv funkcije:Poziv funkcije:k = pot(2,5);k = pot(2,5);

= 2*pot(2,4)= 2*pot(2,4)

= 2*pot(2,3)= 2*pot(2,3)

= 2*pot(2,2)= 2*pot(2,2)

= 2*pot(2,1)= 2*pot(2,1)

= 2*pot(2,0)= 2*pot(2,0)

= 1= 1

Page 9: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 9 / 3819.04.23

Sadržaj stogaSadržaj stoga

pot(2,5)pot(2,5) pot(2,4)pot(2,4) pot(2,3)pot(2,3) pot(2,2)pot(2,2) pot(2,1)pot(2,1) pot(2,0)pot(2,0) returnreturn

11return return

2*12*1return return

2*22*2return return

2*42*4return return

2*82*8return return 2*162*16

(2,0)(2,0) 11

(2,1)(2,1) (2,1)(2,1) (2,1)(2,1) 22

(2,2)(2,2) (2,2)(2,2) (2,2)(2,2) (2,2)(2,2) (2,2)(2,2) 44

(2,3)(2,3) (2,3)(2,3) (2,3)(2,3) (2,3)(2,3) (2,3)(2,3) (2,3)(2,3) (2,3)(2,3) 88

(2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) (2,4)(2,4) 1616

(2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) (2,5)(2,5) 3232

Page 10: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 10 / 4219.04.23

Zadaci za vježbuZadaci za vježbu

Što bi se dogodilo kada bi bila izostavljena linija:Što bi se dogodilo kada bi bila izostavljena linija:if (y <= 0) return 1;if (y <= 0) return 1;

funkcija bi samu sebe pozivala beskonačno puta i nikada ne bi vratila neku vrijednost u funkcija bi samu sebe pozivala beskonačno puta i nikada ne bi vratila neku vrijednost u glavni programglavni program

u gornjem primjeru dogodilo bi se ovo:u gornjem primjeru dogodilo bi se ovo:

pot(2,5);pot(2,5); = 2*pot(2,4)= 2*pot(2,4) = 2*pot(2,3)= 2*pot(2,3) = 2*pot(2,2)= 2*pot(2,2) = 2*pot(2,1)= 2*pot(2,1) = 2*pot(2,0)= 2*pot(2,0) = 2*pot(2,-1)= 2*pot(2,-1) = 2*pot(2,-2)= 2*pot(2,-2) = 2*pot(2,-3)= 2*pot(2,-3) ......

Page 11: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 11 / 4219.04.23

Zadaci za vježbuZadaci za vježbu

Rješenje bez rekurzije:Rješenje bez rekurzije:

Napisati funkcije koja ispisuju sve brojeve do ili od Napisati funkcije koja ispisuju sve brojeve do ili od nn na razne načine na razne načine RekurzRekurzivniIspisRedomivniIspisRedom

Napisati rekurzivnu funkciju koja računa Napisati rekurzivnu funkciju koja računa n-tin-ti član aritmetičkog nizačlan aritmetičkog niza AritmetickiNizAritmetickiNiz

int pot(long x, long y) {int pot(long x, long y) {

int retval = 1;int retval = 1;

int i;int i;

for (i = 0; i < y; i++) retval *= x;for (i = 0; i < y; i++) retval *= x;

return retval;return retval;

}}

Page 12: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 12 / 3819.04.23

Leonardo Pisano Fibonacci Leonardo Pisano Fibonacci

rođen: 1170 (vjerojatno) Pisa rođen: 1170 (vjerojatno) Pisa umro: 1250 (vjerojatno) Pisaumro: 1250 (vjerojatno) Pisa

godine 1202godine 1202. Liber abaci. Liber abaci : : uvođenje hindu-arapskih brojevauvođenje hindu-arapskih brojeva simultane linearne jednadžbesimultane linearne jednadžbe trgovački matematički problemitrgovački matematički problemi izračun profitaizračun profita preračunavanje valutapreračunavanje valuta

Page 13: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 13 / 3819.04.23

Arapski brojeviArapski brojevi

ne poklapaju se s našim ne poklapaju se s našim “arapskim” brojevima“arapskim” brojevima

najveće dostignuće – uvođenje najveće dostignuće – uvođenje nule i težinskih mjestanule i težinskih mjesta

٠٠ 0 Sifer 0 Sifer ١١ 1 Wahid1 Wahid٢٢ 2 Ithinin 2 Ithinin ٣٣ 3 Thalatha 3 Thalatha ٤٤ 4 Arba'a 4 Arba'a ٥٥ 5 Kamisa 5 Kamisa ٦٦ 6 Sita 6 Sita ٧٧ 7 Saba'a 7 Saba'a ٨٨ 8 Thamania 8 Thamania ٩٩ 9 Tisa'a 9 Tisa'a ٠٠ ١١ 10 Ashara10 Ashara

Page 14: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 14 / 4219.04.23

Fibonaccijevi brojeviFibonaccijevi brojevi

1, 1, 2, 3, 5, 8, 13, 21, 34,... (koji je sljedeći?)1, 1, 2, 3, 5, 8, 13, 21, 34,... (koji je sljedeći?)FF00=F=F11=1=1

FFii=F=Fi-2i-2+F+Fi-1i-1; i>1; i>1 program je vrlo kratak i potpuno odgovara matematičkoj definicijiprogram je vrlo kratak i potpuno odgovara matematičkoj definiciji

– učinkovitost je vrlo niskaučinkovitost je vrlo niska

int F(int n) {int F(int n) {

if (n <= 1) if (n <= 1)

return 1;return 1;

elseelse

return F(n-2) + F(n-1);return F(n-2) + F(n-1);

}}

Page 15: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 15 / 4219.04.23

Fibonaccijevi brojevi – izvođenje programaFibonaccijevi brojevi – izvođenje programaF(0) se izračunava 5 putaF(0) se izračunava 5 putaF(1) se izračunava 8 putaF(1) se izračunava 8 putaF(2) se izračunava 5 putaF(2) se izračunava 5 putaF(3) se izračunava 3 putaF(3) se izračunava 3 putaF(4) se izračunava 2 putaF(4) se izračunava 2 putaF(5) se izračunava 1 putaF(5) se izračunava 1 putaF(6) se izračunava 1 putaF(6) se izračunava 1 puta

Ukupno : 25Ukupno : 25

Fibonacci

F(4)F(4)

F(6)F(6)

F(5)F(5)

F(0)F(0)

F(2)F(2)

22F(1)F(1)11

33 F(3)F(3)

F(1)F(1) F(2)F(2)44

F(0)F(0) F(1)F(1)55 66

77

88

99

F(3)F(3)

F(1)F(1) F(2)F(2)

F(0)F(0) F(1)F(1)1111

1313

1414 F(4)F(4)

F(0)F(0)

F(2)F(2)

1616F(1)F(1)1515

1717 F(3)F(3)

F(1)F(1) F(2)F(2)1818

F(0)F(0) F(1)F(1)1919 2020

2121

2222

2323

1212

1010

2424

2525

11 11

22

11 11

2211

33

55

11 11 11 11

11 11

11 22

33222211

33

88

1313

55

Page 16: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 16 / 4219.04.23

Najveća zajednička mjeraNajveća zajednička mjera

jedan od najstarijih algoritama je Euklidov postupak za pronalaženjejedan od najstarijih algoritama je Euklidov postupak za pronalaženje najveće zajedničke mjerenajveće zajedničke mjere ((nzmnzm) dva nenegativna cijela broja:) dva nenegativna cijela broja:

Euklid

ako je ako je bb = 0 = 0

nzmnzm = = aa

inačeinače

nzmnzm = najveća zajednička mjera od = najveća zajednička mjera od bb i i

ostatka dijeljenja ostatka dijeljenja a a sa sa bb

Page 17: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 17 / 4219.04.23

Najveća zajednička mjera – primjer i funkcijaNajveća zajednička mjera – primjer i funkcija

primjer:primjer:nzm(22,8) = nzm(8,6) = nzm(6,2) = nzm(2,0) = 2nzm(22,8) = nzm(8,6) = nzm(6,2) = nzm(2,0) = 2

nzm(21,13) = nzm(13,8) = nzm(8,5) = nzm(5,3) = nzm(21,13) = nzm(13,8) = nzm(8,5) = nzm(5,3) = nzm(3,2) = nzm(2,1) = nzm(1,0) nzm(3,2) = nzm(2,1) = nzm(1,0) = 1= 1

nzm (21,0) = 21nzm (21,0) = 21

nzm (0,21) = nzm (21,0) = 21nzm (0,21) = nzm (21,0) = 21 rekurzivna funkcija:rekurzivna funkcija:

int nzm (int a, int b) {int nzm (int a, int b) {

if(b == 0) return a;if(b == 0) return a;

return nzm (b, a % b);return nzm (b, a % b);

}}

Page 18: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 18 / 4219.04.23

Traženje člana poljaTraženje člana polja

Rekurzivni postupak za traženje indeksa prvog člana Rekurzivni postupak za traženje indeksa prvog člana jednodimenzionalnog polja od jednodimenzionalnog polja od nn članova koji ima vrijednost članova koji ima vrijednost xx. Ako . Ako takvoga nema, rezultat je takvoga nema, rezultat je -1-1..

pretraživanje počinje pozivom funkcijepretraživanje počinje pozivom funkcije trazi(A, x, n, 0)trazi(A, x, n, 0)..

Rekurzija

int trazi (tip A[], tip x, int n, int i) {int trazi (tip A[], tip x, int n, int i) {

if(i >= n) return -1;if(i >= n) return -1;

if(A[i] == x) return i;if(A[i] == x) return i;

return trazi (A, x, n, i+1);return trazi (A, x, n, i+1);

}}

Page 19: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 19 / 4219.04.23

Pretraživanje s ograničavačemPretraživanje s ograničavačem

pretraživanje je brže ako se prethodno u polje prošireno za jedan pretraživanje je brže ako se prethodno u polje prošireno za jedan član stavi tzv. ograničivač (član stavi tzv. ograničivač (sentinelsentinel)) A[n] = x;A[n] = x;

poziv: poziv: tip i; tip i;

A[n] = x;A[n] = x;

if ((i = if ((i = trazi1 (A, x, 0)trazi1 (A, x, 0)) == n) ...) == n) ...

int trazi1 (tip A[], tip x, int i){int trazi1 (tip A[], tip x, int i){

if(A[i] == x)if(A[i] == x) return i;return i;

return trazi1 (A, x, i+1)return trazi1 (A, x, i+1)

}}

Page 20: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 20 / 4219.04.23

Traženje najvećeg člana poljaTraženje najvećeg člana polja

određivanje indeksa najvećeg člana u polju od određivanje indeksa najvećeg člana u polju od nn članova članova

Rekurzija

int maxclan (int A[], int i, int n) {int maxclan (int A[], int i, int n) {

int imax;int imax;

if (i >= n-1) return n-1;if (i >= n-1) return n-1;

imax = maxclan (A, i + 1, n);imax = maxclan (A, i + 1, n);

if (A[i] > A[imax]) return i;if (A[i] > A[imax]) return i;

return imax;return imax;

}}

Page 21: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 21 / 4219.04.23

Traženje najvećeg člana poljaTraženje najvećeg člana polja

određivanje najvećeg člana u polju od određivanje najvećeg člana u polju od nn članova članova Zašto je ova izvedba neučinkovita?Zašto je ova izvedba neučinkovita?

#define maxof(a,b) ((a) > (b) ? (a) : (b)) #define maxof(a,b) ((a) > (b) ? (a) : (b))

int maxclan2 (int A[], int i, int n) {int maxclan2 (int A[], int i, int n) {

if (i >= n-1) return A[i];if (i >= n-1) return A[i];

else return maxof(A[i], maxclan2 (A, i + 1, n));else return maxof(A[i], maxclan2 (A, i + 1, n));

}}

Rekurzija

Page 22: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 22 / 4219.04.23

Karakteristike rekurzijeKarakteristike rekurzije

osnovni slučajeviosnovni slučajevi uvijek moraju postojati osnovni slučajevi koji se rješavaju bez rekurzijeuvijek moraju postojati osnovni slučajevi koji se rješavaju bez rekurzije

napredovanjenapredovanje za slučajeve koji se rješavaju rekurzivno, svaki sljedeći rekurzivni poziv za slučajeve koji se rješavaju rekurzivno, svaki sljedeći rekurzivni poziv

mora se približiti osnovnim slučajevimamora se približiti osnovnim slučajevima pravilo projektiranjapravilo projektiranja

podrazumijeva se da svaki rekurzivni poziv funkcionirapodrazumijeva se da svaki rekurzivni poziv funkcionira pravilo neponavljanjapravilo neponavljanja

ne valja dopustiti da se isti problem rješava odvojenim rekurzivnim pozivimane valja dopustiti da se isti problem rješava odvojenim rekurzivnim pozivima to rezultira umnažanjem posla, vidi npr. Fibonaccijeve brojeveto rezultira umnažanjem posla, vidi npr. Fibonaccijeve brojeve

Page 23: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 23 / 4219.04.23

Primjer pogreškePrimjer pogreške

za vrijednostza vrijednost n = 1n = 1 rekurzivni poziv je opet s argumentom rekurzivni poziv je opet s argumentom 11 nema napredovanja prema osnovnom slučajunema napredovanja prema osnovnom slučaju

program ne radi niti za druge vrijednosti argumenta: program ne radi niti za druge vrijednosti argumenta: npr. zanpr. za n = 4n = 4, , rekurzivno se poziva rekurzivno se poziva loslos s argumentom s argumentom 4/3 +1 = 4/3 +1 = 22, zatim, zatim 2/3 +1 = 12/3 +1 = 1 i dalje stalnoi dalje stalno 1/3 +1 = 11/3 +1 = 1

int los (int n) {int los (int n) {

if (n == 0) return 0;if (n == 0) return 0;

return los (n / 3 + 1) + n - 1;return los (n / 3 + 1) + n - 1;

}}

Page 24: Algoritmi i strukture podataka

19.04.23

RekurzijaRekurzija

Zadaci za vježbuZadaci za vježbu

Page 25: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 25 / 4219.04.23

KamateKamate

Zadana suma novaca oročena je u banci na zadani broj godina uz Zadana suma novaca oročena je u banci na zadani broj godina uz zadanu godišnju kamatnu stopu. Napisati program koji računa zadanu godišnju kamatnu stopu. Napisati program koji računa dobivenu sumu nakon isteka oročenja.dobivenu sumu nakon isteka oročenja.

KamateKamate

Page 26: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 26 / 4219.04.23

PremetaljkaPremetaljka

premetaljkapremetaljka (anagram)– riječ u kojoj su permutirana sva slova (anagram)– riječ u kojoj su permutirana sva slova anagrami od PAS: PAS, PSA, APS, anagrami od PAS: PAS, PSA, APS, ASPASP, SAP, SPA, SAP, SPA za riječ od za riječ od nn različitih slova ima različitih slova ima n!n! mogućih permutacija mogućih permutacija

kako to postićikako to postići:: uvijek se premeće uvijek se premeće n-1n-1 slova s desne straneslova s desne strane kao prvo slovo treba rotirati svih kao prvo slovo treba rotirati svih nn slova, pri čemu se sva slova pomiču za slova, pri čemu se sva slova pomiču za

jedno mjesto ulijevo, osim prvog, koje odlazi na krajnje desno mjestojedno mjesto ulijevo, osim prvog, koje odlazi na krajnje desno mjesto ovi koraci se ponavljaju ovi koraci se ponavljaju nn puta puta

rotiranjem slova postiže se da svako slovo može biti početnorotiranjem slova postiže se da svako slovo može biti početno dok je izabrano slovo početno, sva ostala slova se premećudok je izabrano slovo početno, sva ostala slova se premeću

osnovni slučaj: treba premetnuti jedno slovoosnovni slučaj: treba premetnuti jedno slovo PremetaljkaPremetaljka

Page 27: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 27 / 4219.04.23

ObrtaljkaObrtaljka

Napišite program koji će rekurzivno provjeriti je li zadana riječ ili Napišite program koji će rekurzivno provjeriti je li zadana riječ ili rečenica rečenica obrtaljkaobrtaljka (palindrom). U ulaznom nizu podataka zanemarite (palindrom). U ulaznom nizu podataka zanemarite razmak i sve znakove interpunkcije.razmak i sve znakove interpunkcije. primjeri: primjeri:

– UDOVICA BACI VODUUDOVICA BACI VODU– ON VIDI DIVNOON VIDI DIVNO– U RIMU UMIRUU RIMU UMIRU– ANA NABRA PAR BANANAANA NABRA PAR BANANA

uputa: ako u palindromu izbacite prvo i posljednje slovo, preostali tekst uputa: ako u palindromu izbacite prvo i posljednje slovo, preostali tekst također mora biti obrtaljkatakođer mora biti obrtaljka

ObrtaljkaObrtaljka

Page 28: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 28 / 4219.04.23

Hanojski tornjeviHanojski tornjevi

Postoje štapovi Postoje štapovi II (izvor), (izvor), OO (odredište), (odredište), PP (pomoćni). Na prvom štapu ( (pomoćni). Na prvom štapu (II) ima ) ima nn diskova različite veličine postavljenih tako da veći nikad ne dolazi iznad manjeg. diskova različite veličine postavljenih tako da veći nikad ne dolazi iznad manjeg. Uz minimalni broj operacija preselite sve diskove na Uz minimalni broj operacija preselite sve diskove na OO, jedan po jedan. Disk se , jedan po jedan. Disk se smije postaviti ili na prazan štap ili tako da je manji disk na većem. smije postaviti ili na prazan štap ili tako da je manji disk na većem.

algoritam rješenja:algoritam rješenja: ignorirati donji (najveći) disk i riješiti problem za ignorirati donji (najveći) disk i riješiti problem za n-1n-1 disk, ali sa štapa disk, ali sa štapa II na štap na štap PP koristeći koristeći

OO kao pomoćni kao pomoćni sada se najveći disk nalazi na sada se najveći disk nalazi na II, a ostalih , a ostalih n-1n-1 na na PP preseliti najveći disk sa preseliti najveći disk sa II na na OO preseliti preseliti n-1n-1 disk sa disk sa PP na na OO koristeći koristeći II kao pomoćni (problem je već riješen za kao pomoćni (problem je već riješen za n-1n-1 disk) disk)

HanoiHanoi

Page 29: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 29 / 4219.04.23

Osam kraljicaOsam kraljica

Napisati funkciju koja će pronaći položaj 8 kraljica na šahovskoj Napisati funkciju koja će pronaći položaj 8 kraljica na šahovskoj ploči, tako da se one međusobno ne napadaju.ploči, tako da se one međusobno ne napadaju.

algoritam rješenja:algoritam rješenja: promatramo stupce na šahovskoj ploči od prvog prema zadnjempromatramo stupce na šahovskoj ploči od prvog prema zadnjem u svaki postavljamo jednu kraljicuu svaki postavljamo jednu kraljicu promatramo ploču u situaciji kada je već postavljeno promatramo ploču u situaciji kada je već postavljeno ii kraljica (u i različitih kraljica (u i različitih

stupaca) koje se međusobno ne napadajustupaca) koje se međusobno ne napadaju želimo postaviti želimo postaviti ii ++ 11 kraljicu tako da ona ne napada niti jednu od već kraljicu tako da ona ne napada niti jednu od već

postavljenih kraljica i da se ostale kraljice mogu postaviti uz uvjet postavljenih kraljica i da se ostale kraljice mogu postaviti uz uvjet nenapadanjanenapadanja

napomena:napomena: postoje 92 različita rješenjapostoje 92 različita rješenja

KraljiceKraljice

Page 30: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 30 / 4219.04.23

Obilazak šahovske ploče konjem (Knight’s Tour)Obilazak šahovske ploče konjem (Knight’s Tour)

Napišite program koji će ispisati put konja na šahovskoj ploči, tako Napišite program koji će ispisati put konja na šahovskoj ploči, tako da na svako polje stane samo jednom. Put konja započnite u da na svako polje stane samo jednom. Put konja započnite u gornjem lijevom polju (A8).gornjem lijevom polju (A8). konj se kreće u obliku slova L, na slici su crvenom bojom označena polja na konj se kreće u obliku slova L, na slici su crvenom bojom označena polja na

koja se konj smije pomaknuti s trenutnog položajakoja se konj smije pomaknuti s trenutnog položaja ima nekoliko milijardi rješenjaima nekoliko milijardi rješenja 122 milijuna su zatvorena putanja122 milijuna su zatvorena putanja

KonjKonj

Page 31: Algoritmi i strukture podataka

19.04.23

RekurzijaRekurzija

Složenost pri rekurzijiSloženost pri rekurziji

Page 32: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 32 / 4219.04.23

Primjer za različite složenosti istog problema (M.A. Weiss) – 1 Primjer za različite složenosti istog problema (M.A. Weiss) – 1

Zadano je polje cijelih brojeva AZadano je polje cijelih brojeva A00, A, A22,…,A,…,An-1n-1. Brojevi mogu biti i . Brojevi mogu biti i negativni. Potrebno je pronaći najveću vrijednost sume niza brojeva. negativni. Potrebno je pronaći najveću vrijednost sume niza brojeva. Pretpostavit će se da je najveća suma 0 ako su svi brojevi negativni.Pretpostavit će se da je najveća suma 0 ako su svi brojevi negativni.

MaxPodSumaNiza3MaxPodSumaNiza3 O(nO(n33)) Ispituju se svi mogući podnizovi. U vanjskoj varira se prvi član podniza od Ispituju se svi mogući podnizovi. U vanjskoj varira se prvi član podniza od

nultog do zadnjeg. U srednjoj petlji varira se zadnji član podniza od prvog nultog do zadnjeg. U srednjoj petlji varira se zadnji član podniza od prvog člana do zadnjega člana polja. U unutrašnjoj petlji varira se duljina niza od člana do zadnjega člana polja. U unutrašnjoj petlji varira se duljina niza od prvog člana do zadnjeg člana. prvog člana do zadnjeg člana.

Sve 3 petlje se za najgori slučaj obavljaju Sve 3 petlje se za najgori slučaj obavljaju nn puta. Zbog toga je apriorna puta. Zbog toga je apriorna složenost složenost O(nO(n33) ) ..

RazneSlozenostiRazneSlozenosti

Page 33: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 33 / 4219.04.23

Primjer za različite složenosti istog problema – 2 Primjer za različite složenosti istog problema – 2

MaxPodSumaNiza2MaxPodSumaNiza2 O(nO(n22)) ako uočimo da vrijedi: ako uočimo da vrijedi:

složenost se može reducirati uklanjanjem jedne petljesloženost se može reducirati uklanjanjem jedne petlje

1j j

k j kk i k i

A A A

RazneSlozenostiRazneSlozenosti

Page 34: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 34 / 4219.04.23

Primjer za različite složenosti istog problema – 3Primjer za različite složenosti istog problema – 3

MaxPodSumaMaxPodSuma O(nlogO(nlog22n)n) relativno složeni rekurzivni postupakrelativno složeni rekurzivni postupak kad ne bi bilo i boljeg (linearnog) rješenja, ovo bi bio dobar primjer snage kad ne bi bilo i boljeg (linearnog) rješenja, ovo bi bio dobar primjer snage

rekurzije i postupka podijeli-pa-vladaj (divide-and-conquer).rekurzije i postupka podijeli-pa-vladaj (divide-and-conquer). Ako se ulazno polje podijeli približno po sredini, rješenje može biti takvo da Ako se ulazno polje podijeli približno po sredini, rješenje može biti takvo da

je maksimalna suma u lijevom dijelu polja, ili je u desnom dijelu polja ili je maksimalna suma u lijevom dijelu polja, ili je u desnom dijelu polja ili prolazi kroz oba dijela. Prva dva slučaja mogu biti riješena rekurzivno. prolazi kroz oba dijela. Prva dva slučaja mogu biti riješena rekurzivno. Zadnji slučaj se može realizirati tako da se nađe najveća suma u lijevom Zadnji slučaj se može realizirati tako da se nađe najveća suma u lijevom dijelu koja uključuje njegov zadnji član i najveća suma u desnom dijelu koja dijelu koja uključuje njegov zadnji član i najveća suma u desnom dijelu koja uključuje njegov prvi član. Te se dvije sume zbroje i uspoređuju s one prve uključuje njegov prvi član. Te se dvije sume zbroje i uspoređuju s one prve dvije. dvije.

Page 35: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 35 / 4219.04.23

Primjer za različite složenosti istog problema – 4Primjer za različite složenosti istog problema – 4

Najveća lijeva suma je od članova 0 do 2 i iznosi 6. Najveća desna Najveća lijeva suma je od članova 0 do 2 i iznosi 6. Najveća desna suma je od članova 5 do 6 i iznosi 8. Najveća lijeva suma koja suma je od članova 5 do 6 i iznosi 8. Najveća lijeva suma koja uključuje zadnji član na lijevo je od 0 do 3 člana i iznosi 4, a desno uključuje zadnji član na lijevo je od 0 do 3 člana i iznosi 4, a desno od 4 do 6 člana i iznosi 7. Ukupno to daje sumu 11 koja je onda i od 4 do 6 člana i iznosi 7. Ukupno to daje sumu 11 koja je onda i najveća.najveća. pozivni program za početne rubove zadaje pozivni program za početne rubove zadaje 00 i i n-1n-1

44 -3-3 55 -2-2 -1-1 22 66 -2-2

00 11 22 33 44 55 66 77

Desni dioDesni dioLijevi dioLijevi dio

Page 36: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 36 / 4219.04.23

Primjer za različite složenosti istog problema – 5Primjer za različite složenosti istog problema – 5

Programski kôd je relativno složen, ali daje za red veličine bolje Programski kôd je relativno složen, ali daje za red veličine bolje rezultate od prethodnoga. Znači da rezultate od prethodnoga. Znači da kraći kôd ne implicira i bolji kôd!kraći kôd ne implicira i bolji kôd!

Ako bi Ako bi nn bio potencija od bio potencija od 2 2 intuitivno se vidi da će sukcesivnih intuitivno se vidi da će sukcesivnih raspolavljanja biti raspolavljanja biti loglog22 n n. To će se detaljnije dokazivati kasnije kod . To će se detaljnije dokazivati kasnije kod

binarnih stabala. Budući da kroz postupak prolazi binarnih stabala. Budući da kroz postupak prolazi nn podataka, podataka, imamo imamo O(n logO(n log22n) n) ..

Općenito se može reći da je trajanje algoritma Općenito se može reći da je trajanje algoritma O(logO(log22n)n) ako u ako u

vremenu vremenu O(O(11)) podijeli veličinu problema (obično ga raspolovi). podijeli veličinu problema (obično ga raspolovi). Ako u pojedinom koraku reducira problem za Ako u pojedinom koraku reducira problem za 11, onda je njegovo , onda je njegovo

trajanje trajanje O(n) O(n) ..

Page 37: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 37 / 4219.04.23

Primjer za različite složenosti istog problema – 6Primjer za različite složenosti istog problema – 6

MaxPodSumaNiza1MaxPodSumaNiza1 O(n)O(n) zbrajaju svi članovi polja redom, a pamti se ona suma koja je u cijelom tijeku zbrajaju svi članovi polja redom, a pamti se ona suma koja je u cijelom tijeku

tog postupka bila najvećatog postupka bila najveća

Page 38: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 38 / 4219.04.23

Analiza a posterioriAnaliza a posteriori

Primjer: izračunati Primjer: izračunati modmod sortiranog cjelobrojnog polja, tj. odrediti član sortiranog cjelobrojnog polja, tj. odrediti član polja koji se najčešće pojavljuje i prebrojati njegovu učestalost.polja koji se najčešće pojavljuje i prebrojati njegovu učestalost. ModPoljaModPolja mode0mode0 izravno rješavanjeizravno rješavanje rmode0rmode0 rekurzivni postupak rekurzivni postupak rmode1rmode1 rekurzivni postupak transformiran u iterativni rekurzivni postupak transformiran u iterativni

Sva tri postupka imajuSva tri postupka imaju vrijeme izvođenjavrijeme izvođenja (n) (n). Koji je najbolji?. Koji je najbolji?

Page 39: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 39 / 4219.04.23

rmode0rmode0

Zamislimo da je u polju od Zamislimo da je u polju od nn članova članova a[0:n-1]a[0:n-1] izračunat mod i izračunat mod i učestalost učestalost ff za prvih za prvih n-1n-1 članova polja. Pod kojim uvjetima zadnji članova polja. Pod kojim uvjetima zadnji član polja može promijeniti mod? Ako je član polja može promijeniti mod? Ako je a[n-1] != a[n-2]a[n-1] != a[n-2] niti mod niti učestalost se ne mijenjaju. Ako jest jednak, kako niti mod niti učestalost se ne mijenjaju. Ako jest jednak, kako razlikovati između 3 moguća slučaja:razlikovati između 3 moguća slučaja: a) nađen je novi moda) nađen je novi mod b) mod je isti, ali se povećava učestalost b) mod je isti, ali se povećava učestalost ff c) nema promjene ni moda niti učestalosti c) nema promjene ni moda niti učestalosti

odgovor ovisi o tome je li odgovor ovisi o tome je li a[n-1] == a[n-1 - f]a[n-1] == a[n-1 - f] ako jest, onda ima ako jest, onda ima n-1 - (n-1 - f) +1 = f + 1n-1 - (n-1 - f) +1 = f + 1

pojavljivanja vrijednosti koje je u pojavljivanja vrijednosti koje je u a[n-1]a[n-1]. To znači da je ta vrijednost . To znači da je ta vrijednost sigurno ili novi mod ili stari mod s uvećanom učestalošću sigurno ili novi mod ili stari mod s uvećanom učestalošću ff..

Page 40: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 40 / 4219.04.23

Zadaci za vježbuZadaci za vježbu

primjeri rekurzivnih poziva funkcijeprimjeri rekurzivnih poziva funkcije PrimjeriRekurzijePrimjeriRekurzije

Page 41: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 41 / 4219.04.23

Zadaci za vježbuZadaci za vježbu

Napisati program za računanje binomnog koeficijenta koristeći izraz:Napisati program za računanje binomnog koeficijenta koristeći izraz:a) a) BINOM(BINOM(nn, , mm) = ) = nn!/(!/(mm!(!(nn--mm)!))!)

b) b) BINOM(BINOM(nn, , mm) = BINOM() = BINOM(nn-1, -1, mm) + BINOM() + BINOM(nn-1, -1, mm-1);-1); BINOM(BINOM(nn, 0) = BINOM(, 0) = BINOM(nn, , nn) = 1) = 1

BinomniKoeficijentiBinomniKoeficijenti

Napisati funkciju koja će na zaslon ispisati prvih Napisati funkciju koja će na zaslon ispisati prvih nn redaka redaka Pascalovog trokuta. Kolika je apriorna složenost?Pascalovog trokuta. Kolika je apriorna složenost? BinomniKoeficijentiBinomniKoeficijenti

PascalovTrokutRekurzijaPascalovTrokutRekurzija

Page 42: Algoritmi i strukture podataka

Algoritmi i strukture podataka, FER, 2008./09. 42 / 4219.04.23

Problem trgovačkog putnikaProblem trgovačkog putnika

Problem trgovačkog putnika (TSP; Problem trgovačkog putnika (TSP; Travelling Salesman ProblemTravelling Salesman Problem): zadan je ): zadan je skup od skup od nn gradova gradova GG i cijene i cijene ccijij putovanja iz grada putovanja iz grada i u grad u grad j.. Potrebno je, Potrebno je, krenuvši iz zadanog grada, obići sve gradove točno jednom, tako da ukupni krenuvši iz zadanog grada, obići sve gradove točno jednom, tako da ukupni trošak puta bude najmanji. trošak puta bude najmanji. cij = cji

TSP(Gi, G) = min (cij + TSP (Gj, G \ Gj))

jj

TSP(Gi, {Gj}) = cij

Složenost: O(n!), ~(n!/2)

TSPTSP