Download as pdf or txt
Download as pdf or txt
You are on page 1of 47

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Mladen Nikolic

(2
01
6)

Predrag Janicic

le

kt

ro
n

sk
o

iz

an

je

CKA

VESTA
INTELIGENCIJA

Beograd
2016.

Autori:
dr Predrag Janicic, redovni profesor na Matematickom fakultetu u Beogradu
dr Mladen Nikolic, docent na Matematickom fakultetu u Beogradu
CKA

VESTA
INTELIGENCIJA
Izdavac: Matematicki fakultet Univerziteta u Beogradu
Studentski trg 16, 11000 Beograd
Za izdavaca: prof. dr Zoran Rakic, dekan
Recenzenti:
...
...

le

kt

ro
n

sk
o

iz

an

je

(2
01
6)

Obrada teksta, crtezi i korice: autori

ISBN 978-86-7589-100-0

2015. Predrag Janicic i Mladen Nikolic

Ovo delo zasticeno je licencom Creative Commons CC BY-NC-ND 4.0 (Attribution-NonCommercial-NoDerivatives 4.0
International License). Detalji licence mogu se videti na veb-adresi http://creativecommons.org/licenses/by-nc-nd/
4.0/. Dozvoljeno je umnozavanje, distribucija i javno saopstavanje dela, pod uslovom da se navedu imena autora.
Upotreba dela u komercijalne svrhe nije dozvoljena. Prerada, preoblikovanje i upotreba dela u sklopu nekog drugog nije
dozvoljena.

Sadrzaj

(2
01
6)

Sadrzaj
1 Uvod

Pretraga

2 Resavanje problema koriscenjem pretrage

11
13

19

je

sk
o

iz

Obilazak grafa u dubinu i sirinu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20


Dejkstrin algoritam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 Informisana pretraga

27

Pohlepna pretraga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Pretraga prvo najbolji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Algoritam A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

ro
n

4.1
4.2
4.3

3 Neinformisana pretraga
3.1
3.2

Elementi problema pretrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15


Resenje problema i kvalitet algoritama pretrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Neinformisana i informisana pretraga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

an

2.1
2.2
2.3

45

kt

II Logika i deduktivno zakljucivanje

le

III Masinsko ucenje i induktivno zakljucivanje

47

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Predgovor

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Glava 1

Uvod

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

kt

le

E
ro
n
sk
o
d

iz
an
je

Pretraga

(2
01
6)

Deo I

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Glava 2

Resavanje problema koriscenjem pretrage

iz

an

je

(2
01
6)

Vestacka inteligencija bavi se, prevashodno, problemima u kojima se javlja kombinatorna eksplozija, problemima cije resavanje zahteva razmatranje ogromnog broja mogucnosti. Resavanje takvih problema obicno se
svodi na neku vrstu pretrage, sistematicnog postupka obrade velikog broja mogucnosti. Kako je sve mogucnosti
cesto nemoguce razmotriti u razumnom vremenu, potrebno je pretragu usmeravati kako bi se razmotrile mogucnosti
koje su izglednije da daju resenje problema. Neke od realnih primena algoritama pretrage su pronalazenje najkracih puteva, igranje logickih igara, navigacija robota, automatsko nalazenje redosleda sklapanja delova u
industriji, dizajn proteina sa odredenim trazenim svojstvima, resavanje logistickih problema i slicno.
Problemi pretrage cesto zahtevaju pronalazenje niza koraka ili akcija kojima se ostvaruje cilj kada to ne moze
biti ostvareno pojedinacnim koracima ili akcijama. Pretraga moze biti shvacena i sire, pa ce u daljem tekstu
biti opisani i neki problemi i algoritmi optimizacije.
Problemi i algoritmi pretrage mogu se opisati i u terminima agenata. U tom slucaju, smatra se da pretragu
sprovodi agent, da se agent tokom pretrage moze naci u razlicitim stanjima, da agent pokusava da dode do
zavrsnog stanja, itd. Takva formulacija ne menja nista sustinski u problemu ili algoritmima, ali moze biti
pogodna zbog uniformnosti kroz razlicite podoblasti vestacke inteligencije.

Primer 2.1. Slagalica 15 (ili Lojdova slagalica) sastoji se od 15 kvadrata rasporedenih na tabli velicine 4x4

le

kt

ro
n

sk
o

polja. Kvadrati su numerisani brojevima od 1 do 15. Slagalicu je potrebno urediti tako da su polja poredana
redom od prvog reda i da je poslednje polje u cetvrtom redu prazno. Taj raspored polja moze se kompaktno
zapisati kao [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, _] i prikazan je na slici 2.1.

9 10 11 12
13 14 15
Slika 2.1: Ciljni raspored za slagalicu 15

Kada je dat proizvoljan raspored polja na tabli, u svakom koraku moze se pomeriti jedno od dva ili jedno od
tri ili jedno od cetiri polja. Dakle, za svaki raspored broj mogucih akcija je izmedu dva i cetiri. Naredna slika
ilustruje razmatranje svih mogucih koraka za pocetni raspored [_, 2, 3, 4, 6, 5, 10, 12, 9, 1, 8, 15, 13, 14, 7, 11].
Slagalicu je moguce sloziti tako sto se razmatraju svi moguci koraci, a zatim svi moguci koraci u dobijenim
stanjima i tako dalje, sve dok se ne naide na trazeni, ciljni raspored. Ocigledno, taj pristup sigurno dovodi do
resenja za bilo koju pocetnu poziciju. Isto tako, ocigledno je da je taj pristup potpuno nepraktican i zahteva
razmatranje ogromnog broja mogucnosti. Zaista, za proizvoljnu pocetnu poziciju, slagalicu je moguce sloziti u
najvise 80 koraka, pri cemu postoje pocetne pozicije za koje ne postoji resenje u manje od 80 koraka. To znaci
da je za garantovano pronalazenje resenja potrebno ispitati vise od 280 mogucnosti, sto je naravno prakticno
neizvodivo. Zbog toga, prakticno sprovodivo resenje zahteva neku dodatnu ideju i usmeravanje pretrage, kako
13

14
2 3 4
6 5 10 12
9 1 8 15
13 14 7 11

2 3 4
6 5 10 12
9 1 8 15
13 14 7 11

6 2 3 4
5
10 12
9 1 8 15
13 14 7 11

2
3 4
6 5 10 12
9 1 8 15
13 14 7 11

6 2 3 4
9 5 10 12
1 8 15
13 14 7 11

2 3 4
6 5 10 12
9 1 8 15
13 14 7 11

an

iz

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15

2 3
4
6 5 10 12
9 1 8 15
13 14 7 11

je

...

2 5 3 4
6
10 12
9 1 8 15
13 14 7 11

(2
01
6)

6 2 3 4
5 10 12
9 1 8 15
13 14 7 11

sk
o

Slika 2.2: Stablo pretrage za slagalicu 15

kt

ro
n

ne bi bile razmatrane sve mogucnosti. Jedna moguca ideja bi bila da se razmatraju samo koraci koji vode do
pozicija koje su blize resenju, pri cemu se za odredivanje rastojanja pozicije od ciljne pozicije moze uzeti zbir
rastojanja svakog polja od njegove ciljne pozicije. Medutim, ova jednostavna ideja ne dovodi do resenja. Naime,
u nekim pozicijama nema koraka koji vodi ka boljoj pozicijama (pozicija u korenu stabla na slici 2.2, je jedna
takva pozicija).

Primer 2.2. U skupu gradova od kojih su neki medusobno povezani putevima, zadatak je od jednog grada stici

le

do nekog drugog zadatog grada. Ovaj problem moze se razmatrati kao problem pretrage: pretraga moze da krece
od pocetnog grada, da se zatim razmatraju svi gradovi do kojih se moze doci neposredno, i tako dalje, sve dok
se ne dode do ciljnog grada. Primer ovakvog problema ilustrovan je na slici 2.3. Konkretan zadatak moze biti,
na primer, nalazenje puta od Zagreba do Bukuresta.
Bitno su razlicite varijante problema u kojoj jesu i u kojoj nisu unapred poznati svi gradovi i putevi izmedu
njih. U prvom slucaju, bitno je i da li su poznate duzine puteva izmedu gradova ili vazdusna rastojanja.

Primer 2.3. Jednu od najstarijih grupa matematickih problema cine geometrijski konstruktivni problemi. Zadatak je lenjirom i sestarom, na osnovu datih ogranicenja ili datih pocetnih tacaka, konstrusati trazenu geometrijsku
figuru. Lenjirom i sestarom moze se konstruisati prava koja je odredena dvema tackama, krug cije je srediste
jedna tacka i koji sadrzi drugu tacku, moguce je konstruisati presek dve prave i moguce je konstruisati presek
prave i kruga ovo su takozvane elementarne konstrukcije. I ovaj problem moze se razmatrati kao problem
pretrage: pretraga moze da krece od pocetnih figura, zatim se razmatraju svi moguci koraci (sve moguce primene
elementarnih konstrukcija nad postojecim figurama), i tako dalje, sve dok se ne dobije trazena figura.
Primer 2.4. Kao problem pretrage moze da se opise kretanje robota od polazne do ciljne tacke u nepoznatnom
okruzenju. Robot u vecini trenutaka moze da promeni smer i brzinu kretanja i u zavisnosti od tih akcija moze
do cilja da stigne pre ili kasnije.
Problemi pretrage obicno mogu da se pogodno reprezentuju grafovima (a i da se vizualizuju na odgovarajuci
nacin). Tada, cvorovi grafa odgovaraju stanjima, a grane grafa akcijama. Taj graf moze da bude usmeren ili

15

2. Resavanje problema koriscenjem pretrage


Budimpesta
340
300

Zagreb
400
290

380
320
390
370

Sarajevo

230
170

840
640

Beograd
290
190
450
280

Podgorica

590
450

Bukurest
360
300

430
320

350
190

Skoplje

240
170

Sofija

(2
01
6)

Slika 2.3: Graf koji opisuje problem puteva izmedu gradova

iz

an

je

neusmeren neusmeren je ako za svako stanje iz kojeg se moze nekom akcijom doci do stanja , postoji
akcija kojom se iz stanja moze doci do stanja . U primeru slagalice, graf je neusmeren i svakom rasporedu
odgovara jedan cvor grafa. I u primeru gradova, taj graf je neusmeren, a svakom gradu odgovara jedan cvor

grafa (slika 2.3). Cesto


je proces resavanja pogodno ilustrovati stablom a ne grafom (slika 2.2).
U mnogim problemima vestacke inteligencije potrebno je obici neki graf ili odrediti najkraci put izmedu
dva cvora grafa i ovi problemi se, dakle, prirodno razmatraju kao problemi pretrage. Opsti problem nalazenja
puta (eng. path finding) moze se opisati na sledeci nacin: dat je graf svojim cvorovima i granama izmedu nekih
od njih i zadatak je naci put izmedu dva zadata cvora (polazni cvor i ciljni cvor). Granama grafa mogu da
budu pridruzene nenegativne cene i zadatak moze da bude nalazenje puta izmedu zadata dva cvora takvog da
je zbir cena svih grana koje pripadaju putu minimalan. Postoji mnogo algoritama za resavanje ovog problema
[?, ?] i oni imaju mnoge primene, ukljucujuci primene u planiranju obilazaka i putovanja, dizajniranju cipova,
rutiranju u racunarskim mrezama, navigaciji robota, industriji igara, itd.

Elementi problema pretrage

sk
o

2.1

ro
n

Da bi se neki problem razmatrao kao problem pretrage i resavao primenom algoritama pretrage, on treba
da ima odredenu strukturu i odredene elemente:

Skup mogucih stanja: U toku procesa pretrage razmatraju se razlicita stanja. Za odlucivanje u datom trenutku potrebno je poznavanje skupa svih raspolozivih stanja.

kt

Polazno stanje: Resavanja problema krece od jednog odredenog stanja, koje nazivamo polaznim stanjem.

le

Test cilja: Problem je resen ako se dode do ciljnog stanja, zavrsnog stanja. Potrebno je da postoji raspoloziv
efektivan test koji proverava da li se doslo do ciljnog stanja tj. do zavrsetka procesa pretrage.

Skup mogucih akcija: U svakom koraku pretrage moze se preduzeti neki korak, neka akcija. Niz akcija
preduzetih u odgovarajucim trenucima treba da dovede do resenja problema. Skup mogucih akcija moze
biti isti u svakom stanju ili moze da se razlikuje od stanja do stanja, sto zavisi od problema koji se resava.

Funkcija prelaska: Ova funkcija preslikava par stanje-akcija u novo stanje, dobijeno izborom neke akcije u

nekom stanju. Ukoliko ova funkcija nije poznata, nije poznato u koje ce se stanje dospeti posle preduzimanja odredene akcije i proces odlucivanja postaje kompleksniji. Funkcija prelaska nije poznata, na primer,
u slucaju delovanja u nepoznatoj ili promenljivoj okolini. Jedan nacin resavanja ovakvih problema je
koriscenjem informacija iz iskustva, odnosno aproksimiranjem ove funkcije pomocu procesa koji se zasniva
na analizi pokusaja i gresaka.

Cena akcije: Ovo je funkcija koja preslikava par stanje-akcija u numericku vrednost cenu preduzimanja
date akcije u datom stanju.

Kod nekih problema se nabrojani elementi lako i prirodno uocavaju, dok je kod drugih potrebna i preformulisanje problema.
Stanja koja su neposredno dostupna iz nekog stanja zovemo i susedima tog stanja a ponekad i decom tog
stanja.

2.2. Resenje problema i kvalitet algoritama pretrage

16

