15
Strukture podataka i algoritmi Poglavlje 6 -- Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji Sveu ili te uZagrebu PMF Matemati ki odjel 22.1.2008 Strukture podataka i algoritmi - vje be 2 Oblikovanje algoritama obradit emo 4 pristupa rje avanju problema, tj. 4 tipa algoritama: pohlepni pristup (greedy) divide and conquer (podijeli pa vladaj) dinami ko programiranje backtracking generalno, svaki problem tra i neki svoj pristup, ne mo emo sve algoritme svrstati u ove 4 kategorije 22.1.2008 Strukture podataka i algoritmi - vje be 3 6.1. Divide and conquer Imamo po etni problem X. Metoda divide- and- conquer je primjenjiva ako: X se mo e podijeliti na niz manjih potproblema A, B, C, ... svaki od potproblema A, B, C... je problem istog tipa kao problem X potproblemi A, B, C... su disjunktni ili imaju vrlo maleni presjek rje enje cijelog problema X mogu e je dobiti spajanjem rje enja potproblema A, B, C... postupak rastavljanja na potprobleme i spajanja se mo e efikasno izvesti 22.1.2008 Strukture podataka i algoritmi - vje be 4 Primjer QuickSort dana je lista L=(a 1 , a 2 , ..., a n ) koju treba sortirati. promotrimo sljede u ideju za sortiranje: premjestimo sve elemente liste koji su manji od a 1 lijevo od a 1 , a sve elemente koji su ve i ili jednaki desno od a 1 element a 1 je sada na svom ispravnom mjestu u sortiranoj listi neka je L 1 lista elemenata lijevo od a 1 , a L 2 lista elemenata desno od a 1 ponovimo (rekurzivno!) ovaj isti postupak na listama L 1 i L 2 dobili smo sortiranu polaznu listu

SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

  • Upload
    others

  • View
    19

  • Download
    1

Embed Size (px)

Citation preview

Page 1: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

Strukture podataka i algoritmiPoglavlje 6 -- Algoritmi

Zvonimir BujanoviIgor Jelaska

Krunoslav Pulji

Sveu ili te u ZagrebuPMF Matemati ki odjel

22.1.2008 Strukture podataka i algoritmi - vje be 2

Oblikovanje algoritama

obradit emo 4 pristupa rje avanju problema, tj. 4 tipa algoritama:

pohlepni pristup (greedy)divide and conquer (podijeli pa vladaj)dinami ko programiranjebacktracking

generalno, svaki problem tra i neki svoj pristup, ne mo emo sve algoritme svrstati u ove 4 kategorije

22.1.2008 Strukture podataka i algoritmi - vje be 3

6.1. Divide and conquer

Imamo po etni problem X.Metoda divide-and-conquer je primjenjiva ako:

X se mo e podijeliti na niz manjih potproblema A, B, C, ...svaki od potproblema A, B, C... je problem istog tipa kao problem Xpotproblemi A, B, C... su disjunktni ili imaju vrlo maleni presjekrje enje cijelog problema X mogu e je dobiti spajanjem rje enja potproblema A, B, C... postupak rastavljanja na potprobleme i spajanja se mo e efikasno izvesti

22.1.2008 Strukture podataka i algoritmi - vje be 4

Primjer QuickSort

dana je lista L=(a1, a2, ..., an) koju treba sortirati.promotrimo sljede u ideju za sortiranje:

premjestimo sve elemente liste koji su manji od a1 lijevo od a1, a sve elemente koji su ve i ili jednaki desno od a1

element a1 je sada na svom ispravnom mjestu u sortiranoj listineka je L1 lista elemenata lijevo od a1, a L2 lista elemenata desno od a1

ponovimo (rekurzivno!) ovaj isti postupak na listama L1 i L2

dobili smo sortiranu polaznu listu

Page 2: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 5

Primjer QuickSort

po etni problem X = sortiranje liste Lpotproblemi:

A = sortiranje liste L1

B = sortiranje liste L2

spajanje rezultata od A i B trivijalno

klju no u algoritmu:efikasno izvesti podjelu na potprobleme! (tj. efikasno dovesti pivotni element a1 na kona no mjesto)

22.1.2008 Strukture podataka i algoritmi - vje be 6

Primjer QuickSort

Dovo enje pivotnog elementa na pravo mjesto.Primjer: L = (26, 5, 27, 1, 61, 11, 59, 15, 48, 19)Pivotni element a1 = 26

Postavimo dva kursora:kursor l kre e od druge pozicije u listi i ide prema desno sve dok ne nai e na element koji je ve i od a1

