poglavlje 6: oblikovanje algoritama

82
Poglavlje 6: Oblikovanje algoritama Sastavio: Robert Manger 05.01.2021 Sveučilište u Zagrebu PMF – Matematički odsjek STRUKTURE PODATAKA I ALGORITMI Predavanja 2020/2021

Upload: others

Post on 05-Jan-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Poglavlje 6: Oblikovanje algoritama

Poglavlje 6:

Oblikovanje algoritama

Sastavio: Robert Manger

05.01.2021

Sveučilište u Zagrebu

PMF – Matematički odsjek

STRUKTURE PODATAKA I

ALGORITMI

Predavanja 2020/2021

Page 2: Poglavlje 6: Oblikovanje algoritama

Općenito o oblikovanju algoritama

• Temeljem dugogodišnjeg iskustva, ljudi su

identificirali nekoliko općenitih “tehnika” (metoda,

strategija, smjernica) za oblikovanje algoritama.

• Spomenute metode pokazale su se uspješne u

mnogim situacijama.

• To je dobar razlog da ih pokušamo primijeniti

kod novih problema. Ipak:

– Nema garancije da ćemo dobiti korektno rješenje.

– Rješenje ne mora biti egzaktno već približno.

– Dobiveni algoritam ne mora biti efikasan.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

2

Page 3: Poglavlje 6: Oblikovanje algoritama

Sadržaj Poglavlja 6

6.1. Metoda podijeli-pa-vladaj

6.2. Dinamičko programiranje

6.3. Pohlepni pristup

6.4. Backtracking

6.5. Lokalno traženje

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

3

Page 4: Poglavlje 6: Oblikovanje algoritama

Općenito o metodi podijeli-pa-vladaj

• Podijeli-pa-vladaj: zadani primjerak problema

razbijemo u nekoliko manjih (istovrsnih)

primjeraka problema.

• Pritom se rješenje polaznog primjerka može lako

konstruirati iz rješenja manjih primjeraka.

• Dobiveni algoritam je rekurzivan - svaki od manjih

primjeraka se dalje rješava na isti način, dakle

razbije se u još manje primjerke, ….

• Mora postojati način da se primjerci dovoljno male

veličine riješe izravno.

• U nastavku: tri primjera za podijeli-pa-vladaj”.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

4

Page 5: Poglavlje 6: Oblikovanje algoritama

Opet sortiranje spajanjem

• Algoritam merge sort za sortiranje liste

(poglavlje 5.3) može se ovako tumačiti:

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

5

– Što je lista dulja, to ju je

teže sortirati.

– Zato ćemo polaznu listu

razbiti na dvije manje i

svaku od tih manjih listi

ćemo sortirati zasebno.

– Velika sortirana lista se

dobiva relativno

jednostavnim

postupkom spajanja

malih sortiranih lista.

Page 6: Poglavlje 6: Oblikovanje algoritama

Traženje elementa u listi (1)

• Želimo utvrditi postoji li u zadanoj listi element

sa zadanom vrijednošću. Metoda podijeli-pa-

vladaj sugerira sljedeće rješenje:

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

6

– Što je lista dulja, to ju je

teže pretraživati.

– Polaznu listu razbijamo na

tri manje.

– U svakoj maloj listi zasebno

tražimo zadanu vrijednost.

– Tražena vrijednost se

pojavljuje u velikoj listi ako i

samo ako se pojavljuje u

bar jednoj maloj listi.

Page 7: Poglavlje 6: Oblikovanje algoritama

Traženje elementa u listi (2)

• Ako je polazna lista

sortirana, tada se algoritam

može bitno pojednostaviti.– Biramo srednju malu listu s

duljinom 1, a ostale dvije s

podjednakim duljinama.

– Jedna operacija

uspoređivanja (zadana

vrijednost s elementom u

sredini) omogućuje da se• vrijednost odmah pronađe

• ili da se dvije liste eliminiraju.

– Dobivamo algoritam

binarnog traženja (pogl 4.2).SPA-6 STRUKTURE PODATAKA I

ALGORITMI

7

Page 8: Poglavlje 6: Oblikovanje algoritama

Množenje dugačkih cijelih brojeva(1)

• Promatramo problem množenja dvaju n-bitnih

cijelih brojeva X i Y .

• Klasični algoritam iz škole ima složenost O(n2)

ako operacije sa 1 bitom smatramo osnovnima.

• Pristup podijeli-pa-vladaj daje ovakav algoritam:– X odnosno Y treba podijeliti na dva dijela koji su duljine

n/2 bitova (uzimamo da je n potencija od 2).

– Produkt od X i Y se tada može ovako izraziti:

XY = AC2n + (AD + BC)2n/2 + BD.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

8

Page 9: Poglavlje 6: Oblikovanje algoritama

Množenje dugačkih cijelih brojeva(2)• Jedno množenje n-bitnih brojeva reducirali smo

na nekoliko množenja n/2-bitnih brojeva.

• Prema prethodnoj formuli, treba napraviti:

– 4 množenja n/2-bitnih brojeva (AC, AD, BC i BD),

– tri zbrajanja brojeva duljine ≤2n bitova (tri znaka +),

– dva posmaka bitova (množenje s 2n odnosno 2n/2).

• Budući da i zbrajanja i posmaci troše O(n) koraka,

vrijedi rekurzija za ukupan broj koraka T(n):

T(1) = 1,

T(n) = 4T(n/2) + cn (ovdje je c neka konstanta).

• Rješenje ove rekurzije je T (n) = O(n2). Znači, naš

novi algoritam nije ništa bolji od klasičnog.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

9

Page 10: Poglavlje 6: Oblikovanje algoritama

Množenje dugačkih cijelih brojeva(3)

• Ipak, poboljšanje se može dobiti ako gornju

formulu preinačimo tako da glasi:

XY = AC2n + [(A−B)(D−C)+AC+BD]2n/2 + BD.

– Broj množenja n/2-bitnih brojeva smanjio se na tri.

– Doduše, povećao se broj zbrajanja odnosno

oduzimanja, no to nije važno jer je riječ o operacijama

s manjom složenošću.

• Rekurzija za T(n) sada glasi:

T(1) = 1,

T(n) = 3T(n/2) + cn (ovdje je c veća nego prije).

• Rješenje rekurzije je T (n) = O(nlog23) = O(n1.59).