Primer 2.5. Elementi problema iz primera 2.1 mogu biti definisani na sledeci nacin:
Skup stanja: skup svih permutacija [1 2 . . . 16 ] za {_, 1, 2, . . . , 15}.
Polazno stanje i zavrsno stanje: polazno stanje moze biti bilo koje stanje slagalice (za neke od njih ciljni
raspored nije moguce dobiti).
Test cilja: provera da li je stanje jednako [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, _].
Skup akcija: moze biti {, , , }, gde se date akcije odnose na pomeranje praznog polja levo,
desno, gore i dole. Iako je naizgled prirodnije kao akcije razmatrati pomeranje kvadrata susednih praznom
polju na prazno polje, ovakva formulacija je jednostavnija zbog uniformnosti.
Funkcija prelaska: preslikava stanja i akcije u stanja koja nastaju pomeranjem praznog polja na neku od
cetiri moguce strane.

(2
01
6)

Cena akcije: moze biti konstantna za svaku akciju (na primer, 1), posto se sva pomeranja mogu smatrati
jednako skupim. Cena resenja je u tom slucaju jednaka ukupnom broju pomeranja potrebnih za slaganje
slagalice.

Primer 2.6. Elementi problema stizanja iz jednog grada u drugi (primer 2.2) su:

Polazno stanje: polazno stanje je grad iz kojeg se krece.

je

Skup stanja: Skup gradova koji su dostupni iz polaznog grada (neposredno ili posredno).

an

Test cilja: Provera da li je tekuci grad jednak ciljnom gradu.

iz

Skup mogucih akcija: Kretanje ka susednim gradovima (skup mogucih akcija u ovom problemu se razlikuje
od stanja do stanja, jer su za razlicite gradove razliciti i skupovi direktno dostupnih gradova).
Funkcija prelaska: Odredena je vezama izmedu gradova (i smerom u kojem se krece iz tekuceg grada).

sk
o

Cena akcije: Na primer, duzina puta ili cena goriva potrebnog za prevoz izmedu susednih gradova.

Primer 2.7. U slucaju kretanja robota (primer 2.4), bilo bi potrebno odrediti moguce smerove kretanja i diskre-

Resenje problema i kvalitet algoritama pretrage

kt

2.2

ro
n

tizovati intervale u kojima se menja smer kretanja. Takode, bilo bi potrebno odluciti da li se pokreti razlicitim
delovima robota mogu preduzimati simultano ili ne. Posle toga bi se navedeni elementi problema mogli lako
definisati.

le

Resenje problema pretrage je niz koraka, akcija koji vode od polaznog stanja do ciljnog stanja. Svakom
resenju se moze pridruziti njegova cena kao suma cena akcija koje se preduzimaju. Optimalno resenje je resenje
sa najmanjom cenom. Ono ne mora biti jednoznacno definisano.
Kao i kod drugih vrsta algoritama, kod algoritama pretrage potrebno je poznavati njihova svojstva kako bi
se lakse izvrsio izbor pogodnog algoritma za dati problem. Najvaznija opsta svojstva koje algoritmi pretrage
mogu da imaju su sledeca:

Potpunost je svojstvo koje garantuje da ce algoritam naci neko resenje problema ako resenja uopste postoje.

Ovo svojstvo je ocito pozeljno, ali se u nekim slucajevima ne zahteva. Naime, u slucaju vrlo teskih
problema cesto je moguce formulisati heuristike koje ne garantuju pronalazenje resenja, ali u visokom
procentu slucajeva nalaze dobra resenja mnogo brze nego potpuni algoritmi.

Optimalnost je svojstvo koje garantuje nalazenje resenja sa najmanjom cenom. Moguce je da algoritam koji
nema ovo svojstvo cesto pronalazi resenja bliska optimalnim, ali u znacajno kracem vremenu.

Vremenska slozenost govori, kao i za druge vrste algoritama, o tome koliko ce vremena biti potrebno za
sprovodenje procesa pretrage. Obicno se razmatra vremenska slozenost najgoreg i prosecnog slucaja.

Prostorna slozenost govori, kao i za druge vrste algoritama, o tome koliko je memorije potrebno za sprovodenje
procesa pretrage. Obicno se razmatra prostorna slozenost najgoreg i prosecnog slucaja.

17

2. Resavanje problema koriscenjem pretrage

2.3

Neinformisana i informisana pretraga

Prilikom resavanja nekog problema, moguci su razliciti stepeni poznavanja detalja samog problema. U
primeru pronalazenja puta od grada do grada (primer 2.2), moguce je na primer:
1. potpuno nepoznavanje rastojanja izmedu gradova;
2. poznavanje rastojanja samo izmedu susednih gradova (koja se, na primer, mogu procitati sa putokaza);
3. poznavanje vazdusnih rastojanja od svih gradova do ciljnog grada (koja se, na primer, mogu proceniti na
osnovu mape);
4. tacno poznavanje putnog rastojanja izmedu svih parova (ne nuzno susednih) gradova.

an

je

(2
01
6)

Prema dostupnosti informacija koje mogu pomoci u pronalazenju ciljnog stanja u toku pretrage, problemi
pretrage se dele na probleme informisane i neinformisane pretrage. U skladu sa tim, moguce je formulisati i
algoritme koji mogu da iskoriste dostupne informacije, pa stoga i algoritme delimo na algoritme informisane i
neinformisane pretrage.
U problemu iz primera 2.2, ako su raspolozive samo informacije o direktno dostupnim stanjima, u pitanju
je problem neinformisane pretrage i za resavanje je moguce koristiti standardne algoritme za pretragu u sirinu
ili u dubinu. Ukoliko su poznata vazdusna rastojanja izmedu gradova, ona bi se mogla iskoristiti kao procena
korisna za navodenje pretrage i u tom slucju bi problem pripadao grupi problema informisane pretrage. U tom
slucaju mogu se koristiti specijalizovani algoritmi u zavisnosti od vrste informacija koje su na raspolaganju.
Za problem pronalazenja najkracih puteva u grafu algoritam A* moze da iskoristi, na primer, informaciju o
euklidskom rastojanju izmedu cvorova u grafu. U slucaju problema igranja saha, egzaktan algoritam pretrage
minimax se moze kombinovati sa heuristickom procenom pozicije (na primer, koriscenjem informacije o figurama,
mogucnosti mata u malom broju poteza i slicno).

Pitanja i zadaci

iz

Pitanje 2.1. Navesti barem pet opstih elemenata svakog problema pretrage.

le

kt

ro
n

sk
o

Pitanje 2.2. Kako se, prema dostupnosti informacija koje mogu pomoci u pronalazenju ciljnog stanja u toku
pretrage, dele problemi pretrage?

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Glava 3

(2
01
6)

Neinformisana pretraga

je

U svim problemima pretrage, podrazumeva se da je moguce opaziti tekuce stanje, preduzimati akcije i
prepoznati ciljno stanje. Specificno za neinformisanu pretragu (eng. uninformed) je to sto nema dodatnih
informacija koje mogu pomoci u pronalazenju ciljnog stanja. U primeru pronalazenja puta izmedu dva grada,
scenario neinformisane pretrage odgovara situaciji u kojoj se u svakom gradu zna koji je to grad, moguce je
izabrati jedan od puteva ka drugim gradovima, moguce je pamtiti posecene gradove i prepoznati odredisni,
ali nema nikakvih informacija o rastojanjima izmedu gradova (karte, putna signalizacija, itd). Tipican primer
problema neinformisane pretrage je i problem lavirinta koji je opisan u nastavku.

Primer 3.1. Lavirint se sastoji od skupa povezanih hodnika kojima je moguce kretati se. Svaki hodnik ima

an

jedno ili vise polja i dva kraja. Jedno polje je ulaz, a jedno izlaz iz lavirinta. Ulaz, izlaz, krajeve hodnika, kao i
polja koja su zajednicka za dva hodnika zovemo cvorovima lavirinta. Cilj je pronaci put od ulaza do izlaza preko
cvorova lavirinta. Elementi ovog problema su sledeci:

iz

Skup stanja: skup cvorova lavirinta.

sk
o

Polazno stanje: ulaz u lavirint.


Ciljno stanje: izlaz iz lavirinta.

ro
n

Skup mogucih akcija: izbor puta (tj. sledeceg cvora lavirinta) u svakom koraku.

le

kt

Funkcija prelaska: odredena je vezama izmedu cvorova lavirinta.

22

19

11

12

1
2
3

20
4

10

21

14

13

17

15

16

18

5
6
7
8

10
11
12
13
19
14
22
17 20
15
18 21
16

Slika 3.1: Primer lavirinta

Jedan nacin pronalazenja izlaza (koji ce u nastavku biti preciznije formulisan algoritmom pretrage) je drzati
se leve strane hodnika i pratiti zidove dok se ne naide na izlaz.
Elementi problema pretrage (stanja i relacija prelaska), pa i problema neinformisane pretrage se najcesce
prirodno izrazavaju pomocu grafova, tako da su i algoritmi neinformisane pretrage najcesce formulisani u vidu
algoritama obilaska grafova. Na primeru lavirinta, radi se o grafu ciji cvorovi su cvorovi lavirinta, a grane putevi
izmedu tih cvorova lavirinta (slika 3.1 (desno)). Ukoliko je graf koji odgovara lavirintu stablo, kaze se da je
lavirint savrsen.
19

3.1. Obilazak grafa u dubinu i sirinu

3.1

20

Obilazak grafa u dubinu i sirinu

Oblizak grafa u dubinu (eng. depth-first search DFS) i u sirinu (eng. breadth-first search BFS) su
metode neinformisane pretrage koje ispituju sve cvorove u grafu trazeci resenje, obicno neki specifican cvor.
Oni sistematski pretrazuju ceo graf bez ikakvog navodenja. Posebna paznja ce biti posvecena bektrekingu, jednoj
modifikaciji obilaska grafa u dubinu.

3.1.1

Pretraga u dubinu

Algoritam: DFS (pretraga u dubinu)


Ulaz: Graf , polazni cvor i ciljni cvor
Izlaz: Put od polaznog ciljnog cvora u grafu (ako postoji takav put)

(2
01
6)

Pretraga u dubinu je pretraga koja napreduje obradujuci najpre polazni cvor, zatim njegove potomke, zatim
njihove potomke i tako dalje sve dok se ne naide na trazeni cvor i sve dok ti potomci postoje. Ukoliko vise nema
potomaka koje treba ispitati, pretraga se vraca unazad do cvora ciji svi potomci nisu ispitani i nastavlja dalje.
U nerekurzivnoj verziji, cvorovi se obicno cuvaju na steku, tj. u LIFO listi. Da ne bi doslo do beskonacne petlje,
potrebno je cuvati informaciju o cvorovima koji su vec poseceni. Ovaj postupak je opisan algoritmom DFS
na slici 3.2 a slika 3.3 ilustruje obilazak jednog grafa primenom algoritma DFS. Prikazani algoritam, ukoliko
pronade ciljni cvor, u tom trenutku na steku sadrzi redom cvorove koji cine trazeni put.

je

1. Inicijalno, stek i skup posecenih cvorova sadrze samo polazni cvor.


2. Izvrsavaj dok stek nije prazan:

an

Uzmi cvor sa vrha steka .

Ako je ciljni cvor, obavesti o uspehu i vrati put konstruisan na osnovu sadrzaja steka .

Ako nema potomaka koji nisu poseceni, izbaci sa steka .

sk
o

iz

U suprotnom, izaberi prvog takvog potomka i dodaj ga na vrh steka i u skup posecenih
cvorova.
3. Obavesti da trazeni put ne postoji.

le

kt

ro
n

Slika 3.2: DFS algoritam pretrage u dubinu.

Slika 3.3: Primer obilaska grafa primenom algoritma DFS (oznake cvorova ukazuju na poredak obilaska cvova)

Primer 3.2. Algoritam DFS se moze upotrebiti za nalazenje izlaza iz lavritina (pri cemu algoritam vraca ceo
put od ulaza do izlaza). U slucaju savrsenog lavirinta, graf koji se pretrazuje je stablo. Pracenje hodnika lavirinta
drzeci se leve strane predstavlja upravo pretragu u dubinu.

Primer 3.3. Ukoliko se, posavsi od Zagreba trazi put do Bukuresta primenom algoritma DFS i ukoliko se

prilikom izbora sledeceg grada prednost daje juznijem, bio bi pronaden put Zagreb-Sarajevo-Podgorica-SkopljeSofija-Bukurest. Ovaj put je po duzini vrlo los izbor, sto je i bilo ocekivano posto algoritam ne uzima u obzir
duzine puteva izmedu gradova. Kako se moze naci najkraci put, bice prikazano kasnije.

21

3. Neinformisana pretraga
Budimpesta

Zagreb

1
Beograd

Podgorica

3
4
Skoplje

Sofija

(2
01
6)

Sarajevo

Bukurest
6

Slika 3.4: Trazenje puta od Zagreba do Bukuresta primenom algoritma DFS

je

an

0L0Z0Z0Z
Z0Z0Z0Z0
6
0Z0ZQZ0Z
5
Z0L0Z0Z0
4
0Z0Z0Z0Z
3
Z0ZQZ0Z0
2
0Z0Z0Z0Z
1
L0Z0Z0Z0
8
7

sk
o

0ZQZ0Z0Z
7
Z0Z0ZQZ0
6
0Z0L0Z0Z
5
ZQZ0Z0Z0
4
0Z0Z0Z0L
3
Z0Z0L0Z0
2
0Z0Z0ZQZ
1
L0Z0Z0Z0
8

iz

0Z0Z0Z0Z
7
Z0Z0Z0Z0
6
0Z0Z0Z0Z
5
Z0Z0Z0Z0
4
0Z0L0Z0Z
3
Z0Z0Z0Z0
2
0Z0Z0Z0Z
1
Z0Z0Z0Z0
8

