poglavlje 6: oblikovanje algoritama
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