poglavlje 6: oblikovanje algoritama

Post on 05-Jan-2022

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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.

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.

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

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

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

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

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

Množenje dugačkih cijelih brojeva(5)

• Skica algoritma u C-u (nastavak).

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

12

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

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

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

Š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

Š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

Š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.

Š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

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

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

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

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

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

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

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

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

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

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

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.

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

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].

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Rješavanje problema trg putnika (4)

SPA-6 STRUKTURE PODATAKA I

ALGORITMI

52

• Stablo

rješenja

izgleda

ovako.

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

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.

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

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

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

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...

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

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

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

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.

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

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

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.

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.

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

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

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

top related