ro
n

Slika 3.5: Problem osam dama: kretanje dame u sahu (levo), jedno resenje problema (sredina), situacija kada
je u pretrazi nuzno vratiti se na prethodni izbor (desno)

le

kt

Bektreking (eng. backtracking) je modifikovana varijanta pretrage u dubinu. Modifikacija se sastoji u tome
da se bektrekingom ne mora obici ceo graf, vec se napredovanje u dubinu prekida i ranije ako se ustanovi da
se ciljni cvor ne nalazi medu potomcima tekuceg cvora i tada nastupa vracanje na prethodni cvor. Prirodan
primer za bektreking je resavanje problema osam dama.

Primer 3.4. Problem osam dama formulisan je 1848. godine i od tada je bio predmet mnogih matematickih
i informatickih istrazivanja. Problem ima jednostavnu formulaciju: rasporediti osam dama na sahovskoj tabli
tako da se nikoje dve dame ne napadaju. Skup polja koja jedna dama napada definisan je u skladu sa opstim
pravilima saha i ilustrovan je na slici 3.5 (levo). Jedno moguce resenje ovog problema prikazano je na slici 3.5
(sredina). Problem dama je uopstenje problema na dama koje treba rasporediti na tabli dimenzija
tako da se nikoje dve ne napadaju.
U svakom resenju, ocigledno, u jednoj koloni ne mogu biti dve dame, pa se problem moze preformulisati na
sledeci nacin: na tabli rasporediti dama tako da u svakoj koloni bude po jedna i da se nikoje dve ne
napadaju.
Pored problema lavirinta, problem dama predstavlja jedan od tipicnih problema koji se resavaju primenom

bektrekinga. Cvorovi
grafa koji se u ovom slucaju pretrazuju su razliciti rasporedi 0 do 8 dama. Postoji grana od
jednog rasporeda ka drugom ukoliko se drugi moze dobiti od prvog dodavanjem jedne dame na slobodno polje na
tabli. Primetimo da je neki raspored moguce dobiti razlicitim redosledima dodavanja dama, polazeci od prazne
table, ali se dodavanjem dama ne moze dobiti tabla sa manjim brojem dama. Dakle, radi se o usmerenom
aciklicnom grafu. Polazno stanje je prazna tabla, a ciljno stanje je bilo koje stanje koje zadovoljava uslove
problema (za osam dama postoji 92 resenja).
Opisani graf sadrzi i rasporede u kojima se vise od dve dame napadaju. Svaki put od prazne table do ovakvog
rasporeda mora sadrzati raspored sa tacno dve dame koje se napadaju. Kako se duz puteva kroz graf dame samo

3.1. Obilazak grafa u dubinu i sirinu

22

0Z0Z
3
Z0Z0
2
0Z0Z
1
L0Z0

0Z0Z
Z0Z0
2
QZ0Z
1
Z0Z0

0Z0Z
3
ZQZ0
2
0Z0Z
1
L0Z0
b

0Z0Z
3
ZQZ0
2
0Z0Z
1
L0Z0
b

0L0Z
3
Z0Z0
2
0Z0Z
1
L0Z0

0L0Z
3
Z0Z0
2
0ZQZ
1
L0Z0
4

0L0Z
Z0Z0
2
QZ0Z
1
Z0Z0

0L0Z
3
Z0Z0
2
0Z0Z
1
L0Z0
4

iz

sk
o

an

0L0Z
3
Z0Z0
2
0ZQZ
1
L0Z0

(2
01
6)

je

...

0L0Z
Z0Z0
2
QZ0Z
1
Z0L0
4
3

0L0Z
Z0ZQ
2
QZ0Z
1
Z0L0
4
3

le

kt

ro
n

Slika 3.6: Prikaz dela procesa resavanja problema cetiri dame primenom bektrekinga. Oznaka X oznacava
polja na kojima je pokusano postavljanje dame, ali je ustanovljeno da se u tom slucaju napada sa nekom od
vec postavljenih dama. Eksplicitno su prikazani samo rasporedi u kojima se postavljene dame medusobno ne
napadaju.

dodaju, postupak pretrage se ne isplati nastavljati nakon sto se naide na takav raspored. Na slici 3.5 (desno)
prikazan je jedan raspored koji nema smisla ispitivati dalje. Na slici 3.4, prikazan je niz rasporeda u redosledu
koji odgovara bektrekingu za problem cetiri dame (posto je za problem osam dama prostor pretrage preveliki za
ilustraciju).

Na prethodnom primeru se mogu uociti neke tipicne osobine bektrekinga. Bektreking se zasniva na prosirivanju
tekuceg parcijalnog resenja. Polazno parcijalno resenje je prazno resenje. U prethodnom primeru, to je prazna
sahovska tabla, a u slucaju lavirinta, to je ulaz. Prosirivanje parcijalnog resenja se u slucaju problema dama vrsi
dodavanjem dame na tablu, a u slucaju lavirinta prelaskom na sledeci cvor lavirinta. Prosirivanje parcijalnog
resenja u nekim slucajevima nije isplativo ili nije moguce i tada se pretraga vraca unazad, odakle dolazi i ime
tehnike. U problemu dama, nije isplativo nastaviti pretragu ukoliko je dostignut raspored u kojem se dve dame
napadaju, a u slucaju lavirinta nije moguce nastaviti pretragu kada se dode do cvora lavirinta nije povezan ni
sa jednim drugim cvorom lavirinta (sem sa onim iz kojeg se doslo). Prilikom izbora naredne grane u pretrazi,
prati se neki poredak izbora. U slucaju lavirinta, to moze biti sledeci hodnik nadesno u odnosu na poslednji
poseceni cvor lavirinta, a u slucaju problema dama, sledece prazno polje u skladu sa nekom numeracijom polja.

23

3. Neinformisana pretraga

3.1.2

Pretraga u sirinu

Pretraga u sirinu razmatra cvorove koji su susedni tekucem cvoru, a kasnije razmatra, redom, sve njihove
potomke. U traganju za cvorom koji zadovoljava neki uslov, bice pronaden onaj na najmanjem rastojanju (pri

cemu se pod rastojanjem misli na broj grana) od polaznog cvora. Cvorovi


koji se razmatraju obicno se cuvaju u
redu, tj. u FIFO listi. I u ovom pristupu, da ne bi doslo do beskonacne petlje, potrebno je cuvati informaciju o
cvorovima koji su vec poseceni. Ovaj postupak je opisan algoritmom BFS na slici 3.7. U prikazanom algoritmu,
informacija o posecenim cvorovima se ne cuva eksplicitno, vec kroz informaciju o cvoru prethodniku. Slika 3.8
ilustruje obilazak grafa primenom algoritma BFS.
Algoritam: BFS (pretraga u sirinu)
Ulaz: Graf , polazni cvor i ciljni cvor
Izlaz: Najkraci put od polaznog do ciljnog cvora u grafu (ako postoji takav put)

(2
01
6)

1. Red inicijalno sadrzi samo polazni cvor.


2. Izvrsavaj dok red nije prazan:
Uzmi cvor sa pocetka reda i obrisi ga iz reda.

Ako je ciljni cvor, obavesti o uspehu i vrati put od polaznog do ciljnog cvora (iduci unazad od
ciljnog cvora).

je

Za svaki od potomaka cvora za koji nije definisan roditelj, zapamti kao roditelja i dodaj ga
na kraj reda .

an

3. Obavesti da trazeni put ne postoji.

sk
o

iz

Slika 3.7: BFS algoritam pretrage u sirinu.

ro
n

le

kt

Slika 3.8: Primer obilaska grafa primenom algoritma BFS (oznake cvorova ukazuju na poredak obilaska cvova)

Primer 3.5. U slucaju pronalazenja puta od Zagreba do Bukuresta, bice pronaden put Zagreb-Beograd-Bukurest
(slika 3.9). Na pocetku, tekuci grad je Zagreb. Iz Zagreba, pronalaze se Sarajevo, Beograd i Budimpesta. Oni
cine novi red i za njih se pamti da je prethodni grad Zagreb, koji se uklanja iz reda. Iz Sarajeva se pronalazi
put do Podgorice koja se dodaje na kraj reda , a Sarajevo se iz njega uklanja. Iz Beograda se pronalazi put do
Skoplja i Bukuresta, koji se dodaju na kraj reda , a Beograd se iz njega uklanja. Iz Budimpeste se ne pronalazi
put ni do jednog grada koji vec nije obraden. Budimpesta se uklanja iz reda. Iz Podgorice se ne pronalazi put ni
do jednog grada koji vec nije obraden. Podgorica se uklanja iz reda. Iz Skoplja se pronalazi put do Sofije koja
se dodaje na kraj reda , a Skoplje se iz njega uklanja. Kada Bukurest postane grad koji se analizira, konstatuje
se da je to ciljni grad, konstruise se put i algoritam se zaustavlja.
DFS pretraga je pogodnija od BFS pretrage za usmeravanje koje bira cvorove koji vise obecavaju. Vremenska
slozenost oba algoritma je proporcionalna zbiru cvorova i grana grafa koji se pretrazuje ((| | + ||)), a
prostorna je proporcionalna broju cvorova ((| |)).

3.2. Dejkstrin algoritam

24
4 Budimpesta

Zagreb

1
3 Beograd

Sarajevo

Bukurest
8

2
7

Podgorica 5

Sofija

(2
01
6)

6
Skoplje

Slika 3.9: Trazenje puta od Zagreba do Bukuresta primenom algoritma BFS

3.2

Dejkstrin algoritam

le

kt

ro
n

sk
o

iz

an

je

Dejkstrin algoritam (razvio ga je holandski informaticar Edzger Dejkstra 1959. godine) je algoritam za pretragu grafa koji nalazi najkrace puteve u grafu sa nenegativnim cenama koje su pridruzene granama. Algoritam
se moze koristiti za odredivanje najkraceg puta od jednog datog cvora do datog ciljnog cvora, ali i za odredivanje
najkracih puteva od svih cvorova grafa do datog ciljnog cvora.
Ideja Dejkstrinog algoritma moze se ilustrovati na sledeci nacin. Pretpostavimo da je skup cvorova vezan
nitima (i da cenom puta od jednog do drugog cvora smatramo duzinu niti koja ih vezuje). Uzmimo cvor koji je
izabran za polazni i pocnimo da podizemo celu konfiguraciju (tako da nikoje dve niti nisu upletene). Postepeno
se cvorovi, jedan po jedan, odvajaju od tla. Najmanje rastojanje izmedu nekog od tih cvorova i polaznog cvora
je upravo direktno rastojanje izmedu njih. Opsta ideja algoritma je slicna: postoje cvorovi koji su vec podignuti
sa tla i oni koji su jos uvek na tlu. Za one koji su podignuti sa tla vec znamo najkrace puteve od polaznog
cvora. U svakom koraku mozemo jos jedan cvor podici sa tla i izracunati njegovo najmanje rastojanje od
polaznog cvora (razmatrajuci samo one cvorove koji su mu susedni i koji su vec iznad tla). Ukoliko na kraju
ovog postupka na tlu ostanu jos neki cvorovi, to znaci da do njih ne postoji put od polaznog cvora.
Dejkstrin algoritam prikazan je na slici 3.10. U svakoj iteraciji, bira se cvor iz skupa cvorova (to su
cvorovi koji su na tlu) takav da je vrednost tekuceg najmanjeg rastojanja od polaznog cvora do njega najmanje.
Taj cvor se tada brise iz skupa . Ukoliko je to ciljni cvor, onda se konstruise trazeni put od polaznog cvora
(koristeci informaciju o roditeljskim cvorovima). Inace, za svaki cvor iz koji je susedan cvoru proverava se
da li se (preko ) moze popraviti tekuce najmanje rastojanje od polaznog cvora i, ako moze, cvor se postavlja
za roditelja cvora . Invarijanta petlje je da se za cvorove koji nisu u zna najkrace rastojanje od ciljnog
cvora.

Primer 3.6. Sledeca tabela prikazuje efekat primene Dejkstrinog algoritma na graf ilustrovan na slici 3.11: cvor

je polazni, a cvor ciljni cvor. Polje tabele za neki cvor prikazuje vrednost najmanjeg nadenog rastojanja od
polaznog do tog cvora.

Primer 3.7. Slika 3.12 i sledeca tabela ilustruje izvrsavanje Dejkstrinog algoritma na problemu nalazenja puta
od Bukuresta do Podgorice (najkraci put je Bukurest-Sofija-Skoplje-Podgorica).

U najjednostavnijoj implementaciji Dejkstrinog algoritma, skup se implementira kao obicna povezana lista
ili niz. Slozenost algoritma sa takvom implementacijom skupa je (| |2 + ||) = (| |2 ), gde je || broj
grana, a | | broj cvorova grafa. Za retke grafove (koji imaju mnogo manje grana od | |2 ), Dejkstrin algoritam
se moze implementirati efikasnije. Na primer, varijanta koja koristi binarni min-hip1 za odredivanje tekuceg
najblizeg cvora ima slozenost ((|| + | |) log | |).

1 Min-hip je specifi
cna stablolika struktura koja zadovoljava hip-svojstvo: ako je potomak cvora , onda je vrednost pridruzena
cvoru manja od vrednosti pridruzene cvoru . U skladu sa tim, najmanji element je uvek koren stabla. Max-hip se definise
analogno.

25

3. Neinformisana pretraga

Algoritam: Dejkstrin algoritam