Sad je algoritam asimptotski brži od klasičnog.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

10

Page 11: Poglavlje 6: Oblikovanje algoritama

Množenje dugačkih cijelih brojeva(4)

• Slijedi skica algoritma u C-u.

– Ta skica je zbog ograničenja standardnog tipa int

ispravna samo za male n-ove.

– Prava implementacija algoritma zahtijevala bi da

razvijemo vlastiti način pohranjivanja cijelih brojeva.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

11

Page 12: Poglavlje 6: Oblikovanje algoritama

Množenje dugačkih cijelih brojeva(5)

• Skica algoritma u C-u (nastavak).

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

12

Page 13: Poglavlje 6: Oblikovanje algoritama

Sadržaj Poglavlja 6

6.1. Metoda podijeli-pa-vladaj

6.2. Dinamičko programiranje

6.3. Pohlepni pristup

6.4. Backtracking

6.5. Lokalno traženje

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

13

Page 14: Poglavlje 6: Oblikovanje algoritama

Općenito o dinamičkom programir (1)

• Metoda podijeli-pa-vladaj koji put rezultira

neefikasnim algoritmom. – Broj manjih primjeraka problema koje treba riješiti može

rasti eksponencijalno s veličinom zadanog primjerka.

– Pritom ukupan broj različitih malih primjeraka možda i

nije tako velik.

– Jedan te isti primjerak pojavljuje se na mnogo mjesta u

rekurziji.

• U ovakvim situacijama preporuča se dinamičko

programiranje. – Metoda zahtijeva da se svi mali primjerci redom riješe,

te da se rješenja spreme u odgovarajuću tablicu.

– Kad god nam treba neko rješenje, tada ga ne

računamo ponovo već ga samo pročitamo iz tablice.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

14

Page 15: Poglavlje 6: Oblikovanje algoritama

Općenito o dinamičkom programir (2)

• Za razliku od algoritama podijeli-pa-vladaj koji idu

“s vrha prema dolje” (od većeg primjerka prema

manjima), dinamičko programiranje ide s “dna

prema gore”(od manjih prema većem). – Prvo se u tablicu unose rješenja za primjerke najmanje

veličine, zatim rješenja za malo veće primjerke, ...,

– Postupak je završen kad se dosegne veličina zadanog

primjerka.

– Važan je redoslijed ispunjavanja tablice.

– Možda ćemo riješiti i neke primjerke koji nam na kraju

neće biti potrebni za rješenje zadanog primjerka.

• U nastavku slijede dva primjera algoritma tipa

dinamičkog programiranja.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

15

Page 16: Poglavlje 6: Oblikovanje algoritama

Šanse za pobjedu u sportu (1)

• Dva sportaša A i B nadmeću se u sportskoj igri.

– Igra je podijeljena u dijelove (setove, runde, partije, …).

– U svakom dijelu igre točno jedan igrač bilježi 1 poen.

– Igra traje sve dok jedan od igrača ne skupi n poena

(n je unaprijed fiksiran) - tada je taj igrač pobjednik.

– A i B su podjednako jaki: svaki od njih ima 50% šanse

da dobije poen u bilo kojem dijelu igre.

• Označimo s P(i,j) vjerojatnost da će A biti konačni

pobjednik, u situaciji kad A treba još i poena za

pobjedu a B treba još j poena. – Npr. za n = 4, ako je A već dobio 2 poena a B je dobio 1

poen, tada je i = 2 i j = 3.

– Vidjet ćemo da je P(2, 3) = 11/16.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

16

Page 17: Poglavlje 6: Oblikovanje algoritama

Šanse za pobjedu u sportu (2)

• Htjeli bi naći algoritam koji za zadane i, j daje P(i,j).

• Lako se vidi da vrijedi relacija:

• Relacija se može se iskoristiti za rekurzivno

računanje P(i, j) u metodom podijeli-pa-vladaj. No

vrijeme izvršavanja takvog računa bilo bi O(2i+j ). – Razlog za toliku složenost je taj što se iste vrijednosti

pozivaju (računaju) mnogo puta.

– Npr. da bi izračunali P(2,3), trebali bi nam P(1,3) i P(2,2);

dalje P(1,3) i P(2,2) oba zahtijevaju P(1,2), što znači da će

se P(1,2) računati dvaput.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

17

Page 18: Poglavlje 6: Oblikovanje algoritama

Šanse za pobjedu u sportu (3)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

18

• Bolji način računanja P(i,j) je ispunjavanje tablice.

– Gornji red je ispunjen jedinicama, a lijevi stupac nulama.

– Prema formuli, bilo koji od preostalih elemenata tablice

dobiva se kao aritmetička sredina elementa iznad i

elementa ulijevo.

– Tablica se popunjava

tako da se ide po

dijagonalama

počevši od gornjeg

lijevog ugla.

Page 19: Poglavlje 6: Oblikovanje algoritama

Šanse za pobjedu u sportu (4)

• Algoritam se može zapisati sljedećom C funkcijom, koji radi nad globalnim poljem P[][].

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

19

• Unutrašnja petlja traje O(s), a vanjska petlja se

ponavlja za s = 1, 2, ..., (i+j). Dakle, računanje P(i,j)

sve skupa traje

Page 20: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(1)

• Zadano je n predmeta O1,O2, ... ,On i naprtnjača.– Predmet Oi ima težinu wi i vrijednost (cijenu) pi.

– Kapacitet naprtnjače je c težinskih jedinica.

– Pritom su wi (i = 1, 2, ..., n) i c pozitivni cijeli brojevi.

Pitanje: koje predmete treba staviti u naprtnjaču

tako da ukupna težina ne prijeđe kapacitet c, te

da ukupna vrijednost bude maksimalna.

• Problem bi se mogao riješiti algoritmom tipa

podijeli-pa-vladaj.– On bi generirao sve moguće podskupove skupa

{O1,O2, ... ,On } i izabrao onaj s najvećom vrijednošću

uz dopustivu težinu.

No takav algoritam imao bi složenost O(2n).SPA-6 STRUKTURE PODATAKA I

ALGORITMI

20

Page 21: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(2)

• Bolji algoritam dobiva se dinamičkim programir.

– Neka je Mij max vrijednost koja se može dobiti izborom