kursor r kre e od zadnje pozicije u listi i ide prema lijevo sve dok ne nai e na element koji je manji od a1

22.1.2008 Strukture podataka i algoritmi - vje be 7

Primjer QuickSort

L = (26, 5, 27, 1, 61, 11, 59, 15, 48, 19) po etna pozicijarl

l

Kursor l se pomi e do prvog broja ve eg od 26:L = (26, 5, 27, 1, 61, 11, 59, 15, 48, 19)

r

Kursor r se pomi e do prvog broja manjeg od 26 (ne mi e se!):L = (26, 5, 27, 1, 61, 11, 59, 15, 48, 19)

l r

22.1.2008 Strukture podataka i algoritmi - vje be 8

Primjer QuickSort

Elementi na kojima su kursori stali se zamijene:L = (26, 5, 19, 1, 61, 11, 59, 15, 48, 27)

l r

Kursori se nastavljaju pomicati po istoj logici...L = (26, 5, 19, 1, 61, 11, 59, 15, 48, 27)

l r

...sve dok se ne "prekri e":L = (26, 5, 19, 1, 15, 11, 59, 61, 48, 27)

lr

Page 3: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 9

Primjer QuickSort

Kada se prekri e, zamijenimo pivotni element sa onim iznad r:L = (26, 5, 19, 1, 15, 11, 59, 61, 48, 27)

Sada je pivotni element na pravom mjestu! L = (11, 5, 19, 1, 15, 26, 59, 61, 48, 27)

L1 L2

22.1.2008 Strukture podataka i algoritmi - vje be 10

QuickSort Algoritam#define MAXLENGTH ...labeltype a[MAXLENGTH]; // polje koje treba sortirati

void swap( int i, int j ); // zamjenjuje a[i] i a[j]