Ulaz: Graf , polazni cvor i ciljni cvor
Izlaz: Najkraci put od polaznog do ciljnog cvora u grafu (ako postoji takav put)
1. Skup inicijalno sadrzi sve cvorove grafa.
2. Izvrsavaj sve dok je skup neprazan:
Izaberi iz cvor sa najmanjim ustanovljenim rastojanjem od polaznog cvora i obrisi ga iz .
Ako je ciljni cvor, konstruisi put od polaznog do ciljnog cvora (iduci unazad od ciljnog cvora) i
obavesti o uspehu.
Za svaki cvor iz koji je direktno dostupan iz , proveri da li je ustanovljeno rastojanje od
polaznog cvora do vece od rastojanja od polaznog cvora do preko cvora i ako jeste, promeniti
informaciju o roditelju cvora na cvor i upamtiti novo rastojanje.

(2
01
6)

3. Obavesti da trazeni put ne postoji ( je prazan skup i uspeh nije prijavljen).


Slika 3.10: Dejkstrin algoritam.

6
4

korak
1
2
3
4
5
6

an

iz

3
3
3
3
3

je

2
2
2
2
2

6
6
6
5
5

4
3
3
3
3

8
7
6

cvor

sk
o

Slika 3.11: Primer primene Dejkstrinog algoritma

ro
n

5 Budimpesta

340

kt

Zagreb

380

390

3 Beograd

le

400

Beograd

590
590
590
590
590
590

590

Bukurest
1

290

Sarajevo

450

360

430

230

Podgorica

korak
1
2
3
4
5
6
6

840

Sofija

360
360
360
360
360
360

Budimpesta

840
840
840
840
840
840

2
350

240

4
Skoplje

Skoplje

600
600
600
600
600

Sofija

Podgorica

1040
950
950
950

Sarajevo

880
880
880
880

Zagreb

980
980
980
980

cvor
Bukurest
Sofija
Beograd
Skoplje
Budimpesta
Sarajevo
Podgorica

Slika 3.12: Trazenje puta od Bukuresta do Podgorice primenom Dejkstrinog algoritma

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

Glava 4

(2
01
6)

Informisana pretraga

Pohlepna pretraga

iz

4.1

an

je

Informisana (ili heuristicka) pretraga koristi ne samo informaciju o mogucim akcijama (koracima) u svakom
stanju, vec i dodatno znanje o konkretnom problemu koje moze da usmerava pretragu ka stanjima koja vise
obecavaju, za koje postoji nekakvo ocekivanje da brze vode ciljnom stanju, tj. resenju problema. Ta informacija
moze biti nekakva ocena, mera kvaliteta stanja, a moze da bude zasnovana i na informacijama vezanim za
pocetno ili ciljno stanje. Ta mera kvaliteta cesto nije egzaktna, nego predstavlja nekakvu procenu, heuristicku
meru.1
U nastavku cemo funkciju koja ocenjuje kvalitet stanja zvati funkcija evaluacije i oznacavati sa , pa ce
() oznacavati ocenu stanja . Vec je receno da probleme pretrage mozemo reprezentovati grafovima, pa cemo
cesto umesto stanja i ocena stanja govoriti i cvor i ocena cvora.2 Smatracemo i da su cene akcija (ili cene
grana grafa) nenegativne.

ro
n

Algoritam: Pohlepna pretraga

sk
o

Pohlepnim algoritmom naziva se algoritam koji bira lokalno optimalne akcije, tj. tezi neposrednom povecanju
vrednosti neke ciljne funkcije. Ovakav algoritam ne procenjuje dugorocni kvalitet izabranih akcija, tj. koliko
one doprinose ostvarenju konacnog cilja, vec bira akciju koja se na osnovu znanja dostupnog u trentuku izbora
procenjuje kao najbolja medu raspolozivim akcijama.

kt

Ulaz: Graf , polazni cvor i ciljni cvor


Izlaz: niz koraka od polaznog do ciljnog cvora ili neuspeh (neuspeh ili beskonacna petlja su moguci i ako postoji
put izmedu ova dva cvora)

le

1. Inicijalno, tekuci cvor je ciljni cvor.

2. Izvrsavaj beskonacno sledece korake:


Ako je ciljni cvor, izvesti o uspehu i vrati resenje konstruisi put od polaznog do ciljnog cvora.
Ako nema direktno dostupnih cvorova iz tekuceg cvora, izvesti o neuspehu.
Od cvorova koji su direktno dostupni iz tekuceg cvora kao novi tekuci cvor izaberi cvor koji ima
najbolju ocenu ().
Slika 4.1: Algoritam pohlepne pretrage.

1 Re
c heuristika potice od grcke reci heurisko koja znaci traziti ili otkrivati. Srodna grcka rec heureka ili eureka znaci
nasao sam ili otkrio sam i obicno se vezuje za Arhimeda i njegov uzvik kada je dosao do jednog znamenitog otkrica. Aristotel
je koristio termin heuristika za otkrivanje novog znanja (ili demonstriranje postojeceg) kroz komunikaciju i interakciju izmedu
izlagaca i slusalaca. Perl (1984) pod heuristikama smatra kriterijume, metode ili principe za izbor izmedu nekoliko mogucih akcija
onu koja najvise obecava za postizanje nekog cilja.
2 Prilikom re
savanja problema pretragom, generise se (obicno samo implicitno) stablo pretrage u kojem stanja kroz koja se
prolazi cine cvorove. Posto kroz jedno isto stanje moze da se prode vise puta tokom pretrage, cvor stabla nosi vise informacija od
stanja te generalno ipak treba razlikovati ova dva pojma.

27

4.1. Pohlepna pretraga

28

Primer 4.1. U primeru pronalazenja najkracih puteva izmedu gradova (primer 2.2), ako je u svakom gradu
moguce videti tablu sa tacnim rastojanjima do susednih gradova, pohlepni informisani algoritam bi kao funkciju
evaluacije () mogao da koristi zbir tacnog rastojanja od tekuceg cvora do cvora (tj. da uvek za sledeci
grad bira najblizi grad). Ukoliko su poznata vazdusna rastojanja izmedu gradova na osnovu mape, pohlepni
informisani algoritam bi kao funkciju evaluacije () mogao da koristi vazdusno rastojanje od do ciljnog
grada (tj. da uvek za sledeci grad bita onaj koji je najblizi ciljnom vazdusnim putem).
Budimpesta

Zagreb
400
290

380
320
390
370

840
640

410

Sarajevo

230
170

640
290
190
450
280

Podgorica

Beograd

350
190

590
450
360
300

430
320

Skoplje

Bukurest

(2
01
6)

340
300

240
170

Sofija

an

je

Slika 4.2: Trazenje puta od Podgorice do Budimpeste primenom pohlepnog algoritma

le

kt

ro
n

sk
o

iz

Ako je u svakom gradu moguce i videti tablu sa tacnim rastojanjima do susednih gradova i poznata su
vazdusna rastojanja izmedu gradova, pohlepni informisani algoritam bi kao funkciju evaluacije () mogao da
koristi zbir tacnog rastojanja od tekuceg cvora do cvora i vazdusnog rastojanja od do ciljnog grada. Dakle,
tada se, u svakom koraku, kao sledeci grad, kao grad koji najvise obecava, bira grad za koji je zbir tacnog
rastojanja od tekuceg grada do i vazdusnog rastojanja od do ciljnog grada najmanji. Ovaj pristup bice
ilustrovan primerom trazenja puta od Podgorice do Budimpeste. Iz Podgorice su neposredno dostupni Sarajevo,
Beograd i Skoplje, a ocene duzina puteva do cilja preko tih gradova su 640km, 770km i 990km, te se ide u
Sarajevo. Iz Sarajeva su neposredno dostupni Beograd, Zagreb i Podgorica, a ocene duzina puteva preko tih
gradova su 700km, 610km i 790km, te se ide u Beograd. Iz Beograda su neposredno dostupni Budimpesta,
Bukurest, Skoplje, Podgorica, Sarajevo i Zagreb, a ocene duzina puteva preko tih gradova su 380km, 1230km,
1070km, 1010km, 700km i 690km, te se ide u Budimpestu. Pronadeni put je, dakle, Podgorica-Sarajevo-BeogradBudimpesta i njegova stvarna duzina je 900km. Medutim, stvarna duzina puta Podgorica-Beograd-Budimpesta
je manja i iznosi 830km, sto znaci da je napravljeni izbor pogresan, tj. nije najbolji moguci. Ovaj ishod ilustruje

opsti problem pohlepne pretrage, a to je da je moguce pronaci resenje koje nije najbolje. Stavi
se, u opstem
slucaju, moguce je ne pronaci resenje i ako ono postoji, a moguce je i ostati u beskonacnoj petlji.

Primer 4.2. U slucaju Lojdove slagalice, kao ocena rastojanja od tekuceg do ciljnog stanja moze se koristiti zbir

Menhetn rastojenja svakog od 15 polja slagalice do njegovog ciljnog mesta. Menhetn rastojanje izmedu dva polja
i definise se kao najmanji broj polja koji je potrebno preci kako bi se doslo od do , krecuci se iskljucivo
horizontalno ili vertikalno3 . U slucaju stanja slagalice u korenu levog stabla na slici 4.3, Menhetn rastojanje
polja 1 do njegovog pravog mesta je 3, zato sto je na tom putu potrebno preci preko dva polja krecuci se navise,
a potom jedno polje krecuci se nalevo. Moguci su i drugi putevi, ali njihova duzina nije manja. Ukupna ocena
rastojanja za to stanje slagalice je 0+0+0+1+1+2+1+0+3+2+2+0+0+2+2=16. Pohlepna pretraga se moze
formulisati tako da se u svakom koraku preduzima potez koji vodi ka najmanjoj oceni rastojanja u odnosu na
tekuce stanje.
U slucaju stanja slagalice u korenu slike 4.3 (levo), pohlepna pretraga ne moze da nastavi posto dato stanje
predstavlja lokalni minimum ocene rastojanja jer se bilo kojim potezom ta ocena uvecava za 1.
S druge strane, ukoliko je polazna konfiguracija 4.3 (desno) ocena rastojanja se smanjuje pomeranjem polja
4 navise a zatim i pomeranjem navise polja 8 i 11. Nakon toga se dolazi do stanja koje je lokalni minimum i
pretraga se zaustavlja.
Navedni primeri pokazuju da predlozenom jednostavnom pohlepnom pretragom nije moguce resiti Lojdovu
slagalicu.
3 Rastojanje se zove Menhetn, jer podse
ca na brojanje gradskih blokova od jednog mesta do drugog, pri cemo nije moguce
prolaziti blokove dijagonalno.

29

4. Informisana pretraga
1 2 3
15 5 10 4
9 12 6 8
13 14 7 11

2 3 4
6 5 10 12
9 1 8 15
13 14 7 11

6 2 3 4
5 10 12
9 1 8 15
13 14 7 11

2
3 4
6 5 10 12
9 1 8 15
13 14 7 11

1 2
3
15 5 10 4
9 12 6 8
13 14 7 11

1 2 3 4
15 5 10
9 12 6 8
13 14 7 11

(2
01
6)

Slika 4.3: Stanje slagalice (levo) u kojem nema poteza koji vodi u stanje sa boljom ocenom rastojanja i stanje
slagalice (desno) iz kojeg postoji niz koraka koji poboljsavaju ocenu rastojanja (pomeranjem praznog polja
nanize), ali se zavrsava u stanju iz kojeg svi potezi pogorsavaju ocenu.

sk
o

iz

an

je

Pohlepni algoritmi se mogu koristiti i za resavanje opstijih problema od pretrage problema matematicke
optimizacije. Ovi problemi pretpostavljaju postojanje funkcije cilja i skupa dopustivih resenja. U zavisnosti od
formulacije problema, potrebno je naci dopustivo resenje sa minimalnom ili maksimalnom vrednoscu funkcije
cilja. Takvo resenje se naziva optimalnim resenjem problema optimizacije. Ovakvi problemi ne moraju pretpostavljati postojanje stanja, akcija i drugih elemenata problema pretrage. U kontekstu matematicke optimizacije,
pohlepni algoritmi se obicno nazivaju algoritmima penjanja uzbrdo posto biraju susedna dopustiva resenja koja
imaju najvise vrednosti funkcije cilja.
Pohlepna pretraga obicno se ponasa dobro u slucaju problema kod kojih kvalitet odluke u nekom stanju
pretrage ne zavisi od buducih odluka ili ako se dati problem moze aproksimirati problemom za koji ovo vazi. Ako
navedeno svojstvo vazi, lokalno optimalna odluka je stvarno optimalna. Navedeno svojstvo se moze i drugacije
formulisati pohlepna pretraga ce se ponasati dobro ukoliko se optimalno resenje problema gradi neposredno
od lokalno optimalnih resenja podproblema.
Algoritmi zasnovani na pohlepnoj pretrazi su obicno znatno jednostavniji od algoritama koji garantuju
optimalnost ili potpunost procesa resavanja. Medutim, iako obicno ne garantuju optimalnost resenja, cesto
daju resenja koja su prakticno prihvatljiva. S druge strane, mane ovog pristupa su sledece:

ro
n

Opasnost od lokalnih maksimuma: Lokalni mksimumi su tacke u prostoru pretrage ciji susedi imaju manju

le

kt

vrednost funkcije cilja od nje, ali je njena vrednost manja od vrednosti globalnog maksimuma. Algoritmi
penjanja uzbrdo nemaju nacina da utvrde da se nalaze u lokalnom maksimumu (slika 4.4)

Slika 4.4: Situacija u kojoj pohlepna pretraga moze da vrati samo lokalni maksimum (levo) i greben (desno)

Neefikasnost u slucaju grebena: Grebeni predstavljaju uske staze koje opadaju ili rastu duz nekog pravca.
U takvim problemima, penjanje uzbrdo ne vodi u pravcu rasta staze, vec je potrebno da napravi mnogo
cik-cak koraka da se uspne uz greben (ili da se spusti niz greben).