predmeta iz skupa {O1,O2, ... ,Oi } uz kapacitet j.

– Prilikom postizavanja Mij predmet Oi je stavljen u

naprtnjaču ili nije.

– Ako Oi nije stavljen, tada je Mij = Mi-1, j .

– Ako je Oi stavljen, tada prije izabrani predmeti

predstavljaju optimalni izbor iz skupa {O1,O2, ... ,Oi-1 }

uz kapacitet j−wi.

– Znači, vrijedi relacija:

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

21

Page 22: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(3)

• Algoritam se sastoji od ispunjavanja tablice s

vrijednostima Mij korištenjem rekurzivne relacije.

– Ustvari tražimo Mnc.

– Tablica treba sadržavati Mij za 0 ≤ i ≤ n, 0 ≤ j ≤ c, dakle

mora biti dimenzije (n+1) × (c+1).

– Redoslijed računanja je redak-po-redak ( j se brže

mijenja nego i ).

• Vrijeme izvršavanja algoritma je O(nc).

• Algoritam ispunjavanja tablice zapisat ćemo

funkcijom u C-u koja koristi globalna polja:

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

22

Page 23: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(4)

• Funkcija vraća maksimalnu vrijednost koja se

može prenijeti u naprtnjači kapaciteta c, ako se

ograničimo na prvih n predmeta.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

23

Page 24: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(5)

• Primjer rada algoritma.

– Zadani su ulazni podaci n = 3, (w1, w2, w3) = (2, 3, 4),

(p1, p2, p3) = (1, 7, 8), c = 6.

– Naš algoritam tada računa sljedeću tablicu.

– Maksimalna vrijednost koja se može nositi u naprtnjači

je M3,6 = 9. Ona se postiže izborom prvog i trećeg

predmeta. Ukupna težina je 2+4 = 6.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

24

Page 25: Poglavlje 6: Oblikovanje algoritama

Rješavanje 0/1 problema naprtnjače(6)

• Zapisana verzija algoritma (tablice) zapravo daje

samo maksimalnu vrijednost koja se može ponijeti

u naprtnjači, a ne i optimalni izbor predmeta.

• Da bismo mogli reproducirati i optimalni izbor,

algoritam trebamo malo usavršiti.

– Uz svaki element Mij čuvamo i “zastavicu” koja kaže je

li Mij dobiven kao Mi−1,j ili kao Mi−1,j−wi+pi.

– Zastavica uz Mnc će nam najprije reći je li predmet On

upotrebljen u optimalnom izboru.

– Ovisno o ne-izboru (odnosno izboru) On, dalje gledamo

zastavicu uz Mn−1,c (odnosno zastavicu uz M n−1,c−wn) da

bismo ustanovili je li On−1 bio izabran, i tako dalje.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

25

Page 26: Poglavlje 6: Oblikovanje algoritama

Sadržaj Poglavlja 6

6.1. Metoda podijeli-pa-vladaj

6.2. Dinamičko programiranje

6.3. Pohlepni pristup

6.4. Backtracking

6.5. Lokalno traženje

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

26

Page 27: Poglavlje 6: Oblikovanje algoritama

Općenito o pohlepnom pristupu (1)

• Zamislimo da radimo u dućanu i da mušteriji

trebamo vratiti 62 kune. Na raspolaganju nam

stoje apoeni od 50, 20, 10, 5 i 1 kune.

– Gotovo instinktivno postupit ćemo tako da vratimo

1×50, 1×10 i 2×1 kuna.

– Ne samo da smo vratili točan iznos, nego smo također

izabrali najkraću moguću listu novčanica (4 komada).

– Algoritam koji smo nesvjesno koristili je bio da:

• izaberemo najveći apoen koji ne prelazi 62 kune (to je 50

kuna), stavljamo ga u listu za vraćanje, te vraćenu vrijednost

odbijemo od 62 tako da dobijemo 12;

• zatim biramo najveći apoen koji ne prelazi 12 kuna (to je 10

kuna), dodajemo ga na listu, itd.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

27

Page 28: Poglavlje 6: Oblikovanje algoritama

Općenito o pohlepnom pristupu (2)• Ovaj algoritam je primjer pohlepnog pristupa.

– Rješavamo problem optimizacije.

– Rješenje problema konstruiramo u nizu koraka (faza).

– U svakom koraku biramo mogućnost koja je “lokalno

optimalna” u nekom smislu.

– Nadamo se da ćemo tako doći do “globalno optimalnog”

ukupnog rješenja.

• Pohlepni pristup ne mora dati optimalno rješenje.

– Ako bi apoeni bili 11, 5 i 1 kuna, a treba vratiti 15 kuna:

• tada bi pohlepni algoritam najprije izabrao 11 kuna, a zatim bi

morao 4 puta uzeti po 1 kunu, što bi dalo 5 novčanica.

• S druge strane, 3×5 kuna bi bila kraća lista.

• U nastavku slijede još dva primjera pohlepnog alg.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

28

Page 29: Poglavlje 6: Oblikovanje algoritama

Optimal plan spajanja sortiranih lista (1)• Imamo n sortiranih listi s duljinama w1, w2, ... ,wn.

Spajamo ih u jednu veliku sortiranu listu.

• Spajanje provodimo u n−1 koraka, u svakom

koraku spojimo dvije liste u jednu (merge).

• Zanima nas optimalni plan spajanja, dakle takav

izbor lista u pojedinom koraku koji će dovesti do

najmanjeg ukupnog broja operacija.

• Optimalni plan može se konstruirati pohlepnim

Huffmanovim algoritmom.– U svakom koraku spajanja treba odabrati dvije najkraće

liste koje nam stoje na raspolaganju.

– Ili drukčije rečeno: svaki korak treba izvesti tako da

imamo najmanje posla u tom koraku.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

29

Page 30: Poglavlje 6: Oblikovanje algoritama

Optimal plan spajanja sortiranih lista(2)

• Nije baš očigledno da ćemo ovom strategijom

zaista postići najmanji ukupni broj operacija. No,

može se dokazati da ipak hoćemo.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

30

• Slika daje primjer

rada Huffmanovog

algoritma.

− Polazne liste

imaju duljine

12, 13, 15 i 19.

Page 31: Poglavlje 6: Oblikovanje algoritama

Kontinuirani problem naprtnjače (1)