void QuickSort( int start, int end ){

// sortiramo listu a[start], ..., a[end]int l = start + 1, r = end;

if( start >= end ) return;

while( l <= r ){

while( l <= end && a[l] <= a[start] ) ++l;while( r > start && a[r] >= a[start] ) -r; ...

22.1.2008 Strukture podataka i algoritmi - vje be 11

QuickSort Algoritam...while( l <= r ){

while( l <= end && a[l] <= a[start] ) ++lwhile( r > start && a[r] >= a[start] ) -r;

if( l < r ) swap( l, r ); // nisu se prekrizile}

// stavi pivot, tj. a[start] na pravo mjesto (r)if( start < r ) swap( start, r );

QuickSort( start, r 1 ); // sortiraj L1QuickSort( r + 1, end ); // sortiraj L2

}

22.1.2008 Strukture podataka i algoritmi - vje be 12

Zadatak 6.1.

Sortirajte listu L = (26, 5, 27, 1, 61, 11, 59, 15, 48, 19) uzlazno pomo u QuickSort algoritma.Rje enje. Listu koju trenutno sortiramo stavimo u ( ), a one koje nam jopredstoje u rekurzivnim pozivima sa [ ]. Desno: (start..end)

(26, 5, 27, 1, 61, 11, 59, 15, 48, 19) (0..9)l r(26, 5, 27, 1, 61, 11, 59, 15, 48, 19) (0..9)

l r(26, 5, 19, 1, 61, 11, 59, 15, 48, 27) (0..9)

l r(26, 5, 19, 1, 15, 11, 59, 61, 48, 27) (0..9)

l r(11, 5, 19, 1, 15) 26 [59, 61, 48, 27] (0..4)

l r

Page 4: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 13

Zadatak 6.1.(11, 5, 19, 1, 15) 26 [59, 61, 48, 27] (0..4)l r(11, 5, 1, 19, 15) 26 [59, 61, 48, 27] (0..4)l r(1, 5) 11 [19, 15] 26 [59, 61, 48, 27] (0..1)l r(1, 5) 11 [19, 15] 26 [59, 61, 48, 27] (0..1)l r1, 5, 11 (19, 15) 26 [59, 61, 48, 27] (3..4)

l r1, 5, 11 (19, 15) 26 [59, 61, 48, 27] (3..4)

l r1, 5, 11, 15, 19, 26 (59, 61, 48, 27) (6..9)

l r1, 5, 11, 15, 19, 26 (59, 27, 48, 61) (6..9)

l r

22.1.2008 Strukture podataka i algoritmi - vje be 14

Zadatak 6.1.1, 5, 11, 15, 19, 26 (48, 27) 59, 61 (6..7)

l r 1, 5, 11, 15, 19, 26 (48, 27) 59, 61 (6..7)

l r 1, 5, 11, 15, 19, 26, 27, 48, 59, 61

22.1.2008 Strukture podataka i algoritmi - vje be 15

Sortiranje silazno?to ako trebamo silazno sortirati listu?

Umjesto , koristimo relaciju ure aja .BST:

a

>a a

Hrpa: roditelj je od djece.

9

5 3

4 1

QuickSort: l ide udesno sve dok ne nai e na manjeg od pivotnog elementa, asve dok ne nai e na ve eg.

22.1.2008 Strukture podataka i algoritmi - vje be 16

Zadatak 6.2. (DZ)

Sortirajte silazno listu L=(5, 3, 8, 10, 4, 6, 7, 4, 2) pomo u:(a) hrpe;(b) binarnog stabla tra enja;

(c) QuickSort algoritma.Listu ne smijete prvo sortirati uzlazno!

Page 5: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 17

Primjer mno enje matrica

Dane su matrice A i B reda N. elimo to efikasnije izra unati C= A + B.

Klasi ni algoritam: cij = k = 1..N aik bkj

Za svaki cij treba N zbrajanja i mno enja ukupno O( N3 )

Divide-and-conquer ideja: pretp. N=2k ; podijelimo matrice A i B na (N/2) x (N/2) podmatrice:

A11 A12 B11 B12 C11 C12

A21 A22 B21 B22 C21 C22=

22.1.2008 Strukture podataka i algoritmi - vje be 18

Primjer mno enje matrica

Slijedi:C11 = A11 B11 + A12 B21

C12 = A11 B12 + A12 B22

C21 = A21 B11 + A22 B21

C22 = A21 B12 + A22 B22

Ukupno: 8 mno enja i 4 zbrajanja matrica reda N/2.T( p ) = broj mno enja dvaju brojeva kod mno enja matrica reda pT( N ) = 8 * T( N / 2 );T( 1 ) = 1Slijedi: T( N ) = T( 2k ) = 8 * T( 2k-1 ) = ... = 8k T( 1 ) = N3.Ovim nismo pobolj ali slo enost.

22.1.2008 Strukture podataka i algoritmi - vje be 19

Primjer mno enje matrica

Strassenovo mno enje: 7 mno enja i 10 zbrajanjaP = ( A11 + A22 ) ( B11 + B22 )Q = ( A21 + A22 ) B11

R = A11 ( B12 B22 )S = A22 ( B21 B11 )T = ( A11 + A12 ) B22

U = ( A21 A11 ) ( B11 + B12 )V = ( A12 A22 ) ( B21 + B22 )

C11 = P + S T + V; C12 = R + T;C21 = Q + S; C22 = P Q + R + U.

T( N ) = T( 2k) = 7 * T( 2k-1)= 7k * T( 1 )= 7k

= 2k * a

= N a

a = log2 7 2.807 < 3

22.1.2008 Strukture podataka i algoritmi - vje be 20

Zadatak 6.3. (DZ * * *)

Dane su koordinate N to aka u ravnini. Potrebno je prona i kolika je udaljenost izme u dvije najbli e to ke.(a) Napi ite o iti algoritam koji izra unava udaljenost izme u svake dvije to ke. Uvjerite se da je njegova slo enost O( N2 ).

(b) Koriste i divide-and-conquer pristup, osmislite (ili na ite na Internetu) algoritam koji tra enu udaljenost izra unava u slo enosti boljoj od O( N2 ). [mo e se napraviti algoritam koji radi u O( N log2N ). ]

Page 6: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 21

6.2. Dinami ko programiranje

Imamo po etni problem X.Metoda dinami kog programiranja je primjenjiva ako:

X se mo e podijeliti na niz manjih potproblema A, B, C, ...svaki od potproblema A, B, C... je problem istog tipa kao problem Xrje enje cijelog problema X mogu e je dobiti spajanjem rje enja potproblema A, B, C... potproblemi A, B, C... nisu nu no disjunktni (mogu imati i veliki presjek), ali ukupan broj razli itih potproblema koji se javljaju prilikom rekurzivnog dijeljenja na potprobleme je malen (tj. rje enja svih potproblema odjednom stanu u memoriju)

22.1.2008 Strukture podataka i algoritmi - vje be 22

Zadatak 6.4.

Razradite algoritam za ra unanje "n povrh m" pomo u dinami kog programiranja.Rje enje. Uvijek je potrebno prvo napisati rekurzivnu formulu kojim se problem svodi na manje potprobleme.

n n n n-1 n-10 n m m-1 m

=1 =1 = +

int povrh( int n, int m ){

if( m == 0 || n == m ) return 1;

return povrh( n-1, m-1 ) + povrh( n-1, m );}

22.1.2008 Strukture podataka i algoritmi - vje be 23

Zadatak 6.4.

Rje enje. Prethodni algoritam je VRLO spor: za ra unanje npr. 33 povrh 16 mu treba preko 30 sekundi (Core2Duo @ 1.83MHz)Problem velik broj puta pozove rekurziju sa jednim te istim parametrima (usporedi sa Fibonnacijevim brojevima iz Prog(C)!)

Uo i: kod ra unanja "n povrh m" treba nam ukupno manje od nm razli itih vrijednosti oblika "i povrh j"!Stoga ih sve mo emo pamtiti u tablici i u rekurziju i i samo ako neki par jo nismo izra unali.

22.1.2008 Strukture podataka i algoritmi - vje be 24

Zadatak 6.4.

Rje enje. Top-down pristup:// ako je POVRH[n][m]==0, jos nije izracunatint POVRH[MAXN][MAXM] = { 0 };

int povrh( int n, int m ){

if( POVRH[n][m] != 0 ) return POVRH[n][m];if( m == 0 || n == m ) return POVRH[n][m] = 1;

POVRH[n][m] = povrh( n-1, m-1 ) + povrh( n-1, m );

return POVRH[n][m];}

Page 7: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 25

Zadatak 6.4.Rje enje. Bottom-up pristup redak po redak punimo tablicu (Pascalov trokut!):int POVRH[MAXN][MAXM] = { 0 };

int povrh( int n, int m ) // pretp. n >= m{int i, j;

for( i = 0; i <= n; ++i ) POVRH[i][0] = 1;for( i = 0; i <= n; ++i ) POVRH[i][i] = 1;

for( i = 1; i <= n; ++i )for( j = 1; j <= min( m, i-1 ); ++j )

POVRH[i][j] = POVRH[i-1][j-1] + POVRH[i-1][j];

return POVRH[n][m];}

22.1.2008 Strukture podataka i algoritmi - vje be 26

Zadatak 6.4.

Napomena. Zadatak se mo e rije iti i bez 2D polja mo emo "pregaziti" vrijednosti iz prethodnog retka.

Za dodatni primjer dinami kog programiranja -down i bottom-up pristupa vidihttp://www.math.hr/nastava/spa/files/dinamicko_programiranje.html

22.1.2008 Strukture podataka i algoritmi - vje be 27

Zadatak 6.5.Promatramo usmjereni graf G iji vorovi imaju imena 0, 1, ..., n-1. Oznake("duljine") bridova su pozitivni cijeli brojevi koji prestavljaju udaljenost pripadnih vrhova:

Graf reprezentiramo n x n matricom A tako da je A[ u ][ v ] jednako duljini brida od vrha u do vrha v, odnosno ako taj brid ne postoji.Napi ite funkciju koja izra unava n x n matricu D tako da je D[ u ][ v ] jednako duljini najkra eg puta od vora u do vora v, odnosno ako ne postoji takav put u grafu G.

0 1 22

5

3

8

2

0 1 2 0 2 8 5

A= 1 3 2 2

22.1.2008 Strukture podataka i algoritmi - vje be 28

Zadatak 6.5.Rje enje. Problem treba svesti na manje potprobleme.Trebamo na i najkra i put od u do v tako da se kao me u vorovi mogu koristiti bilo koji vorovi u grafu.Manji potproblem: na i najkra i put od u do v tako da se kao me u vorovi mogu koristiti samo vorovi 0, 1, 2, ..., k.Potproblem za k = 0 je trivijalan; onaj za k = 1 malo te i itd.Rje enje polaznog problema dobivamo za k = n 1.Neka D(k) [ u ][ v ] = duljine najkra eg puta od u do v tako da se kao me u vorovi koriste samo vorovi 0, 1, ..., k.Vrijedi: D(-1) [ u ][ v ] = A[ u ][ v ] za u v, te D(-1) [ u ][ u ] = 0.D(k) [ u ][ v ] = min{ D(k-1) [ u ][ v ], D(k-1) [ u ][ k ] + D(k-1) [ k ][ v ] }

Page 8: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 29

Zadatak 6.5. rje enje

0 1 22

5

3

8

20 1 2

0 0 8 5

D(-1) = 1 3 02 2 0

0 1 2 0 0 8 5

D(0) = 1 3 0 82 2 0

0 1 2 0 0 8 5

D(1) = 1 3 0 82 5 2 0

0 1 2 0 0 7 5

D(2) = D = 1 3 0 82 5 2 0

Ovo je Floydov algoritam za nala enje svih najkra ih puteva u grafu. Slo enost: O( n3 ). Bottom-up pristup je ovdje bolji.

22.1.2008 Strukture podataka i algoritmi - vje be 30

Zadatak 6.5. rje enje#define INFTY ... // neki veliki broj#define n ... // broj vrhova grafa

void floyd( float A[n][n], float D[n][n] ){

int u, v, k;

for( u = 0; u < n; ++u )for( v = 0; v < n; ++v )

D[u][v] = ( u == v ) ? 0 : A[u][v];

for( k = 0; k < n; ++k )for( u = 0; u < n; ++u )

for( v = 0; v < n; ++v )if( D[u][k] + D[k][v] < D[u][v] )

D[u][v] = D[u][k] + D[k][v];}

22.1.2008 Strukture podataka i algoritmi - vje be 31

Zadatak 6.5. rje enje

5 1 7

to ako osim duljine treba na i i sam put?Dovoljno je zapamtiti samo neki vor u najkra em putu od u do v:P[ u ][ v ] = k, ako je k neki vrh na najkra em od u do vP[ u ][ v ] = -1, ako je najkra i put od u do v ujedno i brid od u do vU primjeru gore (npr.):

3 2

P[ 5 ][ 2 ] = 3; (put = [5 ... 3 ... 2])P[ 5 ][ 3 ] = 1; (put = [5 ... 1 ... 3 ... 2]) P[ 5 ][ 1 ] = -1; (put = [5 1 ... 3 ... 2])

P[ 1 ][ 3 ] = 7; (put = [5 1 ... 7 ... 3 ... 2]) P[ 1 ][ 7 ] = -1; (put = [5 1 7 ... 3 ... 2])P[ 7 ][ 3 ] = -1; (put = [5 1 7 3 ... 2])P[ 3 ][ 2 ] = -1; (put = [5 1 7 3 2])

22.1.2008 Strukture podataka i algoritmi - vje be 32

Zadatak 6.5. rje enje#define INFTY ... // neki veliki broj#define n ... // broj vrhova grafa

void floydPamtiPut( float A[n][n], float D[n][n] ){

... // (pocetak isti kao prije)for( u = 0; u < n; ++u )

for( v = 0; v < n; ++v )P[u][v] = -1;

for( k = 0; k < n; ++k )for( u = 0; u < n; ++u )

for( v = 0; v < n; ++v )if( D[u][k] + D[k][v] < D[u][v] ) {

D[u][v] = D[u][k] + D[k][v];P[u][v] = k;

}}

Page 9: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 33

6.3. Pohlepni pristup (greedy)

Kod pohlepnog pristupa promatramo to nam je u danom trenutku najbolje ("lokalno optimalno") u initi.Pohlepni algoritmi vrlo esto ne daju optimalno rje enje, ali mogu dati solidnu aproksimaciju.

Primjer. Potrebno je isplatiti iznos od 62kn koriste i to je mogu e manji broj nov anica od 50, 20, 10, 5, 2 i 1kn.

to je najbolje napraviti u prvom koraku? Iskoristiti najve u nov anicu 50kn.Preostaje isplatiti 12kn opet iskoristimo najve u 10kn.Preostaje isplatiti 2kn iskoristimo najve u 2kn.Isplatili smo cijeli iznos koriste i 3 nov anice; lako se vidi da je to optimalno.

22.1.2008 Strukture podataka i algoritmi - vje be 34

6.3. Pohlepni pristup (greedy)

Primjer. Mo e se pokazati da pohlepni pristup funkcionira za svaki iznos kojeg treba isplatiti (ako koristimo standardni skup nov anica).

to ako treba isplatiti 14kn pomo u nov anica od 8, 5 i 2kn?to ako treba isplatiti 14kn pomo u nov anica od 8, 5, 2 i 0.01kn?

22.1.2008 Strukture podataka i algoritmi - vje be 35

Zadatak 6.6. (DZ)

Dan je broj N, te N nov anica u apoenima A[0], A[1], ..., A[N-1].Koriste i dinami ko programiranje napi ite funkciju koja kao parametar prima iznos koji treba isplatiti koriste i dane apoene, a vra a minimalan broj nov anica.

Uputa. Neka jeP( n, k ) = min. broj nov anica potreban da se isplati iznos od k kuna koriste i nov anice A[0], A[1], ..., A[n].Poka ite da vrijedi:

P( n, k ) = min { P( n-1, k ), 1 + P( n, k A[n] ) }

22.1.2008 Strukture podataka i algoritmi - vje be 36

Zadatak 6.7.

Problem trgova kog putnika:Trgova ki putnik eli posjetiti niz gradova i vratiti se u polazni. Ako znamo vrijeme putovanja izme u svaka dva grada, kako napraviti plan putovanja tako da svaki grad (osim polaznog) posjeti to no jednom i da ukupno vrijeme putovanja bude najmanje mogu e?

Udaljenost dviju to aka ra unamo kao euklidsku udaljenost tih to aka u ravnini.

Page 10: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 37

Zadatak 6.7. rje enje

Matrica udaljenosti:

duljina = 50 duljina = 48.3922.1.2008 Strukture podataka i algoritmi - vje be 38

Zadatak 6.7. rje enje

Ovaj problem je NP-te ak (ne postoji polinomijalni algoritam koji ga egzaktno rje ava).Opisujemo pribli ni, pohlepni algoritam.Rje enje spremamo u graf T=( V, E ), V =vrhovi, E =bridovi.Na po etku: T = ( V, O). Neka Eg=skup svih bridova u polaznom grafu.

Algoritam: Ponavljaj n puta (n = broj gradova)

odaberi i dodaj u skup E najkra i brid b iz skupa Eg \ E sa ovim svojstvima:(a) brid b ne e prouzro iti da se u T neki vrh bude stupnja 3 ili ve eg(b) brid b ne e zatvoriti ciklus u T, osim ako se u E ve ne nalazi n-1 bridovai ako b ne spaja jedina 2 vrha stupnja 1.

22.1.2008 Strukture podataka i algoritmi - vje be 39

Zadatak 6.7. rje enje

Na po etku je T prazan graf sa vrhovima a, b, c, d, e, f.Dodajemo najkra i brid to je (d, e) duljine 3.Sada je E = { (d, e) }.

22.1.2008 Strukture podataka i algoritmi - vje be 40

Zadatak 6.7. rje enje

Dodajemo najkra i brid koji zadovoljava (a) i (b) to je (b, c) ili (a, b) ili (e, f), svi duljine 5.Vidimo da ih sve mo emo dodati u bilo kojem redoslijedu u graf.Sada je E = { (d, e), (b, c), (a, b), (e, f) }.

Page 11: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 41

Zadatak 6.7. rje enje

Idu najkra i brid kojeg poku avamo dodati je (a, c) duljine 7.08.Ali on bi zatvorio ciklus, tj. naru io (b).

Idu i najkra i je (d, f) opet ciklus, pa ne dodajemo ni njega.

22.1.2008 Strukture podataka i algoritmi - vje be 42

Zadatak 6.7. rje enje

Idu i najkra i brid kojeg poku avamo dodati je (c, d) duljine 14.On zadovoljava (a) i (b), pa ga dodamo.Od svih preostalih bridova, jedino (a, f) zadovoljava (a) i (b).

22.1.2008 Strukture podataka i algoritmi - vje be 43

Zadatak 6.7. rje enjeDobili smo rje enje ukupne duljine 50, to nije optimalno.

DZ: Napi ite program koji u itava koordinate N to aka u ravnini i koriste i gore opisani algoritam nalazi aproksimaciju optimalne duljine puta trgova kog putnika koji obilazi sve u itane to ke.

22.1.2008 Strukture podataka i algoritmi - vje be 44

Zadatak 6.8.

Mirko je dobio na dar okoladu sa m x n "kockica". On je jako praznovjeran i prije no to ju pojede, mora ju izlomiti na dijelove koji su kvadrati (tj. oblika k x k kockica). Lomljenje jednog dijela je zapravo podjela na dva manja dijela koji imaju zajedni ku stranicu:

U gornjem primjeru 3 x 5 okoladu smo 3 puta lomili da bismo dobili kvadratne dijelove. Mirko eli to je mogu e prije po eti jesti okoladu, pa ga zanima koliko je najmanje lomljenja potrebno.

Page 12: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 45

Zadatak 6.8.

(a) Neka je P( m, n ) minimalni broj lomljenja okolade sa m x n "kockica" na kvadratne dijelove. Izvedite rekurzivnu formulu za P( m, n ).

(b) Koriste i dinami ko programiranje i (a), napi ite funkciju koja prima m i n i vra a minimalni broj lomljenja potreban da se dobiju kvadratni dijelovi.

(c) Osmislite i opi ite odgovaraju i pohlepni algoritam. Poka ite primjerom da on ne daje optimalni broj lomljenja.

22.1.2008 Strukture podataka i algoritmi - vje be 46

Zadatak 6.8. rje enje

(c) Ako je m > n, odlomimo kvadrat dimenzija n x n (ostane (m-n) x n).Ako je n > m, odlomimo kvadrat dimenzije m x m (ostane m x (n-m)).Ina e je m = n, pa ve imamo kvadrat.

int greedy( int m, int n ) {int brojLomova = 0;

while( m != n ) {if( m >= n ) { ++brojLomova; m = m n; }else if( n >= m ) { ++brojLomova; n = n m; }

}

return brojLomova;}

Nije optimalno (hint: pogledajte 5 x 6 okoladu!)

22.1.2008 Strukture podataka i algoritmi - vje be 47

Zadatak 6.8. rje enje

(a) Trebamo problem P( m, n ) svesti na manje potprobleme.Kako sve mo emo prelomiti m x n okoladu?"Lom" mo e biti nakon 1. retka ili nakon 2. retka... ili nakon (m-1)-retka."Lom" mo e biti nakon 1. stupca ili nakon 2. stupca... ili nakon (n-1)-stupca.Ako prelomimo nakon i-tog retka, ukupan broj lomova je:

P( i, n ) + P( m - i, n ) + 1jer su ostala dva dijela dimenzija i x n i (m - i) x n koje dalje treba lomiti.Tra imo optimalno mjesto za lom:

P( m, n ) = 0, ako je m = nP( m, n ) = min { mini { P( i, n ) + P( m - i, n ) + 1 },

minj { P( m, j ) + P ( m, n - j ) + 1 } }

22.1.2008 Strukture podataka i algoritmi - vje be 48

Zadatak 6.8. rje enje(b) Koristimo formulu iz (a) i top-down pristup; pamtimo izra unato u polju.int P[MAXM][MAXN]; // treba staviti sve elemente na -1

int coko( int m, int n ) {int i, mini = INFTY;

if( P[m][n] != -1 ) return P[m][n];if( m == n ) return P[m][n] = 0;

for( i = 1; i < n; ++i )if( coko( m, i ) + coko( m, n-i ) + 1 < mini )

mini = coko( m, i ) + coko( m, n-i ) + 1;

for( i = 1; i < m; ++i )if( coko( i, n ) + coko( m-i, n ) + 1 < mini )

mini = coko( i, n ) + coko( m-i, n ) + 1;return P[m][n] = mini;

}

Page 13: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 49

6.4. Backtracking

backtracking = "ispitivanje svih mogu ih slu ajeva / kombinacija"Primjenjiv kod te kih kombinatornih problema kod kojih ne uspijemo konstruirati efikasniji algoritam (npr. problem trgova ki putnik).

Zamislimo da je tra eno rje enje oblika (x1, x2, ..., xn), gdje je xi Si, a Sineki kona an skup.Skup S = S1 x S2 x ... Sn zovemo prostor rje enja; tra imo njegov element koji je optimalan u nekom smislu.Neki elementi od S mo da ne zadovoljavaju dodatna ograni enja koje na e rje enje treba imati, pa njih niti ne uzimamo u obzir.

U idu em primjeru: x1 { 1, 2, 3 }, x2 { 5, 7 }, x3 { 3, 4 }.

22.1.2008 Strukture podataka i algoritmi - vje be 50

6.4. Backtracking

Prostor rje enja obilazimo rekurzivno postupak mo emo prikazati kao da gradimo stablo rje enja: ( vorovi "nastaju" u preorder redoslijedu)

x1 = 1 x1 = 2 x1 = 3

x2 = 5 x2 = 7 x2 = 5 x2 = 7 x2 = 5 x2 = 7

x3 = 3 x3 = 4 x3 = 3 x3 = 4

22.1.2008 Strukture podataka i algoritmi - vje be 51

Zadatak 6.9.

Napi ite program koji u itava brojeve b, a0, a1, ..., an-1. Program treba provjeriti mo e li se broj b dobiti kao rezultat izraza dobivenog umetanjem operacija + i izme u brojeva a0, ..., an-1 (u tom poretku). Na primjer, ako je b = 5, a0 = 6, a1 = 2, a2 = 4 i a3 = 3, onda program treba ispisati "Mo e" (jer je 5 = 6 2 + 4 3).

Rje enje.x0 = znak izme u a0 i a1 (plus ili minus)x1 = znak izme u a1 i a2 (plus ili minus)...xn 2 = znak izme u an-2 i an-1 (plus ili minus)

22.1.2008 Strukture podataka i algoritmi - vje be 52

6.4. Backtracking

Stablo rje enja (n = 4). U listovima treba provjeriti je li izraz jednak x.

x0 = + x0 = -

x1 = + x1 = - x1 = + x1 = -

x2 = + x2 = - x2 = + x2 = - x2 = + x2 = - x2 = + x2 = -

Page 14: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 53

Zadatak 6.9. rje enjeint b, n, a[100];char x[100];

int rek( int dubina );

int main( void ){

int i;scanf( "%d", &b );scanf( "%d", &n );for( i = 0; i < n; ++i )

scanf( "%d", &a[i] );

if( rek( 0 ) == 1 )printf( "Moze.\n" );

elseprintf( "Ne moze.\n" );

}

int suma( void ){

int rez = a[0], i;

for( i=0; i<n-1; ++i )if( x[i] == '+' )

rez += a[i+1];else

rez -= a[i+1];

return rez;}

22.1.2008 Strukture podataka i algoritmi - vje be 54

Zadatak 6.9. rje enjeint rek( int dubina ) {

if( dubina == n-1 ) // dosli smo u list stabla{

if( suma() == b ) return 1;else return 0;

}

// nismo dosli u list stvori novo dijete cvora// prvo probaj sa plusx[dubina] = '+';if( rek( dubina + 1 ) == 1 ) return 1;

// ako nije uspjelo tako, onda sa minusx[dubina] = '-';if( rek( dubina + 1 ) == 1 ) return 1;

return 0; // nijedan nacin nije uspio!}

22.1.2008 Strukture podataka i algoritmi - vje be 55

Zadatak 6.10.

(problem 8 kraljica)Napi ite program koji ispisuje sve rasporede 8 kraljica na ahovskoj plo i tako da se nikoje dvije kraljice ne napadaju. Dvije

kraljice se napadaju ako se nalaze u istom retku ili stupcu ili dijagonalno u odnosu jedna na drugu.

Rje enje.x1 = polo aj prve kraljicex2 = polo aj druge kraljice...x8 = polo aj osme kraljice

S1 = S2 = ... = S8 = S = skup svih polja na ahovskoj plo i.

22.1.2008 Strukture podataka i algoritmi - vje be 56

Zadatak 6.10. rje enje

Uo i: to no 1 kraljica u svakom stupcu!Bolje:S1 = skup svih polja u prvom stupcu.S2 = skup svih polja u drugom stupcu.... S8 = skup svih polja u osmom stupcu.

to su manji skupovi S1, ..., S8, to e ukupno biti manje kombinacija za isprobati i algoritam e biti br i.

Page 15: SPA -- vjezbe -- 06 -- Algoritmi · Strukture podataka i algoritmi Poglavlje 6 --Algoritmi Zvonimir Bujanovi Igor Jelaska Krunoslav Pulji SveuiliteuZagrebu PMF Matematiki odjel 22.1.2008

22.1.2008 Strukture podataka i algoritmi - vje be 57

Zadatak 6.10. rje enje

Stablo rje enja (4 x 4 plo a):

S T O P22.1.2008 Strukture podataka i algoritmi - vje be 58

Zadatak 6.10. rje enjeint ploca[9][9] = {0}; // 0 = prazno, 1 = ima kraljica

void queens( int stupac ) // stupac = dubina{

if( kraljice_se_napadaju() ) return;

if( stupac == 9 ) { // napunili smo plocuispis_ploce(); // a ne napadaju se!return; // znaci, imamo rjesenje

}

for( red = 1; red <= 8; ++red ) {ploca[red][stupac] = 1;queens( stupac + 1 );ploca[red][stupac] = 0;

}}

int main( void ){

queens( 1 );}

22.1.2008 Strukture podataka i algoritmi - vje be 59

6.4. Backtracking

Backtracking se mo e primjeniti i kod nala enja pobjedni kih strategija u igrama poput kri i -kru i , connect-four i sli nim.Vidi:

http://web.math.hr/nastava/spa/files/krizic_kruzic.pdf

Zadaci za vje bu za 2. kolokvij:http://web.math.hr/nastava/spa/files/zadaci_za_vjezbu_kolokvij2.pdf