Platoi: Platoi predstavljaju oblasti prostora pretrage u kome funkcija cilja ima konstantnu vrednost. Zbog

toga je nemoguce odrediti koji potez je najbolji, a samim tim se moze desiti da pohlepna pretraga ne nade
izlaz sa platoa.

4.1. Pohlepna pretraga

30

Postoje razne varijacije osnovnog penjanja uzbrdo koje pokusavaju da se izbore sa navedenim problemima.
Takvo je na primer stohasticko penjanje uzbrdo koje ne bira uvek susedno stanje koje ima najvecu vrednost, ali
verovatnoca da odredeno stanje bude izabrano je veca sto je veca njegova vrednost. Druga varijacija je penjanje
uzbrdo sa slucajnim restartovanjem kod kojeg se posle pronalazenja lokalnog maksimuma proces pretrage ponovo
pokrece iz slucajno generisanog polaznog stanja. Ovaj metod omogucava pronalazenje globalnog maksimuma
sa verovatnocom koja se priblizava 1 kada se povecava broj pokusaja.

4.1.1

Pohlepna pretraga u slucaju diferencijabilne funkcije cilja

(2
01
6)

Metode pretrage i matematicke optimizacije cesto pokusavaju da iskoriste neku zakonitost u strukturi prostora pretrage, odnosno prostora dopustivih resenja. Tako, metode penjanja uzbrdo, u slucaju diferencijabilne
funkcije cilja, obicno pocivaju na koriscenju koncepta gradijenta. Ukoliko je data diferencijabilna funkcija cilja
: R R, gradijent se definise kao vektor parcijalnih izvoda te funkcije:
)
(


,
,...,
=
1 2

je

Gradijent izracunat u odredenoj tacki R predstavlja vektor u prostoru R u cijem pravcu funkcija
najstrmije raste u okolini tacke . Stoga se kretanjem u ovom pravcu moze doci do lokalnog maksimuma.
Kretanjem u suprotnom pravcu, moze se doci do lokalnog minimuma. U tradiciji matematicke optimizacije,
cesce se koristi formulacija trazenja minimuma, a metoda za trazenje minimuma se moze upotrebiti i za nalazenje
maksimuma ukoliko se primeni na funkciju umesto na funkciju . Princip kretanja u smeru suprotnom od
gradijenta je osnova algoritma najstrmijeg spusta ili gradijentnog spusta. Algoritam najstrmijeg spusta prikazan
je na slici 4.5.

an

Algoritam: Najstrmiji spust

Ulaz: Diferencijabilna funkcija , polazna tacka x0 i preciznost


Izlaz: lokalni minimum (ukoliko postoji)

iz

1. Postaviti na 0.

sk
o

2. Ponavljati

Izracunati gradijent funkcije (xn ).

Izvrsiti kretanje u pravcu suprotnom od gradijenta do sledece tacke xn+1 .

ro
n

Uvecati za 1.

dok vazi | (xn1 ) (xn )| > | (xn1 )|

le

kt

3. Vratiti xn kao resenje.

Slika 4.5: Algoritam najstrmijeg spusta.

U praksi se ne moze ocekivati nalazenje same tacke lokalnog minimuma, s obzirom na to da se ne radi o
diskretnom prostoru, te se opisani postupak prekida kada razlika u vrednosti funkcije u odnost na njenu
prethodnu vrednost postane dovoljno mala.
Da bi se dati algoritam u potpunosti definisao potrebno ga je dodatno precizirati. Poznavanje gradijenta
i kretanje u suprotnom pravcu u praksi ipak ne garantuje nalazenje minimuma, jer je u zavisnosti od duzine
koraka moguce preci preko minimuma, nastaviti dalje i doci i do goreg resenja od tekuceg. Stoga je u svakom
koraku potrebno odrediti konstantu takvu da se za novu tacku uzima vrednost

xn+1 = xn (xn )
Ova konstanta se moze naci Armiho-Goldstajnovom pretragom duz pravca gradijenta koja je formulisana algoritmom 4.6. Poenta Armiho-Goldstajnove pretrage je smanjivanje koraka dok se ne steknu uslovi dovoljni za
konvergenciju.

Primer 4.3. Potrebno je izgraditi lekarsku stanicu koja bi opsluzivala cetiri sportske lokacije. Stanica bi trebalo
da bude relativno blizu svim lokacijama. Jedan povoljan izbor njene lokacije bi bila tacka x takva da je zbir
(x) =

=1

x s() 2

31

4. Informisana pretraga

Algoritam: Armiho-Goldstajnova pretraga


Ulaz: Diferencijabilna funkcija , tacka x
Izlaz: Koeficijent
1. Postaviti na 1.
2. Dok vazi (x (x)) > (x)
Postaviti na

(x)2
2

2.

3. Vratiti kao resenje.


Slika 4.6: Armiho-Goldstajnova pretraga duz pravca gradijenta.

(2
01
6)

35
30
25
20
15

je

10

s1

1
x0

x0

s1

0
5

iz

an

1
2
3

sk
o

s1

s1

Slika 4.7: Ilustracija problema pronalazenja optimalne pozicije za lekarsku stanicu.

ro
n

minimalan, gde vazi x = (1 , 2 ), s(1) = (0, 0), s(2) = (0, 1), s(3) = (2, 0) i s(4) = (3, 3).
Zapisano drugacije, funkcija jednaka je:

kt

(x) = (1 0)2 + (2 0)2 + (1 0)2 + (2 1)2 + (1 2)2 + (2 0)2 + (1 3)2 + (2 3)2


= 421 + 422 101 82 + 23

le

Gradijent funkcije je

(x) = (81 10, 82 8)

Neka je polazna tacka x0 = (1, 1) i = 0.01. Vrednost gradijenta (x0 ) u prvoj iteraciji je (2, 0). Vrednost
parametra 0 odreduje se Armiho-Goldstajnovom pretragom. Za vrednost = 1, evaluira se uslov ((1, 1)
1 (2, 0)) > (1, 1) 2, odnosno 25 > 13 2. Kako je uslov ispunjen, se postavlja na 0.5 i evaluira se
((1, 1) 0.5 (2, 0)) > (1, 1) 1, odnosno 15 > 13 1. Kako je uslov ispunjen, se postavlja na 0.025 i
evaluira se ((1, 1) 0.25 (2, 0)) > (1, 1) 0.5, odnosno 13 > 13 0.5. Kako je uslov ispunjen, se postavlja
na 0.125 i evaluira se ((1, 1) 0.125 (2, 0)) > (1, 1) 0.25, odnosno 12.75 > 13 0.25. Kako uslov nije
ispunjen, petlja se prekida i vraca se vrednost 0.125, sto se uzima za vrednost parametra 0 . Za tacku x1 , uzima
se tacka x0 0 (x0 ), odnosno (1, 1) 0.125 (2, 0), sto je (1.25, 1).
Kako vazi | (x0 ) (x1 )| = |13 12.75| = 0.25 > 0.01 |13|, prelazi se na novu iteraciju. Gradijent je
(1.25, 1) = (0, 0). Za datu tacku Armiho-Goldstajnova pretraga se zaustavlja odmah i vraca = 1. Kako je
gradijent jednak (0, 0), vazi x2 = x1 i algoritam se zaustavlja sa tacnim resenjem (1.25, 1).
U opstem slucaju retko se desava zaustavljanje sa tacnim resenjem.
U ovom slucaju, resenje se moglo naci i analiticki resavanjem jednacina (x) = 0, ali to u opstem
slucaju nije moguce.
Za diferencijabilne funkcije postoje i drugi metodi lokalne optimizacije, medu kojima je algoritam najstrmijeg
spusta najjednostavniji. Problem ovog algoritma je sto je konvergencija cesto spora. Brze alternative su ili

4.2. Pretraga Prvo najbolji

32

komplikovanije ili prave dodatne pretpostavke o svojstvima funkcije (poput konveksnosti) ili zahtevaju dodatne
informacije o ciljnoj funkciji (poput parcijalnih izvoda drugog reda).
Treba imati u vidu da diskutovani algoritam ne garantuje nalazenje globalnog minimuma. U slucaju da
funkcija ima veci broj minimuma, u zavisnosti od izabrane polazne tacke, resenja koja algoritam daje mogu biti
razlicita i pronadeni minimum moze biti samo lokalni.

Pitanja i zadaci
Pitanje 4.1. Kako se naziva algoritam pretrage koji uvek bira lokalno optimalne akcije?
pohlepnom pretraga moze vratiti kao rezultat, umesto globalnog ekstremuma?
Pitanje 4.2. Sta
je plato u problemima pretrage?
Pitanje 4.3. Sta

4.2

Pretraga

(2
01
6)

Pitanje 4.4. Kako se zove oblast prostora pretrage u kojem ciljna funkcija ima konstantnu vrednost?
Prvo najbolji

je

Pristup pretrage prvo najbolji (engl. best-first search) predstavlja osnovu za razlicite algoritme pretrage
grafa. Resenjem se smatra niz cvorova (tj. put) od polaznog do ciljnog cvora u grafu. U toku algoritma, svakom
stanju/cvoru koji se razmatra pridruzuje se informacija o njegovom prethodniku (roditelju) u mogucem resenju,
isto kao u Dejkstrinom algoritmu.
Da bi se izbegle beskonacne petlje (tj. beskonacno obradivanje istog stanja), odrzavaju se dve liste stanja/cvorova:

an

zatvorena lista (ili lista zatvorenih stanja) lista stanja za koje su vec ispitani svi susedi (tj. sva neposredno
dostupna stanja);

iz

otvorena lista (ili lista otvorenih stanja) lista stanja koja su vec posecena, ali nisu obradeni svi njihovi
susedi.

Algoritam: Prvo najbolji

ro
n

sk
o

Implementacija otvorene liste treba da omogucava efikasan pristup elementu sa najboljom ocenom ().
Na pocetku je u otvorenoj listi samo pocetno stanje, a zatvorena lista je prazna. Sustinska ideja je da se u
svakoj iteraciji, analizira element otvorene liste sa najboljom ocenom i obraduju se iz njega neposredno dostupna
stanja. Ukoliko se naide na ciljni cvor zadatak je resen i algoritam zavrsava rad. Precizniji opis algoritma dat
je na slici 4.8.

kt

Ulaz: Graf , polazni cvor i ciljni cvor


Izlaz: niz koraka od polaznog do ciljnog cvora (ako postoji put izmedu ova dva cvora)

le

1. Zatvorena lista je inicijalno prazna, a otvorena lista sadrzi samo polazni cvor.

2. Izvrsavaj sve dok ima elemenata u otvorenoj listi:


Izaberi cvor (tekuci cvor) iz otvorene liste koji ima najbolju ocenu ().
Ako je ciljni cvor, izvesti o uspehu i vrati resenje konstruisuci put od polaznog do ciljnog cvora
(iduci unazad od ciljnog cvora).
Za svaki cvor koji je direktno dostupan iz uradi sledece:

Ako nije ni u otvorenoj ni u zatvorenoj listi, dodaj ga u otvorenu listu i oznaci kao njegovog
roditelja.

Izbaci iz otvorene liste i dodaj ga u zatvorenu listu.


3. Izvesti da trazeni put ne postoji (otvorena lista je prazna i uspen nije prijavljen).
Slika 4.8: Algoritam Prvo najbolji.
Algoritam Prvo najbolji ne pretenduje da daje optmilano resenje (tj. da otkrije najbolji put do ciljnog
cvora) niti pruza ikakve garnacije u tom smislu. Ipak, da bi se uvecale sanse da se pronade sto kraci put izmedu

33

4. Informisana pretraga

dva cvora, u slucaju da je cvor vec u otvorenoj ili zatvorenoj listi, moze se proveriti da li je put od polaznog
cvora do cvora preko cvora bolji od postojeceg puta do ; ako jeste, treba promeniti informaciju o roditelju
cvora na cvor a ako je bio u zatvorenoj listi, prebaciti ga u otvorenu.
Ako je broj stanja i akcija konacan, algoritam se ocigledno zaustavlja i ima svojstvo potpunosti, o cemu
govori naredna teorema.

Teorema 4.1. Ako je broj stanja i akcija konacan, algoritam Prvo najbolji se zaustavlja i nalazi trazeni put
uvek kada on postoji.

(2
01
6)

Ako funkcija () vraca dubinu cvora (u DFS obilasku grafa pocev od polaznog cvora), onda se navedeni
algoritam ponasa kao algoritam obilaska u sirinu. Ako funkcija () vraca zbir cena od polaznog cvora do cvora
, onda se navedeni algoritam ponasa kao Dejkstrin algoritam.
Opsti algoritam Prvo najbolji predstavlja bitnu modifikaciju algoritma jednostavnog pohlepnog pristupa.
Iako oba u jednom cvoru biraju (najpre) najbolji susedni cvor (tj. cvor sa najboljom vrednoscu ()) algoritam
Prvo najbolji, za razliku od jednostavnog pohlepnog pristupa omogucava vracanje na cvorove koji nisu ispitani
jer je neka od alternativa obecavala vise. Takode, ovim pristupom se omogucava nastavak pretrage i u slucaju
kada pohlepna pretraga naide na plato ili lokalni optimum (zahvaljujuci alternativama u otvorenoj listi) i
eliminise se mogucnost beskonacnih petlji (zahvaljujuci pamcenju obradenih cvorova u zatvorenoj listi).

Primer 4.4. U slucaju prethodno diskutovanog primera slagalice, ponovljenog na slici 4.9, situacija prikazana
levo predstavlja lokalni minimum, zbog cega se pohlepna pretraga zaustavlja. Algoritam prvo najbolji ce

an

je

odabrati jedan od mogucih poteza, ali ce alternativno stanje cuvati u otvorenoj listi i mozda ga obraditi kasnije.
U situaciji prikazanoj desno, pohlepnom pretragom se prazno polje spusta do donjeg desnog ugla, cime se dolazi
do lokalnog optimuma i pohlepna pretraga ne moze da nastavi. Medutim, u slucaju algoritma Prvo najbolji,
stanja koja su bila alternative ispitanim stanjima su i dalje u otvorenoj listi i ispituju se dalje. Stoga je algoritam
Prvo najbolji u stanju da resi slagalicu, ali ne garantuje nalazenje resenja koje se sastoji od najmanjeg broja
poteza.
1 2 3
15 5 10 4
9 12 6 8
13 14 7 11

ro
n

sk
o

iz

2 3 4
6 5 10 12
9 1 8 15
13 14 7 11

kt

6 2 3 4
5 10 12
9 1 8 15
13 14 7 11

2
3 4
6 5 10 12
9 1 8 15
13 14 7 11

1 2
3
15 5 10 4
9 12 6 8
13 14 7 11

1 2 3 4
15 5 10
9 12 6 8
13 14 7 11

le

Slika 4.9: Stanje slagalice (levo) u kojem svi pozezi pogorsavaju ocenu rastojanja i stanje slagalice (desno) iz
kojeg postoji niz koraka koji poboljsavaju ocenu rastojanja (pomeranjem praznog polja nanize), ali se zavrsava
u stanju iz kojeg svi potezi pogorsavaju ocenu.

4.3

Algoritam A*

Algoritam A* pretraga ili, krace, algoritam A* (cita se a zvezda, engl. a star) za odredivanje najkraceg
puta izmedu dva cvora grafa, jedan je od fundamentalnih i najpopularnijih algoritama vestacke inteligencije.
Zasnovan je na koriscenju heuristika, ali ipak ima svojstva kao sto su potpunost i optimalnost. Prvu verziju
algoritma A* su razvili Hart, Nilsson i Raphael 1968. godine [?], a u narednim godinama uvedeno je nekoliko
unapredenja [?, ?, ?].
Algoritam A* je varijanta algoritma Prvo najbolji u kojoj se koristi funkciju evaluacije definisana na
sledeci nacin:
() = () + (),
gde je () cena puta od polaznog cvora do cvora , a () je procenjena (heuristicka) cena najjeftinijeg puta
od cvora do ciljnog cvora. Dok se traga za najkracim putem, uvek se zna tekuca minimalna cena (a moze
se menjati tokom primene algoritma) od polaznog cvora do cvora (tj. tekuca vrednost ()), ali se vrednost

4.3. Algoritam A*

34

(2
01
6)

() moze samo procenjivati. Od kvaliteta heuristike zavisi ponasanje i efikasnost algoritma. Izbor kvalitetne
heuristike jedan je od najvaznijih i najtezih izazova u dizajniranju konkretnih implementacija algoritma A*.
Algoritam A* trazi optimalno resenje (tj. otkriva najbolji put do ciljnog cvora) i zato za svaki cvor na koji
naide proverava da li je do njega ranije vec bio pronaden neki losiji put i, ako jeste, zamenjuje ga novim, boljim
putem. Takva provera je u algoritmu Prvo najbolji bila opciona, a u algoritmu A* je obavezna.
Pored toga sto je specijalan slucaj metoda Prvo najbolji, algoritam A* je uopstenje Dejkstrinog algoritma.
Kao i u Dejkstrinom algoritmu, cvorovi koje tek treba obraditi cuvaju se u listi, sortiranoj prema nekom
kriterijumu. Algoritam A* cesto ispituje manje cvorova nego Dejkstrin algoritam. To smanjenje proistice
iz koriscenja heuristike koja procenjuje donju granicu daljine do ciljnog cvora. Kljucna razlika izmedu dva
algoritma je u tome sto Dejkstrin algoritam (kao algoritam neinformisane pretrage) uzima u obzir samo cenu
od polaznog do tekuceg cvora vrednost (), a A* (kao algoritam informisane pretrage) koristi vrednost
funkcije evaluacije () = () + ().
Opis algoritma A* dat je na slici 4.10. Prilikom dodavanja cvora u otvorenu listu vrednost () moze se
izracunati na inkrementalan i efikasan nacin: vrednost () jednaka je zbiru vrednosti funkcije za roditelja
cvora i ceni puta od roditelja do .
Algoritam: Algoritam A*

Ulaz: Graf , polazni cvor i ciljni cvor


Izlaz: najkraci put od polaznog do ciljnog cvora (ako postoji put izmedu ova dva cvora)
1. Zatvorena lista je inicijalno prazna, a otvorena lista sadrzi samo polazni cvor.

je

2. Izvrsavaj dok god ima elemenata u otvorenoj listi:

an

Izaberi cvor (tekuci cvor) iz otvorene liste koji ima najbolju ocenu ().
Ako je ciljni cvor, izvesti o uspehu i vrati resenje konstruisi put od polaznog do ciljnog cvora (iduci
unazad od ciljnog cvora).

Za svaki cvor koji je direktno dostupan iz uradi sledece:

iz

Ako nije ni u otvorenoj ni u zatvorenoj listi, dodaj ga u otvorenu listu i oznaci kao njegovog
roditelja. Izracunaj i pridruzi vrednost () cvoru .

sk
o

Inace, proveri da li je put od polaznog cvora do cvora preko cvora bolji (kraci ili jeftiniji)

ro
n

od postojeceg puta do (trenutna vrednost ()). Ako jeste, promeni informaciju o roditelju
cvora na cvor i azuriraj vrednosti () a ako je bio u zatvorenoj listi, prebaci ga u
otvorenu.

Izbaci iz otvorene liste i dodaj ga u zatvorenu listu.

le

kt

3. Izvesti da trazeni put ne postoji (otvorena lista je prazna i uspeh nije prijavljen).
Slika 4.10: Algoritam A*

Ako algoritam naide na cvor koji je vec u otvorenoj ili zatvorenoj listi, to znaci da je pronaden novi
put do cvora . Tada se proverava da li je put od polaznog cvora do vec posecenog cvora preko cvora
bolji od postojeceg puta i ako je on bolji, potrebno je azurirati vrednost (). To moze da se desi i za cvor
koji pripada zatvorenoj listi i ako je on bolji, potrebno je cvor ponovo ispitati kao otvoreni cvor. Ovo je
neophodno kako bi se obezbedilo pronalazenje najboljeg puta od polaznog do ciljnog cvora.

4.3.1

Svojstva algoritma A*

Moze se dokazati da je algoritam A* potpun i da je pod odredenim uslovima optimalan [?]:

Potpunost: Ako postoji put izmedu dva cvora, algoritam A* ce, kao i svaki Prvo najbolji algoritam, naci

i ako je heuristicka funkcija


jedan takav (ukoliko je raspolozivo dovoljno vreme i memorijski prostor). Cak
veoma losa, ciljni cvor ce biti dostignut u konacnom broju koraka.

Optimalnost: Od svih puteva izmedu dva data cvora, algoritam A* vratice najkraci (tj. vratice optimalno
resenje) ako je funkcija dopustiva (eng. admissible). Funkcija je dopustiva ako nikada ne precenjuje
stvarno rastojanje izmedu tekuceg cvora i ciljnog cvora, tj. ako za svaki cvor vazi:

0 () * (),

35

4. Informisana pretraga
gde je * () cena optimalnog puta od cvora do ciljnog cvora.
Ukoliko funkcija nije dopustiva, ali ne precenjuje stvarnu cenu za vise od , onda je cena puta koji ce
pronaci algoritam A* visa od cene najkraceg za ne vise od .
Funkcija je konzistentna (eng. consistent) ako ima vrednost 0 za ciljni cvor i za bilo koja dva susedna
cvora i vazi:
(, ) + () ()
gde je (, ) cena pridruzena grani (, ). Svaka konzistentna funkcija je dopustiva, ali obratno ne vazi.
Ako je funkcija konzistentna, nije potrebno proveravati da li je put preko tekuceg cvora do jednom
zatvorenog cvora bolji od postojeceg (jer sigurno nije). Dakle, ako je funkcija konzistentna, algoritam
A* je optimalan i jos jednostavniji nego u opstem slucaju. Dokaz optimalnosti dat je nastavku i zasniva
se na nekoliko pomocnih tvrdenja.

Lema 4.1. Ako je konzistentna heuristika, onda u svakom trenutku primene algoritma, duz svakog puta

(2
01
6)

kroz graf pretrage, vrednosti () nisu opadajuce.

Dokaz: Ako je u nekom trenutku primene algoritma cvor tekuci i ako je njegov (trenutni) roditelj cvor

, onda vazi:

() = () + () = () + (, ) + () () + () = ()

an

je

Tvrdenje leme onda sledi na osnovu jednostavnog induktivnog argumenta. (U tvrdenju se naglasava
da vazi u svakom trenutku jer se vrednosti (), pa onda i () za neki cvor mogu da menjaju
tokom primene algoritma.)


iz

Lema 4.2. Ako je konzistentna heuristika, za niz cvorova redom proglasenih za tekuce, niz (u tim
trenucima vazecih) vrednosti () cini neopadajuci niz.
Dokaz: U svakoj iteraciji, algoritam bira za tekuci cvor cvor sa najmanjom vrednoscu () (te svi pre-

ro
n

sk
o

ostali cvorovi u skupu otvorenih cvorova imaju vece ili jednake vrednosti ). Svi buduci tekuci
cvorovi su preostali cvori iz otvorene liste, potomci tih cvorova ili potomci njihovih potomaka. Na
osnovu prethodne leme onda sledi da svi buduci cvorovi imaju vrednosti vece ili jednake ().
Kako ovo vazi za svaki tekuci cvor , sledi tvrdenje leme, tj. algoritam proglasava cvorove tekucim u
neopadajucem poretku po ().


le

kt

Lema 4.3. Ako je konzistentna heuristika, kad neki cvor postane tekuci, do njega je vec pronaden
optimalan put.
Dokaz: Kada algoritam proglasi neki cvor tekucim po prvi put, on ima neke vrednosti () = 0 i

() = 0 . Pretpostavimo da () nije optimalan put i pretpostavimo da je moguce optimalan put


dostignuti u nekoj kasnijoj iteraciji i da bi tada vazilo () = 1 i () = 1 . Kako je 1 cena
optimalnog puta do , vazi 0 > 1 , pa i 0 + () > 1 + (), tj. 0 > 1 . S druge strane, na osnovu
prethodne, leme vazi 0 1 , sto je kontradikcija.


Teorema 4.2. Ako je konzistentna heuristika, ako je pronaden put do ciljnog cvora, on je sigurno

optimalan.

Dokaz: Algoritam vraca nadeni put cim ciljni cvor po prvi put postane tekuci. Na osnovu prethotne leme,

ako je konzistentna heuristika, kad ciljni cvor postane tekuci, do njega je vec pronaden optimalan
put, sto daje tvrdenje teoreme.


Upravo lema 4.3 govori da za cvorove dosupne iz tekuceg cvora koji su vec zatvoreni, ne mora da se
proverava da li njihova vrednost treba da bude azurirana. Ovo tvrdenje u slucaju konzistentne heuristike
obezbeduje jednostavniju i efikasniju implementaciju algoritma A*.
Ako je funkcija konzistentna, onda je ona i dopustiva, a obratno ne vazi.

4.3. Algoritam A*

36

Slozenost: Vremenska slozenost algoritma A* zavisi od heuristike. U najgorem slucaju, broj obradenih
cvorova je eksponencijalan u odnosu na duzinu najkraceg puta. U tom slucaju, i prostorna i vremenska slozenost algoritma A* jednake su kao za BFS algoritam.

Broj obradenih cvorova je polinomijalan ako je heuristika kvalitetna, tj. ako funkcija zadovoljava sledeci
uslov:
|() * ()| (log * ())
gde je * optimalna heuristika, tj. funkcija koja vraca tacnu cenu puta od cvora do ciljnog cvora.
Ukoliko funkcija * odgovara optimalnom putu, onda algoritam A* obraduje sve cvorove za koje vazi
() < * (), kao i neke cvorove za koje vazi () = * ().

(2
01
6)

Prethodna tvrdenja sugerisu da algoritam A* najbolje performanse (najmanji broj obradenih cvorova) daje
kada je funkcija heuristike bliska idealnoj funkciji heuristike. S druge strane, optimalnost je garantovana samo
ako funkcija heuristike nikada ne precenjuje stvarnu cenu puta. Zajedno, to govori da dobra funkcija heuristke
mora da bude veoma pazljivo konstruisana, tako da bude sto bliza idealnoj funkciji, ali da je nikada ne premasuje.

Primer 4.5. U sledecem grafu zadatak je naci najkraci put od do . Pored cvorova grafa zapisane su
procenjene duzine puta do cvora , tj. vrednosti funkcije . Sledeca tabela ilustruje primenu algoritma A*.

5
4

A
D
G
F
B
H
E

je

u zatvorenu listu
se dodaje
A(-)
D(A)
G(A)
F(D)
B(F)
H(D)

sk
o

stanje otvorene lista


[cvor(roditelj,g+h)]
A(-, 0+6)
D(A,6+5), G(A,5+6)
G(A,5+6), F(D,9+3), H(D,9+4), C(D,10+6)
F(D,9+3), H(D,9+4), C(D,10+6)
B(F,12+1), H(D,9+4), C(D,10+6)
H(D,9+4), E(B,14+0), C(D,10+6)
E(B,14+0), C(D,10+6)
C(D,10+6)

an

tekuci
cvor

iz

tekuci
cvor

le

kt

ro
n

Na kraju primene algoritma, kada je cvor postao tekuci cvor, konstruise se trazeni put (koristeci informacije o roditeljma za cvorove iz zatvorene liste: . Ovo jeste put od cvora do cvora , ali
nije najkraci moguci: naime, kraci je sledeci put: . Ovo je posledica cinjenice da funkcija
nije konzistentna (iako jeste dopustiva): vazi 2 + () < ().
Ukoliko se za isti zadatak koristi konzistenta funkcija, rezultat ce biti optimalan put od do . U narednom
primeru se koristi funkcija cija se vrednost razlikuje u odnosu na prethodnu samo za cvor .

4
3

5
4

1
3

3
3

A
D
G
H
B
F
E

stanje otvorene lista


[cvor(roditelj,g+h)]
A(-, 0+6)
D(A,6+5), G(A,5+6)
G(A,5+6), H(D,9+3), F(D,9+3), C(D,10+6)
H(D,9+3), F(D,9+3), C(D,10+6)
B(H,11+1), F(D,9+3), C(D,10+6)
F(D,9+3), E(B,13+0), C(D,10+6)
E(B,13+0), C(D,10+6)
C(D,10+6)

u zatvorenu listu
se dodaje
A(-)
D(A)
G(A)
H(D)
B(H)
F(D)

Primer 4.6. U primeru pronalazenja najkracih puteva izmedu gradova (primer ??), ako su poznata rastojanja izmedu gradova vazdusnim putem, algoritam A* moze kao heuristicku funkciju () da koristi vazdusno
rastojanje od cvora do ciljnog cvora, kao i u primeru 4.1. Naredna tabela ilustruje izvrsavanje algoritma A*
na primeru puta Podgorica-Budimpesta. Nadeni put je Podgorica-Beograd-Budimpesta, za razliku od pohlepne
pretrage koja pronalazi put Podgorica-Sarajevo-Beograd-Budimpesta.

37

4. Informisana pretraga
Budimpesta
340
300

Zagreb
400
290

380
320
390410
370 560

640
290
190
450
280

Sarajevo

230
170

Podgorica

840
640

Beograd

590
450

Bukurest
360
300

430
320

350
190

Skoplje

240
170

Sofija

(2
01
6)

Slika 4.11: Graf koji opisuje problem puteva izmedu gradova.


5
1 2 3 4
5 6 11 7
9 10 8
13 14 15 12
4

1 2 3 4
5 6 11 7
9 10
8
13 14 15 12

an

1 2 3 4
5 6 11 7
9 10 8 12
13 14 15

1 2 3 4
5 6 11
9 10 8 7
13 14 15 12

je

sk
o

iz

Slika 4.12: Stablo pohlepne pretrage na primeru slagalice u kojem se polazno stanje nalazi na platou.

u zatvorenu listu
se dodaje
Pod(-)
Sar(Pod)
Beo(Pod)

kt

Pod
Sar
Beo
Bud

stanje otvorene lista


[cvor(roditelj,g+h)]
Pod(-,0+560)
Sar(Pod,230+410), Beo(Pod,450+320), Sko(Pod,350+640)
Beo(Pod,450+320), Sko(Pod,350+640), Zag(Sar,630+300)
Sko(Pod,350+640), Zag(Sar,630+300), Bud(Beo,830+0)
Sko(Pod,350+640), Zag(Sar,630+300)

ro
n

tekuci
cvor

le

Primer 4.7. Slika 4.12 prikazuje stanje slagalice i tri moguca naslednika, koja imaju ocenu rastojanja istu
kao i polazno stanje ili vecu. Stoga, kako se polazno stanje nalazi na platou, pristup ciste pohlepne pretrage je
nemocan vec na pocetku.
Za isto polazno stanje, algoritam A* pronalazi resenje od pet poteza levo, gore, desno, dole, dole. Stablo
pretrage vrsene algoritmom A* je prikazano na slici 4.13 i odgovara procesu pretrage u kojem se medu stanjima
naslednicima prvo razmatra pogresan, ali po proceni rastojanja, jednako obecavajuc potez nadole.

4.3.2

Specijalni slucajevi primene

Koriscenje algoritma A* nije uvek jednostavno. Cesto


je algoritam potrebno prilagoditi specificnom problemu
a uvek je, u kontekstu aplikacija koje rade u realnom vremenu, vazno imati u vidu vremensku slozenost, prostornu
slozenost, upravljanje memorijom i razlicite dodatne faktore. Neka od dodatnih, specificnih zahteva mogu da
iziskuju dodatno matematicko znanje i izracunavanja i specificne implementacione tehnike i strukture [?]. Svi
ti moduli treba da budu uklopljeni u kompaktan i efikasan sistem za nalazenje puta.
Obilasci grafa u dubinu i sirinu mogu se smatrati specijalnim slucajevima algoritma A*.
Za obilazak grafa u dubinu, moze se koristiti algoritam A* sa () = 0 i pogodno kreiranom funkcijom .
Na primer, neka je vrednost inicijalizovna na neku veoma veliku vrednost. Kad god se obraduje neki cvor,
vrednost se pridruzuje kao vrednost funkcije svim njegovim susedima koji nisu poseceni ranije. Nakon svake
dodele neka se smanjuje vrednost za jedan. Time ce vrednost () da bude veca za cvorove na koje se ranije

4.3. Algoritam A*

38
0 + 5 (1)
1 2 3 4
5 6 11 7
9 10 8
13 14 15 12
1 + 4 (2)

1+4

1 2 3 4
5 6 11 7
9 10 8 12
13 14 15

1 2 3 4
5 6 11 7
9 10
8
13 14 15 12

1 2 3 4
5 6 11
9 10 8 7
13 14 15 12

2+3

(4)

2+5

1 2 3 4
5 6 11 7
9
10 8
13 14 15 12

1 2 3 4
5 6
7
9 10 11 8
13 14 15 12

1 2 3 4
5 6 11 7
9 10 15 8
13 14
12

3+4

3+2

(5)

3+4

1 2 3 4
5
6 7
9 10 11 8
13 14 15 12

1 2 3 4
5 6 7
9 10 11 8
13 14 15 12

1 2
4
5 6 3 7
9 10 11 8
13 14 15 12

2+5

(2
01
6)

1 2 3 4
5 6 11 7
9 10 8 12
13 14
15

1+6

je

2+5

(3)

4 + 1 (6)

4+3

an

1 2 3 4
5 6 7 8
9 10 11
13 14 15 12

iz

1 2 3
5 6 7 4
9 10 11 8
13 14 15 12

5+2

sk
o

1 2 3 4
5 6 7 8
9 10
11
13 14 15 12

5 + 0 (7)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15

kt

ro
n

Slika 4.13: Stablo pretrage vrsene algoritmom A*, na primeru slagalice u kojem se polazno stanje nalazi na
platou. U prikazu stabla, medu naslednicima svakog stanja su samo stanja koja nisu vec dodata u zatvorenu
listu. U zagradama su navedeni redni brojevi pod kojim stanja postaju tekuca.

le

naislo. Ovako definisana funkcija nije nuzno dopustiva.


Za () = 0, algoritam A* predstavlja specijalnu varijantu pristupa Prvo najbolji, koja najpre obraduje
cvorove sa najboljom heuristickom vrednoscu. Ova varijanta algoritma nije nuzno optimalna.
Dejkstrin algoritam, kao specijalni slucaj obilaska grafa u sirinu, takode je specijalni slucaj algoritma A* u
kojem je () = 0 za svaki cvor . Ovakva funkcija je konzistentna i garantuje nalazenje optimalnog puta.
Sa ravnomernom pretragom (sa funkcijom () = 0), skup otvorenih cvorova ce se siriti ravnomerno, u koncentricnim krugovima oko polaznog cvora, bas kao kod Dejkstrinog algoritma. S druge strane, sa preciznijom
heuristikom, skup otvorenih cvorova ce se siriti ka ciljnom cvoru i bice bolje usmerena kao optimalnom putu.
Opsti algoritam A* cesto se primenjuje za pronalazenje puta na uniformnoj mrezi cvorova (koja odgovara, na
primer, diskretizovanoj mapi). Tada on dobija specificnu formu. Pretpostavimo da je mreza pravilna (sacinjena
od kvadrata) i da ima pravougaonu formu. Dodatno, pretpostavljamo da neki cvorovi (tj. neki kvadrati, neka
polja mreze) nisu dostupni i da oni predstavljaju prepreke. Svako polje je povezano sa svakim susednim poljem
(osim sa preprekama), te ima (izuzev polja na rubu) osam susednih polja (ali neka od njih mogu biti prepreke
i kao takve nedostupne). Svakom
horizontalnom ili vertikalnom pokretu moze se pridruziti cena 1, a svakom

dijagonalnom cena 1.414 2 (ovakva cena odgovara euklidskom rastojanju izmedu sredista polja). Funkcija
heuristike moze se zadati na razlicite nacine. Kada se odreduje vrednost , obicno se, jednostavnosti i
efikasnosti radi, ignorisu sve prepreke jer vrednost () je procenjeno a ne stvarno rastojanje. Jedan nacin
zadavanja heuristike je euklidsko rastojanje izmedu dva polja. Ova funkcije je konzistentna (te obezbeduje
optimalnost), ali je zahtevna sto se tice vremena izracunavanja (posebno na mapama sa milionima cvorova).

39

4. Informisana pretraga

Drugi primer funkcije je Menhetn rastojenje u kojem se broji ukupan broj polja predenih horizontalno ili
vertikalno da bi se doslo od jednog do drugog polja. Ukoliko nisu dozvoljeni dijagonalni potezi, onda Menhetn
rastojanje daje dopustivu heuristiku i garantuje pronalazenje optimalnog puta. Ukoliko su dozvoljeni dijagonalni
potezi, onda Menhetn rastojanje potencijalno precenjuje rastojanje do ciljnog cvora, te nije dopustiva heuristika
i zbog toga ne garantuje pronalazenje najkraceg puta. No, ovaj metod u praksi ipak obicno daje dobre rezultate
i pronadeni putevi su obicno dovoljno dobri, cak i ako nisu najkraci.

Primer 4.8. Vrednosti funkcija , i su napisane u svakom polju uniformne mreze: vrednost funkcije je
zapisana gore-levo, vrednost funkcije dole-levo, a vrednost funkcije dole-desno. Vrednost funkcije za svako
polje je, kao i obicno, zbir vrednosti funkcija i . Polazni cvor oznacen je zelenom, a ciljni crvenom bojom.
Otvorena polja su oznacena tankim zelenim kvadratima, a zatvorena debljim crvenim kvadratima u okviru polja.
Strelice ukazuju na tekuceg roditelja polja.

(2
01
6)

Postupak je isti kao kod opsteg algoritma: u svakoj iteraciji bira se polje iz otvorene liste sa najmanjom
vrednoscu funkcije . To, tekuce polje izbacuje se iz otvorene liste i dodaje u zatvorenu listu. Proveravaju se
sva susedna polja, ne razmatrajuci polja koja su u zatvorenoj listi ili nisu dostupna. Ako susedno polje nije vec
u otvorenoj listi, izracunavaju se vrednosti funkcija , i za njega i oznacava se da je tekuce polje njegov
roditelj. Ako je susedno polje vec u otvorenoj listi, proverava se da li je put preko tekuceg polja bolji, tj. proverava
se da li je vrednost funkcije za to susedno polje manja ako se do njega dolazi preko tekuceg polja. Ukoliko to
nije tacno, ne preduzima se nista, a ako jeste, tekuce polje postaje novi roditelj tog susegnog polja i njemu se
pridruzuju nove vrednosti i .

an

je

Pretraga krece od polaznog polja jer je na pocetku samo ono u otvorenoj listi. U poljima levo, desno, gore
i dole od polaznog polja, vrednost funkcije je 10. U dijagonalnim poljima vrednost funkcije je 14. Ove
vrednosti odgovaraju pribliznom euklidskom rastojanju (pomnozenom sa 10 i zaokruzenom). Vrednosti funkcije
izracunavaju se na osnovu Menhetn rastojanja (pomnozenog sa 10) do ciljnog polja i zanemarujuci prepreku.

iz

Polazno polje brise se iz otvorene liste i dodaje u zatvorenu listu. U otvorenoj listi je samo njegovih osam
susednih polja. Od svih njih, bira se ono sa najmanjom vrednoscu funkcije (40), to je polje neposredno desno
od polaznog polja i ono ce biti sledece tekuce polje.

ro
n

sk
o

Tekuce polje izbacuje se iz otvorene liste, dodaje se u zatvorenu listu i onda se proveravaju njegova susedna
polja (naravno, samo ona koja nisu u zatvorenoj listi i nisu prepreke). Preostala cetiri polja su vec u otvorenoj
listi, pa je potrebno proveriti da li put preko tekuceg cvora popravlja njihove trenutne ocene. Razmotrimo, na
primer, polje neposredno iznad tekuceg polja: vrednost funkcije za njega je 14. Ukoliko bi se do njega dolazilo
preko tekuceg polja, vrednost funkcije bila bi 20 (10 je cena od polaznog do tekuceg cvora i 10 je cena prelaska
od tekuceg polja). Dakle, na ovaj nacin se ne moze popraviti vrednost funkcije u polju iznad i ona ostaje
nepromenjena.

le

kt

Opisani postupak sprovodi se za sva cetiri susegna polja i, u ovom slucaju, utvrduje se da ocena nijegnog ne
moze da se popravi. Time je obrada tekuceg polja zavrsena i trazi se novo tekuce polje. Od preostalih sedam
polja u otvorenoj listi bira se ono sa najmanjom vrednoscu funkcije . Ukoliko postoji vise takvih svejedno je
koji izabrati. Neka je, na primer, izabrano polje neposredno ispod prethodnog tekuceg polja.

Za tekuce polje nece se razmatrati susedna polja koja su u zatvorenoj listi i koja su nedostupna (tj. prepreke).
No, moze se (iako to nije nuzno i zavisi od konkretne primene) zabraniti ispitivanje polja koje je desno-dole od
tekuceg polja. Naime, moze se smatrati da je dijagonalni potez od tekuceg do tog polja nemoguc zbog prepreke koja
se nalazi desno od tekuceg polja. Ukoliko se prihvati takvo ogranicenje, ostaje jos tri susednih polja koja treba
razmotriti. Dva polja ispod tekuceg polja nisu u otvorenoj listi, pa se dodaju zajedno sa izracunatim vrednostima
funkcija i informacijom da im je roditelj tekuce polje. Za polje levo od tekuceg polja se proverava da li se moze
smanjiti vrednost funkcije (odgovor je ne) i time je zavrsena obrada tekuceg polja.
Opisani postupak se nastavlja dok ciljno polje ne postane tekuce.
U konkretnom primeru, nakon nekoliko iteracija, vrednosti funkcija i , kao i roditeljsko polje promenili su
se za polje dva polja ispod polaznog polja. Ranije je ovo polje imalo vrednost funkcije jednaku 28 (i vrednost
funkcije jednaku 88) i roditeljsko polje je bilo gore-desno. Kasnije, ovo isto polje ima vrednost funkcije
jednaku 20 (i vrednost funkcije jednaku 80), a roditeljsko polje je gore. Ova izmena dogodila se u nekoj
iteraciji u meduvremenu. U ovom slucaju ona ne utice na pronadeni put, ali su ovakve izmene u opstem slucaju
veoma ceste i uticu na konacno resenje.
Kada se tokom pretrage ciljno polje postane tekuce, trazeni put od polaznog cvora se konstruise jednostavno.
Krece se od ciljnog cvora i prelazi na roditeljski sve dok se ne dode do polaznog cvora. Ovako odreden niz polja
u suporotnom poretku daje trazeni put od polaznog do ciljnog polja.

4.3. Algoritam A*

40

74

60

54

74

60

54

14 60 10 50 14 40
60
40

14 60 10 50 14 40
60
40

10 50
74
60

10 50
74
60

10 30
54

14 60 10 50 14 40

14 60 10 50 14 40

108
74

60

10 30
54

94

80

74

(2
01
6)

28 80 24 70 20 60 24 50
94
74
60
54

54

14 60 10 50 14 40
60
40

24 70 14 60 10 50 14 40
80
60
40

82

10 50
74
60

20 60 10 50
94
74
60

72 10 68 0 72 10
74
68
88

10 30
54

24 70 14 60 10 50 14 40
108
94
80
74
74

68

82

54 20 58 10 68 20
74
74
102

je

14 60 10 50 14 40
88
74

10 30
54

28 80 24 70 20 60 24 50 34 40 44 30 54 20 72 30
108
94
88
88
88

an

28 60 24 50

94

80

74

iz

108

38 70 34 60 38 50 48 40 58 30

28 80 24 70 20 60 24 50
94
74
60
54

82

20 60 10 50
94
74
60

72 10 68 0 72 10
74
68
88

sk
o

24 70 14 60 10 50 14 40
80
60
40
10 30
54

ro
n

24 70 14 60 10 50 14 40
108
94
80
74
74

68

82

54 20 58 10 68 20
74
74
102

4.3.3

38 70 34 60 38 50 48 40 58 30

Slika 4.14: ???

le

kt

28 80 24 70 20 60 24 50 34 40 44 30 54 20 72 30
108
94
88
88
88

Implementaciona pitanja

Algoritam A* se obicno primenjuje u aplikacijama koje rade u realnom vremenu, te je neohodno da je


efikasno implementiran. Otvorena lista se cesto implementira kao binarni min-hip (kako bi se brzo dolazilo
do elementa sa najmanjom vrednoscu funkcije ), a zatvorena lista kao hes tabela4 . Koriscenjem ovih fukcija
operacije za dodavanje u brisanje elemenata iz otvorene liste zahteva vreme (log ), gde je broj cvorova
grafa, a dodavanje cvora u zatvorenu listu i proveravanje da li je vec u zatvorenoj listi zahteva vreme (1).
Zahtevi za memorijskim prostorom su za algoritam A* cesto jos veci problem nego vremenska slozenost.
Ipak, ukoliko broj cvora grafa nije preveliki, moze da bude isplativo i staticko alociranje potrebnog prostora (ili
dinamicko alociranje vecih blokova) koji onda moze da se koristi u savezu sa min-hip strukturom, kako bi se
izbegle ceste i skupe operacije dinamickog alociranje (i dealociranje) za pojedinacne cvorove.
Potrebno je eliminisati racun sa decimalnim brojevima i koristiti samo celobrojnu aritmetiku. Ukoliko cene
imaju vrednosti koje nisu celobrojne (npr. 1.414) potrebno ih je pomnoziti sa, na primer, 1000 i koristiti samo
4 He
s tabela je struktura podataka koja povezuje vrednosti i kljuceve. Ona omogucava efikasno nalazenje vrednosti na osnovu
kljuca. To se postize preslikavanjem kljuca hes funkcijom u hes vrednost koja sluzi kao indeks niza na kojem se nalazi odgovarajuca
vrednost.

41

4. Informisana pretraga

zaokruzene vrednosti.
Najgori slucaj za algoritam A* je kada ne postoji put izmedu polaznog i ciljnog cvora. U tu svrhu moze se
implementirati brza provera da li uopste postoji put izmedu dva cvora: dva cvora su povezana ako i samo ako
pripadaju povezanim delovima grafa. Ako se za svaki cvor moze lako proveriti kom delu grafa pripada, onda je
i navedena provera jednostavna.
Kada se algoritam A* primenjuje za pronalazenje puta na uniformnoj mrezi, on daje korake u osam mogucih
smerova sto kasnije cesto dovodi do neprirodnih puteva sacinjenih od segmenata sa jednim od osam nagiba.
Takve puteve je potrebno unaprediti omeksavanjem, tj. zameniti slicnim putevima koji izgledaju prirodnije.

Pitanja i zadaci

Pitanje 4.5. Cemu


je jednaka vrednost () koja se u algoritmu A* pridruzuje cvoru ?
Pitanje 4.6. Da li se tokom primene algoritma A*, moze promeniti vrednost () za cvor ? Da li se tokom

(2
01
6)

primene algoritma A*, moze promeniti vrednost () za cvor ? Da li se tokom primene algoritma A*, moze
promeniti vrednost () za cvor ?

Pitanje 4.7. Kada kazemo da je funkcija heuristike u algoritmu A* konzistentna a kada kazemo da je
dopustiva?

Pitanje 4.8. Kako se zove skup iz kojeg se u glavnoj petlji algoritma A* bira tekuci cvor?

Pitanje 4.9. Koji cvor se, prilikom primene algoritma A*, prvi dodaje u listu otvorenih cvorova?

je

Pitanje 4.10. Tokom primene algoritma A*, ako se ispituje tekuci cvor i naide na njegov susedni cvor koji

an

nije u zatvorenoj listi, ali jeste u otvorenoj listi, sta treba uraditi?

Pitanje 4.11. Da li, na samom pocetku primene algoritma A*, lista zatvorenih cvorova prazna?

Pitanje 4.12. Da li je na kraju primene algoritma A* lista otvorenih cvorova nuzno prazna?

iz

Pitanje 4.13. Da li je na kraju primene algoritma A* lista zatvorenih cvorova nuzno prazna?

sk
o

Pitanje 4.14. Kada se, u okviru algoritma A*, u listi zatvorenih cvorova dodaje novi element?
je uslov zaustavljanja za algoritam A*?
Pitanje 4.15. Sta

Pitanje 4.16. Kakva struktura se koristi za cuvanje vrednosti funkcije evaluacije u okviru algoritma A*?

ro
n

Obrazloziti.

kt

Pitanje 4.17. Kako se zove rastojanje izmedu dva cvora u kojem se broji ukupan broj polja predenih horizontalno ili vertikalno od prvog do drugog?

le

Pitanje 4.18. Koliko je Mehnetn rastojanje izmedu donjeg levog i gornjeg desnog polja sahovske table?
Pitanje 4.19. Kada se algoritam A* primenjuje na uniformnoj mrezi, koja funkcija se obicno primenjuje

kao heuristika? Da li je ova heuristika dopustiva? Zasto se primenjuje ova heuristika, sta je njena kljucna
osobina?

Pitanje 4.20. Kada se algoritam A* primenjuje na uniformnoj mrezi, sta se obicno koristi kao cena puta do
susednog cvora koji je desno, a sta do susednog cvora gore-desno?

za razliku od Dijkstrinog algoritma, algoritam A* uzima u obzir?


Pitanje 4.21. Sta,

Pitanje 4.22. Da li je algoritam A* opstiji od Dejkstrinog algoritma? Da li je Dejkstrin algoritam je opstiji


od algoritma A*?

Pitanje 4.23. Kada se algoritam A* ponasa isto kao Dejkstrin algoritam?


Pitanje 4.24. Za koje grafove je algoritam A* najpogodniji za primenu?
znaci to da je algoritam A* potpun?
Pitanje 4.25. Sta

Pitanje 4.26. Pod kojim uslovom je algoritam A* potpun?


Pitanje 4.27. Pod kojim uslovom je algoritam A* optimalan (nalazi najkraci put)?

4.3. Algoritam A*

42

Pitanje 4.28. Ukoliko je * funkcija koja odgovara optimalnom putu izmedu dva cvora u grafu, koje cvorove

obraduje algoritam *?

Pitanje 4.29. Kada je u algoritmu A* broj obradenih cvorova polinomijalan?


Zadatak 4.1. Data je tabla za igru kao na sledecoj slici. Potrebno je naci najjeftiniji put od polja A do polja
B pri cemu dijagonalno kretanje nije dozvoljeo. Cena prelaska sa belog na belo polje je 1, cena prelaska sa
belog na sivo polje je 4 i cena prelaska sa sivog na belo polje je takoe. 4. Crno polje nije dostupno. Prikazati
izvrsavanje algoritma A* za ovaj problem. Za ocenu cene kretanja od nekog polja do cilja, koristiti Menhetn
rastojanje od tog polja do cilja.
A
B

(2
01
6)

Zadatak 4.2.

Potrebno je naci najjeftiniji put od grada A do grada E. Procenjene cene putovanja od razlicitih gradova su
(A,105), (B,100), (C,50), (D,20). Stvarne cene putovanja izmeu. gradova su (A,B,20), (A,C,50), (A,D,100),
(B,C,20), (B,E,110), (C,D,30), (D,E,30). Izmeu. ostalih gradova nema puta. Prikazati izvrsavanje algoritma
A* na ovom problemu.

Zadatak 4.3.

c1

2c

an

je

U datom grafu, algoritmom A* naci najkraci put od gornjeg levog do donjeg desnog cvora. Pri tom, brojevi
pored cvorova predstavljaju vrednosti heuristicke procene cene puta preko tog cvora, dok brojevi iznad lukova
predstavljaju tacne cene prelaska od cvora do cvora.

iz

Zadatak 4.4.

c
0

sk
o

2
2

1
6

le

kt

ro
n

U datom grafu, algoritmom A*, naci najkraci put od cvora A do cvora F. Podvuceni brojevi predstavljaju
vrednosti heuristicke funkcije u cvorovima, a ostali cene prelaska preko grana.

1
2

Zadatak 4.5.
Algoritmom A* naci put od cvora A do cvora E. Heuristicka procena cene puta izmeu. dva cvora je broj grana
koje je potrebno preci na tom putu. Stvarne cene su date pored grana.

10

Zadatak 4.6.

43

4. Informisana pretraga

Potrebno je naci najjeftiniji put od grada A do grada E. Procenjene cene putovanja od razlicitih gradova su
(A,105), (B,100), (C,50), (D,20). Stvarne cene putovanja izmeu. gradova su (A,B,20), (A,C,50), (A,D,100),
(B,C,20), (B,E,110), (C,D,30), (D,E,30). Izmeu. ostalih gradova nema puta. Prikazati izvrsavanje algoritma
A* na ovom problemu.

Zadatak 4.7. (A*) Algoritmom A* naci put od cvora V3 do cvora V1. Heuristicka procena cene puta izmedu
dva cvora je broj grana koje je potrebno preci na tom putu. Stvarne cene su date pored grana.
3
9
7

3
8

1
5
4
2

(2
01
6)

5
0

Zadatak 4.8. Na datoj tabli sprovesti algoritam A*. Kao heuristicka mera rastojanja izmeu. dva cvora kojirsti
se Menhetn rastojanje. S oznacava start, a C cilj. Stupanje na belo polje kosta 2, na sivo 6, a crna polja su
neprohodna.

je

S
C

an

Zadatak 4.9. Na datoj tabli sprovesti algoritam A*. Kao heuristicka mera rastojanja izmeu. dva cvora kojirsti

le

kt

ro
n

sk
o

iz

se Menhetn rastojanje. S oznacava start, a C cilj. Stupanje na belo polje kosta 1, na sivo 6, a crna polja su
neprohodna.

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

(2
01
6)

Deo II

le

kt

ro
n

sk
o

iz

an

je

Logika i deduktivno zakljucivanje

kt

le

E
ro
n
sk
o
d

iz
an
je

(2
01
6)

(2
01
6)

Deo III

le

kt

ro
n

sk
o

iz

an

je

Masinsko ucenje i induktivno zakljucivanje

You might also like