• Problem je sličan 0/1 naprtnjači (pogl. 6.2). No

sada se predmeti koje stavljamo mogu “rezati”.

• Stroga formulacija problema glasi:

• xi kaže koliki dio i-tog predmeta stavljamo u naprt.

• Pohlepni pristup rješavanja problema. – Za svaki predmet izračunamo “profitabilnost” pi / wi.

– Predmete sortiramo silazno po profitabilnosti te ih u tom

redoslijedu stavljamo u naprtnjaču dok god ima mjesta.

– Kod svakog stavljanja u naprtnjaču nastojimo spremiti

što veći dio predmeta.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

31

Page 32: Poglavlje 6: Oblikovanje algoritama

Kontinuirani problem naprtnjače (2)• Pohlepni algoritam implementiran je sljedećom

funkcijom u C-u, koja radi nad globalnim poljima

SPA-6 32

• Podaci u

poljima su već

uređeni tako da

je p[i]/w[i] >=

p[i+1]/w[i+1].

Page 33: Poglavlje 6: Oblikovanje algoritama

Kontinuirani problem naprtnjače (3)

• Primjer rada pohlepnog algoritma.

– Zadani su ulazni podaci n = 3, (w1, w2, w3) = (2, 3, 4),

(p1, p2, p3) = (1, 7, 8), c = 6.

– Profitabilnosti predmeta su p1/w1 = 1/2, p2/w2 = 7/3,

p3/w3 = 2.

– Zato algoritam smješta u naprtnjaču cijeli 2. predmet,

a ostatak kapaciteta popunjava s 3/4 trećeg predmeta.

– Rješenje je (x1, x2, x3) = (0, 1, 3/4), a maksimalna

vrijednost naprtnjače je 13.

• Može se dokazati da opisani pohlepni algoritam

zaista uvijek daje optimalno rješenje

kontinuiranog problema naprtnjače.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

33

Page 34: Poglavlje 6: Oblikovanje algoritama

Kontinuirani problem naprtnjače (4)

• Slični pohlepni algoritam mogao bi se primijeniti i

na 0/1 problem naprtnjače, no za taj problem on

ne bi morao obavezno davati optimalno rješenje.

– Promatrajmo opet primjer iz poglavlja 6.2, dakle n = 3,

(w1, w2, w3) = (2, 3, 4), (p1, p2, p3) = (1, 7, 8), c = 6.

– Pohlepni pristup bi zahtijevao da se u naprtnjaču

najprije stavi “najprofitabilniji” 2. predmet.

– Nakon toga 3. predmet (idući po profitabilnosti) više ne

bi stao, pa bi (zbog nemogućnosti rezanja) mogli

dodati još samo 1. predmet.

– Znači, dobili bi sub-optimalno rješenje s vrijednošću 8.

– U poglavlju 6.2 smo pokazali da optimalno rješenje ima

vrijednost 9. SPA-6 STRUKTURE PODATAKA I

ALGORITMI

34

Page 35: Poglavlje 6: Oblikovanje algoritama

Sadržaj Poglavlja 6

6.1. Metoda podijeli-pa-vladaj

6.2. Dinamičko programiranje

6.3. Pohlepni pristup

6.4. Backtracking

6.5. Lokalno traženje

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

35

Page 36: Poglavlje 6: Oblikovanje algoritama

Općenito o backtrackingu (1)

• Backtracking je vrlo općenita metoda koja se

primjenjuje za teške kombinatorne probleme.

– Rješenje problema traži se sistematskim ispitivanjem

svih mogućnosti za konstrukciju tog rješenja.

– Traženo rješenje mora se izraziti kao n-torka oblika

(x1, x2, ... ,xn), gdje je xi element konačnog skupa Si.

– Kartezijev produkt S1×S2×...×Sn zove se prostor

rješenja. Njegova veličina raste eksponencijalno s n.

– Da bi neka n-torka iz prostora rješenja zaista bila

rješenje, ona mora zadovoljiti još i neka dodatna

ograničenja (ovisna o samom problemu).

– Prostor rješenja treba zamišljati kao uređeno stablo

rješenja. SPA-6 STRUKTURE PODATAKA I

ALGORITMI

36

Page 37: Poglavlje 6: Oblikovanje algoritama

Općenito o backtrackingu (2)• Primjer stabla rješenja za

n = 3, S1 = {1,2,3,4}, S2 = {1,2}, S3 = {1,2,3}.– Korijen stabla predstavlja sve moguće n-torke.

– Dijete korijena predstavlja sve n-torke gdje prva

komponenta x1 ima neku određenu vrijednost.

– Unuk korijena predstavlja sve n-torke gdje su prve dvije

komponente x1 i x2 fiksirane na određeni način, itd.

– List stabla predstavlja jednu konkretnu n-torku.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

37

Page 38: Poglavlje 6: Oblikovanje algoritama

Općenito o backtrackingu (3)

• Backtracking je rekurzivni algoritam koji se

sastoji od simultanog generiranja i ispitivanja

čvorova u stablu rješenja.– Čvorovi se stavljaju na stog.

– U jednom koraku uzima se čvor s vrha stoga, te da se

provjerava da li taj čvor predstavlja rješenje problema. • Ako čvor predstavlja rješenje, poduzme se neka akcija.

• Ako čvor nije rješenje, pokušaju se generirati njegova djeca te

se ona stavljaju na stog.

– Na početku se na stogu nalazi samo korijen stabla.

– Završetak je onda kad nađemo rješenje ili kad se

isprazni stog.

– Redoslijed obrađivanja čvorova (skidanja sa stoga)

vidi se na prethodnoj slici.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

38

Page 39: Poglavlje 6: Oblikovanje algoritama

Općenito o backtrackingu (4)• Backtracking algoritam nikad ne generira cijelo

stablo rješenja, već “reže” one grane (podstabla)

za koje uspije utvrditi da ne vode do rješenja. – Provjeravaju se ograničenja koja n-torka (x1, x2, ... ,xn)

mora zadovoljiti da bi zaista bila rješenje.

– Čvor na i-tom nivou predstavlja n-torke gdje je prvih i

komponenti x1, x2, ... ,xi fiksirano na određeni način.

– Ukoliko se već na osnovi vrijednosti tih i komponenti

može utvrditi da ograničenja nisu zadovoljena, tada

dotični čvor ne treba generirati.

– Ako na prethodnoj slici vrijedi ograničenje da x1, x2, x3

moraju biti međusobno ≠, tada “najljevija” generirana

grana stabla postaje ona za x1=1, x2=2, x3=3 a ukupan

broj generiranih čvorova pada na 19.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

39

Page 40: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (1)

• Na šahovsku ploču dimenzije n×n treba postaviti n

kraljica tako da se one međusobno ne napadaju.

Ovaj problem rješavamo metodom backtracking.

– Očito svaka kraljica mora biti u posebnom retku ploče.

Zato možemo uzeti da je i-ta kraljica u i-tom retku.

– Rješenje se prikazuje kao n-torka (x1, x2, ... ,xn), gdje je xi

indeks stupca u kojem se nalazi i-ta kraljica.

– Znači Si = {1,2, …, n} za sve i. Broj n-torki u prostoru

rješenja je nn.

– Ograničenja koja rješenje (x1, x2, ..., xn) mora zadovoljiti

izvode se iz zahtjeva da se nikoje dvije kraljice ne smiju

naći u istom stupcu niti na istoj dijagonali.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

40

Page 41: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (2)

• Za n = 4 backtracking generira sljedeće stablo. – Rad je ovdje prekinut čim je pronađeno prvo rješenje.

– Crtkano su označeni čvorovi koje je algoritam odmah

poništio (jer krše ograničenja).

SPA-6 STRUKTURE PODATAKA I AL 41

Page 42: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (3)

• Sljedeća slika ilustrira ove iste korake algoritma kao

pomake figura na šahovskoj ploči.

– Zvjezdice su mjesta gdje je algoritam pokušao smjestiti

kraljicu, ali je odmah odustao zbog napada druge kraljice.

SPA-6 STRUKTURE PODATAKA I AL 42

Page 43: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (4)• Zapis algoritma za problem n kraljica u jeziku C.

– Pretpostavljamo da postoji globalno polje za smještanje

rješenja (x1, x2, ... ,xn). Polje je oblika:

– Logička funkcija place( ) kaže da li se k-ta kraljica

može postaviti u k-ti redak i x[k]-ti stupac tako da je

već postavljene 1.,2.,..., (k-1). kraljica ne napadaju.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

43

Page 44: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (5)

• Algoritam za problem n kraljica u C-u (nastavak).

– Funkcija Queens( ) ispisuje sva rješenja problema.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

44

Page 45: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema n kraljica (6)

• Za standardnu

šahovsku ploču

gdje je n=8 naš

algoritam

ispisuje 92

rješenja. Pritom

postoji samo 12

bitno različitih

rješenja. Ostala

se dobiju od tih

12 rotacijama ili

zrcaljenjima.

SPA-6 45

4

2

3

1

8

5

7

6

3

1

4

2

8

6

7

5

4

3

2

1

8

5

7

6

2

1

4

3

8

6

7

5

4

1

3

2

8

5

7

6

4

1

3

2

8

5

7

6

3

1

4

2

7

5

8

6

3

2

4

1

8

5

7

6

4

2

3

1

8

6

7

5

4

3

1

2

8

7

6

5

4

2

3

1

8

6

7

5

4

2

1

3

8

7

6

5

Page 46: Poglavlje 6: Oblikovanje algoritama

Općenito o Branch-and-Bound (1)• Backtracking se koristi i za probleme optimizacije.

– Dakle, od svih rješenja tražimo samo ono koje je

optimalno u nekom smislu.

– Optimalnost se mjeri funkcijom cilja koju treba minimizirati

odnosno maksimizirati.

– Ovisno o primjeni, funkcija cilja interpretira se kao cijena,

trošak, dobitak, zarada, itd.

• Verzija backtrackinga za probleme optimizacije

naziva se branch-and-bound.– Vidjeli smo da u stablu rješenja uvijek treba rezati one

grane koje ne vode do rješenja.

– No kod problema optimizacije mogu se također rezati i

grane koje ne vode do boljeg rješenja (u odnosu na ono

koje već imamo).SPA-6 STRUKTURE PODATAKA I

ALGORITMI

46

Page 47: Poglavlje 6: Oblikovanje algoritama

Općenito o Branch-and-Bound (2)

• Realizacija branch-and-bound za problem

minimizacije.– Potreban nam je postupak određivanja donje

ograde za cijenu po svim rješenjima iz zadanog

pod-stabla.

– Ako ta donja ograda izađe veća ili jednaka od

cijene najboljeg trenutno poznatog rješenja, tada

se dotično pod-stablo može izbaciti iz razmatranja

jer ono ne vodi do boljeg rješenja.

– Važno je da se što prije otkrije “dobro” rješenje.

Uobičajena heuristika je da se pri obradi čvorova-

braće prednost daje onom koji ima manju donju

ogradu.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

47

Page 48: Poglavlje 6: Oblikovanje algoritama

Općenito o Branch-and-Bound (3)

• Ako je d ≥ c1, tada je

pogotovo c2 ≥ d ≥ c1,

pa nam rješenje iz

podstabla nije od

interesa.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

48

Pronađeno

dobro rješenje

sa cijenom c1

Potencijalno

rješenje sa

cijenom c2

Stablo rješenja

za problem

minimizacije

Pod-stablo u

stablu rješenja

s donjom

ogradom d

Page 49: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (1)

• Slijedi konkretan primjer algoritma branch-and-

bound za rješavanje problema minimizacije.

• Zadan je potpuni neusmjereni graf čijim bridovima

su pridružene “cijene”. Treba pronaći Hamiltonov

ciklus s minimalnom cijenom.

– Potpuni graf je onaj u kojem postoji brid između bilo

koja dva vrha.

– Dakle, ako je n broj vrhova a m broj bridova, tada je m

= n(n−1)/2.

– Hamiltonov ciklus je kružni put u grafu koji prolazi

svakim vrhom grafa točno jednom.

– Cijena puta je zbroj cijena odgovarajućih bridova.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

49

Page 50: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (2)

• Graf na slici

zadaje jedan

konkretan

primjerak

problema

trgovačkog

putnika za

n = 5 i m = 10.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

50

Page 51: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (3)

• Uzmimo da su imena vrhova elementi nekog dobro

uređenog skupa, na primjer {a, b, c, d, e}.– Bridove tada možemo poredati leksikografski: (a,b), (a,c),

(a,d), (a,e), (b,c), (b,d), (b,e), (c,d), (c,e), (d,e).

– Dakle svaki brid dobiva svoj redni broj između 1 i m.

– Rješenje problema može se predočiti kao m-torka

(x1, x2, ... ,xm) gdje je xi logička vrijednost koja kaže je

li i-ti brid uključen ili nije.

– Si = {0,1} za sve i. Broj m-torki u prostoru rješenja je 2m.

– Stablo rješenja izgleda kao binarno.

– Jedan čvor u stablu rješenja predstavlja sve

konfiguracije bridova gdje su neki određeni bridovi

“obavezni” a neki drugi određeni bridovi su “zabranjeni”.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

51

Page 52: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (4)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

52

• Stablo

rješenja

izgleda

ovako.

Page 53: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (5)

• Ograničenja koja rješenje (x1, x2, ... ,xm) mora

zadovoljiti svode se na to da dotična konfiguracija

bridova mora predstavljati Hamiltonov ciklus.

• To opet daje sljedeća pravila za provjeru prilikom

generiranja čvorova stabla:– Ako bi isključenje brida (x,y) učinilo nemogućim da x

(odnosno y) ima bar dva incidentna brida u konfiguraciji,

tada (x,y) mora biti uključen.

– Ako bi uključenje brida (x,y) uzrokovalo da x (ili y) ima

više od dva incidentna brida u konfiguraciji, tada (x,y)

mora biti isključen.

– Ako bi uključenje brida (x,y) zatvorilo ne-Hamiltonov

ciklus u konfiguraciji, tada (x,y) mora biti isključen.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

53

Page 54: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (6)

• Cijenu zadanog Hamiltonovog ciklusa možemo

ovako računati kao sumu.– Za svaki vrh grafa pribrojimo cijenu dvaju njemu

incidentnih bridova iz ciklusa.

– Time je svaki brid iz ciklusa uračunat dvaput, pa rezultat

dobivamo dijeljenjem ukupnog zbroja s 2.

• Slično dobivamo postupak računanja donje ograde

za cijenu bilo kojeg Hamiltonovog ciklusa.– Za svaki vrh x nađemo dva najjeftinija brida u grafu koji

su incidentni s x te zbrojimo cijene tih bridova.

– “Male” sume, dobivene za pojedine vrhove, zbrojimo

zajedno u “veliku” sumu.

– “Veliku” sumu podijelimo s 2.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

54

Page 55: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (7)

• Za naš primjerak problema donja ograda bi izašla

(5+6+8+7+9) / 2 = 17,5 → 18 (zbog cjelobrojnosti).

• Ukoliko želimo precizniju donju ogradu za cijenu

Hamiltonovog ciklusa koji pripada određenom pod-

stablu iz stabla rješenja, tada uzimamo u obzir već

fiksiranu uključenost / isključenost nekih bridova.

– Ako je brid (x,y) uključen, tada njegovu cijenu treba

uračunati u “male” sume vrhova x i y, bez obzira je li on

jeftin ili nije.

– Ako je brid (x,y) isključen, tada njegovu cijenu ne

smijemo uračunati u “malu” sumu vrha x odnosno y.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

55

Page 56: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (8)

• Za pod-stablo gdje je (a,b) isključen i (a,c) uključen,

donja ograda je (6+7+8+7+9) / 2 = 18,5 → 19.

• Na osnovi svih ovih ideja moguće je konstruirati

branch-and-bound algoritam za rješavanje

problema trgovačkog putnika.

• Za naš konkretni graf, algoritam generira stablo

rješenja prikazano sljedećom slikom.

• Pronalazi se optimalni Hamiltonov ciklus

(a, c, b, e, d, a) sa cijenom 19.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

56

Page 57: Poglavlje 6: Oblikovanje algoritama

Rješavanje

problema

trg putnika

(9)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

57

A 17,5

(bez zahtjeva)

B 17,5

(a,b)

D 20,5

(a,c) (a,d) (a,e)

E 18

(a,c)

J 18,5

(a,c)

K 21

(a,c) (a,d) (a,e)

C 18,5

(a,b)

F 18

(a,d) (a,e)

G 23

(a,d) (a,e)

L 18,5

(a,d) (a,e)

M 23,5

(a,d) (a,e)

H

(b,c) (b,d) (b,e)

(c,e) (d,e) (c,d)

Hamiltonov ciklus

a b c e d a

Cijena: 23

I

(b,c) (c,d) (c,e)

(b,d) (d,e) (b,e)

Hamiltonov ciklus

a b e c d a

Cijena: 21

N

(b,c) (c,d) (c,e)

(b,d) (d,e) (b,e)

Hamiltonov ciklus

a c b e d a

Cijena: 19

O

(b,c) (b,d) (b,e)

(c,e) (d,e) (c,d)

Hamiltonov ciklus

a c e b d a

Cijena: 23

reže se nakon otkrića I zaboravlja se zbog I

reže se nakon otkrića I zaboravlja se zbog I

najbolje 'do sada' ukupno najbolje

Page 58: Poglavlje 6: Oblikovanje algoritama

Rješavanje problema trg putnika (10)

• Objašnjenje prethodne slike.– U svaki čvor upisano je njegovo ime (veliko slovo),

pripadna donja ograda, te zahtjevi na uključenost

odnosno isključenost nekih bridova.

– Zahtjevi iz nadređenog čvora prenose se i na sve

podređene čvorove.

– Na svakom nivou stabla uvodi se samo jedan novi

zahtjev, ostali koji pišu su posljedica naših pravila.

– Na primjer, u čvoru D originalno se zahtijeva da

bridovi (a,b) i (a,c) budu uključeni, no onda nužno

(a,d) i (a,e) moraju biti isključeni zbog pravila 2.

– Čvorovi su imenovani u redoslijedu svog nastajanja.

Taj redoslijed je posljedica heuristike da se prije

razgrađuje onaj brat koji ima manju donju ogradu.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

58

Page 59: Poglavlje 6: Oblikovanje algoritama

Sadržaj Poglavlja 6

6.1. Metoda podijeli-pa-vladaj

6.2. Dinamičko programiranje

6.3. Pohlepni pristup

6.4. Backtracking

6.5. Lokalno traženje

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

59

Page 60: Poglavlje 6: Oblikovanje algoritama

Općenito o lokalnom traženju (1)

• Lokalno traženje služi isključivo za rješavanje

problema optimizacije.

• Raspolažemo jednim dopustivim rješenjem. To

takozvano “tekuće” rješenje nastojimo poboljšati. – Promatramo okolinu (susjedstvo) tekućeg rješenja,

dakle skup dopustivih rješenja koja su “blizu” tekućem.

– Rješenje je “blizu” tekućem ako se može dobiti nekom

jednostavnom transformacijom iz tekućeg.

– Biramo najbolje rješenje iz okoline, ili bar rješenje iz

okoline koje je bolje od tekućeg.

– Izabrano rješenje proglašavamo novim tekućim.

– Postupak se nastavlja sve dok ne dobijemo tekuće

rješenje u čijoj okolini nema boljeg rješenja.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

60

Page 61: Poglavlje 6: Oblikovanje algoritama

Općenito o lokalnom traženju (2)

• Algoritmi dobiveni strategijom lokalnog traženja

relativno su brzi.

• No oni samo približno rješavaju postavljeni

problem optimizacije. Naime: – Rješenje koje oni daju obično nije optimalno.

– Ipak, ono je blizu optimalnom i bolje je od polaznog.

• Lokalno traženje primjenjuje se za teške

kombinatoričke probleme. – Računanje stvarno optimalnog rješenja iziskivalo bi

previše vremena.

– Zbog toga se moramo zadovoljiti približnim rješenjem.

• U nastavku slijede dva konkretna primjera

algoritma lokalnog traženja.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

61

Page 62: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (1)

• Opet promatramo potpuni neusmjereni graf čijim

bridovima su zadane cijene. Tražimo Hamiltonov

ciklus s minimalnom cijenom.

• Algoritam 2-opt radi ovako.

– Pamti se bilo koji Hamiltonov ciklus kao tekuće rješenje.

– Promatra se 2- okolina tekućeg ciklusa: • nju čine svi Hamiltonovi ciklusi koji se dobivaju iz tekućeg

izbacivanjem dvaju ne-susjednih bridova i umetanjem

odgovarajućih “unakrsnih” bridova - vidi sliku.

– U 2-okolini pronalazi se ciklus s najmanjom cijenom.• Ako taj ciklus ima manju cijenu od tekućeg, on postaje novi

tekući ciklus i algoritam se nastavlja.

• Inače je algoritam završen i on kao rješenje daje zadnji tekući

ciklus (za njega kažemo da je 2-optimalan).SPA-6 STRUKTURE PODATAKA I

ALGORITMI

62

Page 63: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (2)

• Generiranje 2-okoline tekućeg Hamiltonovog

ciklusa. Transformaciju sa slike provodimo na sve

moguće načine, dakle za sve moguće izbore ne-

susjednih bridova.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

63

Page 64: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (3)

• U 2-okolini tekućeg ciklusa postoji n(n − 1)/2 − n =

n(n − 3)/2 ciklusa, gdje je n broj vrhova u grafu.

– Naime, dva od n bridova duž ciklusa možemo izabrati

na n(n−1)/2 načina,

– no n takvih izbora ne vrijedi jer su bridovi susjedni.

• Dakle, jedna iteracija 2-opt algoritma izvršava se

u vremenu O(n2).

• Broj iteracija i točnost rješenja teško se mogu

predvidjeti, no očito je da obje stvari bitno ovise o

izabranom polaznom rješenju.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

64

Page 65: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (4)

• Pratimo rad algoritma

2-opt na primjerku

problema trgovačkog

putnika koji je zadan

sljedećom grafom.

• Kao polazno rješenje

biramo Hamiltonov

ciklus (a, b, c, d, e, a)

sa cijenom

3+4+5+6+7 = 25.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

65

Page 66: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (5)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

66

• 2-okolina

polaznog

rješenja

sadrži

sljedećih 5

ciklusa sa

sljedećim

cijenama:

Page 67: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (6)

• Novo tekuće rješenje je na primjer (a, d, c, b, e, a)

sa cijenom 21. Algoritam kreće u drugu iteraciju.

• U okolini novog tekućeg ciklusa nalazi se

optimalno rješenje (a, c, b, e, d, a) sa cijenom 19,

prikazano na slici.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

67

• Zato ćemo u drugoj

iteraciji dobiti to

optimalno rješenje

kao treće tekuće.

• Algoritam će završiti

rad nakon treće

iteracije.

Page 68: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (7)

• Algoritam

2-opt

može se

realizirati

sljedećom

C

funkcijom,

gdje je SIZE

pogodna

globalna

konstanta.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

68

Page 69: Poglavlje 6: Oblikovanje algoritama

Algoritam 2-opt za trg putnika (8)

• Algoritam 2-opt je najjednostavniji član porodice

r-opt algoritama za r ≥ 2.

• Općenito, r-opt pretražuje r-okolinu tekućeg

Hamiltonovog ciklusa. r-okolina se sastoji od svih

Hamiltonovih ciklusa koji se u r od n bridova

razlikuju od tekućeg.

• Jedna iteracija r-opt zahtijeva vrijeme O(nr ).

Znači, povećanjem r dobivamo sve točniji no

vremenski sve zahtjevniji algoritam.

• U praksi se najčešće koriste brzi 2-opt i precizniji

3-opt algoritam. 4-opt se već ne isplati.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

69

Page 70: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (1)

• Problem traženja optimalnog linearnog

razmještaja glasi ovako.– Zadan je neusmjereni graf G, čiji skup vrhova je

označen s V , a skup bridova s E.

– Vrhovi iz V zovu se “komponente” (komadi opreme).

– Svakom bridu (u,v)E pridružena je težina w(u,v) koja se

tumači kao “broj žica” između komponenti u i v.

– Htjeli bi pronaći pogodnu numeraciju v1, v2, ... , vn vrhova

takvu da (vi,vj)E |i − j|·w(vi,vj) bude minimalna.

– Drugim riječima, htjeli bi pronaći razmještaj komponenti

u linearno organiziranom ormaru (sastavljenom od

ladica 1, 2, ..., n) tako da ukupna duljina potrebnih žica

bude minimalna.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

70

Page 71: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (2)

• Interpretacija problema traženja optimalnog

linearnog razmještaja – kako u računskom centru

potrošiti što manje žice?

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

71

v2v1 ...v3 ... vn

Ormar s ladicama (u polegnutom položaju)

komponente

žice...

Page 72: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (3)

• Algoritam lokalnog traženja za problem linearnog

razmještaja radi ovako.

– Kreće se od proizvoljnog linearnog razmještaja kao od

polaznog rješenja.

– Okolina tekućeg rješenja istražuje se tako da se na

tekući raspored primjenjuju sljedeće transformacije.

1. Zamijeni susjedne komponente vi i vi+1. Neka je L(j) zbroj

težina bridova (broj žica) koji idu nalijevo iz vj . Neka je R(j)

zbroj težina bridova (broj žica) koji idu nadesno iz vj. Zamjena

susjednih komponenti donosi smanjenje ukupne duljine žica

ako je: L(i) − R(i) + R(i+1) − L(i+1) + 2·w(vi,vi+1) negativno.

2. Izvadi komponentu vi i umetni je između vj i vj+1 za neke i i j.

3. Zamijeni bilo koje dvije komponente vi i vj .

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

72

Page 73: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (4)

• Izvod formule za povećanje ukupne duljine žica

ako susjedne komponente vi i vi+1 zamijene mjesta

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

73

– Kad vi prijeđe na mjesto od vi+1 zbroj duljina svih žica

koje izlaze iz vi poveća se za:

L(i) − ( R(i) − w(vi,vi+1) ) =

L(i) − R(i) + w(vi,vi+1) .

vi vi+1

w(vi,vi+1) žica

L(i) žica

R(i) žica

Page 74: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (5)

• Izvod formule za povećanje ukupne duljine žica

ako susjedne komponente vi i vi+1 zamijene mjesta

(nastavak)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

74

– Kad vi+1 prijeđe na mjesto od vi zbroj duljina svih žica

koje izlaze iz vi+1 poveća se za:

R(i+1) − ( L(i+1) − w(vi,vi+1) ) =

R(i+1) − L(i+1) + w(vi,vi+1) .

vi vi+1

w(vi,vi+1) žica

L(i+1)

žica

R(i+1)

žica

Page 75: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (6)

• Izvod formule za povećanje ukupne duljine žica

ako susjedne komponente vi i vi+1 zamijene mjesta

(drugi nastavak)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

75

– Žice koje ne dodiruju ni vi ni vi+1 zadržavaju istu duljinu.

– Kad zbrojimo prethodne dvije formule, dobije se da je

ukupno povećanje duljina žica jednako:

L(i) − R(i) + R(i+1) − L(i+1) + 2· w(vi,vi+1) .

– Ako je to povećanje negativno, tada zamjena vi i vi+1

donosi smanjenje ukupne duljine žica.

Page 76: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (7)

• Pretpostavimo da graf

sa slike sada

predstavlja primjerak

problema linearnog

razmještaja.

• Primjenjujemo

algoritam lokalnog

traženja, s time da se

ograničavamo na

jednostavne

transformacije oblika 1.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

76

Page 77: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (8)

• Polazni razmještaj (a, b, c, d, e) ima ukupnu duljinu

žica 97 i prikazan je na ovoj slici.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

77

Page 78: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (9)

• Razmatramo zamjenu d i e. Imamo L(d) = 13,

R(d) = 6, L(e) = 24, R(e) = 0. Dakle:

L(d) − R(d) + R(e) − L(e) + 2·w(d,e) = −5.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

78

Mijenjamo d i e

pa dobivamo

bolji razmještaj

(a, b, c, e, d) s

ukupnom

duljinom žica 92

prikazan na slici

s desna.

Page 79: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (10)

• Taj bolji razmještaj možemo još poboljšati zamje-

nom c s e, čime dobivamo raspored (a, b, e, c, d) s

ukupnom duljinom žica 91 prikazan na slici.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

79

• Zadnji razmještaj je

lokalno optimalan za

skup transformacija

oblika 1. Ipak, on nije

globalno optimalan

jer bi (a, c, e, d, b)

imao ukupnu duljinu

žica 84.

Page 80: Poglavlje 6: Oblikovanje algoritama

Optimalni linearni razmještaj (11)

• Vremenska složenost jedne iteracije algoritma.

– Ako se ograničimo na transformacije oblika 1, tada

postoji samo n−1 transformacija koje treba razmotriti.

– Već izračunate L(i) i R(i) treba ažurirati samo onda kad

se vi zamijeni s vi−1 ili vi+1.

• Ažuriranje: na primjer kod zamjene vi s vi+1 novi L(i) odnosno

R(i) je L(i+1) − w(vi,vi+1) odnosno R(i+1) + w(vi,vi+1).

– Dakle testiranje svih n−1 transformacija te ažuriranje

L(i)-ova i R(i)-ova za odabranu transformaciju zahtijeva

vrijeme O(n). To je sve što radimo u jednoj iteraciji.

– Inicijalizacija L(i)-ova i R(i)-ova na početku algoritma

može obaviti u vremenu O(n2). SPA-6 STRUKTURE PODATAKA I

ALGORITMI

80

Page 81: Poglavlje 6: Oblikovanje algoritama

Složeniji oblici lokalnog traženja (1)

• Manjkavost lokalnog traženja u tome što ono

može “zaglaviti” u lokalnom optimumu – vidi sliku.

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

81

Page 82: Poglavlje 6: Oblikovanje algoritama

Složeniji oblici lokalnog traženja (2)

• Složenije varijante lokalnog traženja sadrže

dodatne mehanizme kojima se nastoji smanjiti

opasnost od zaglavljivanja u lokalnom optimumu.

– Tabu search čuva listu “zabranjenih” nedavnih koraka,

čime se algoritam tjera da pokuša nove korake.

– Simulated annealing uključuje slučajne transformacije

tekućeg rješenja. Intenzitet slučajnosti se smanjuje

tijekom napredovanja algoritma.

– Evolucijski (genetički) algoritmi umjesto jednog

tekućeg rješenja pamte cijele “populacije” rješenja, a

kao okolinu te populacije promatraju rješenja koja se

mogu dobiti križanjem ili mutiranjem rješenja iz

populacije.SPA-6 STRUKTURE PODATAKA I

ALGORITMI

82