Dvosmerno pretraživanje

Dvosmerna pretraga je algoritam za pretragu grafa koji pronalazi najkraći put od početnog do krajnjeg čvora grafa. Izvršava dve istovremene pretrage: jedna od početnog čvora, druga od krajnjeg čvora grafa i algoritam prekida sa radom kada se ove dve pretrage nađu na sredini grafa. Razlog zbog koga se pristupa na ovaj način je što je u većini slučajeva pretraga brža: npr, u pojednostavljenom modelu problema složenosti pretrage, u oba slučaja pretrage proširuje stablo izdavajući faktor b, a rastojanje od početnog do krajnjeg čvora grafa d, obe ove pretrage imaju složenost O(bd/2), i vremenska složenost ove dve pretrage je manja od složenosti O(bd) koja predstavlja rezultat pretrage od početka do kraja grafa.

Kao u algoritmu pretrage A*, dvosmerna pretraga može biti predvođena istraživačkom procenom preostalog puta do kraja grafa ili do početka grafa.

Ira Pohl je prva dizajnirala i implementirala dvostrani pretraživački algoritam. Endru Goldberg je dao objašnjenje tačne granice mogućeg korišćenja verzije dvosmerne pretrage Dijkstra algoritma.[1]

Opis

Dvosmerno pretraživanje je oblik prostornog pretraživanja od mesta s {\displaystyle s} do mesta t {\displaystyle t} , pretraživajući od s {\displaystyle s} do t {\displaystyle t} i od t {\displaystyle t} do s {\displaystyle s} istovremeno. Ovaj algoritam vraća važeći spisak puteva koji ako se primeni na s {\displaystyle s} , dolazi se do t {\displaystyle t} .

Iako se čini da pretraga mora biti inverzna za obrnutu pretragu, u stvari je samo neophodno pronaći bilo koji dat čvor n {\displaystyle n} , i čvor n {\displaystyle n} mora imati validnu operaciju za svakog od njegovih roditelja. Ovo predstavlja jednosmernu ulicu u izboru nalaženja domena: nije neophodno da se ide u oba pravca, ali je neophodno kada se nadjemo na kraju grafa, da znamo moguću putanju do početka grafa.

Obrnuta pretraga će uvek zahtevati inverzne troskove. Formalnije, ako je čvor n {\displaystyle n} sa roditeljem p {\displaystyle p} , onda k 1 ( p , n ) = k 2 ( n , p ) {\displaystyle k_{1}(p,n)=k_{2}(n,p)} , definiše cenu od p {\displaystyle p} do n {\displaystyle n} .

Terminologija i notacija

b {\displaystyle b}
izdvojeni faktor pretrage stabla
k ( n , m ) {\displaystyle k(n,m)}
cena puta od čvora n {\displaystyle n} do čvora m {\displaystyle m}
g ( n ) {\displaystyle g(n)}
cena puta od čvora do n {\displaystyle n}
h ( n ) {\displaystyle h(n)}
istraživanje procene puta od čvora n {\displaystyle n} do kraja grafa
s {\displaystyle s}
početno mesto
t {\displaystyle t}
krajnje mesto (ponekad se obeležava i sa g {\displaystyle g} )
d {\displaystyle d}
trenutni smer pretrage, d = 1 {\displaystyle d=1} za pravilan smer, a za unazad je d = 2 {\displaystyle d=2} .
d {\displaystyle d'}
obrnuti smer pretrage, d = 3 d {\displaystyle d'=3-d} .
T R E E d {\displaystyle TREE_{d}}
pretraga stabla u pravcu d {\displaystyle d}
O P E N d {\displaystyle OPEN_{d}}
lišće stabla T R E E d {\displaystyle TREE_{d}}
C L O S E D d {\displaystyle CLOSED_{d}}
čvorovi stabla T R E E d {\displaystyle TREE_{d}} koji imaju potomke, ovaj set sadrži čvorove koji su već pretraženi.

Pristup dvosmernom pretraživanju

Dvosmerni pretraživači se mogu svrstati u tri kategorije: Front-to-Front, Front-to-Back, i Obimna pretraga. Razlikuju se po funkciji koju koriste za istraživanje.

Front-to-Back

Front-to-Back algoritam izračunava vrednost h {\displaystyle h} čvora n {\displaystyle n} koristeći procenu izmedju n {\displaystyle n} i korena suprotne pretrage stabla, s {\displaystyle s} ili t {\displaystyle t} .

Front-to-Back algoritam je najviše istraživan od sve tri kategorije. Trenutni najbolji algoritam je BiMAX-BS*F algoritam.

Front-to-Front

Front-to-Front algoritam izračunava vrednost h {\displaystyle h} čvora n {\displaystyle n} koristeći razdaljinu izmedju čvora n {\displaystyle n} i podskup O P E N d {\displaystyle OPEN_{d}'} . Pravi primer bi bio BHFFA (Dvosmerna pretraga Front-to-Front algoritmom), gde je funkcija h {\displaystyle h} definisana kao minimum istraživačkih procena između trenutnog čvora i njemu suprotnim čvorovima. Formalno:

h d ( n ) = min i { H ( n , o i ) | o i O P E N d } {\displaystyle h_{d}(n)=\min _{i}\left\{H(n,o_{i})|o_{i}\in OPEN_{d'}\right\}}

gde H ( n , o ) {\displaystyle H(n,o)} vraća prihvatljivu istraživačku procenu o distanci između čvorova n {\displaystyle n} i o {\displaystyle o} .

Front-to-Front pati od toga da bude preterano računski zahtevan. U svakom trenutku kada se čvor n {\displaystyle n} stavi u otvorenu listu, njegova vrednost mora biti izračunata kao f = g + h {\displaystyle f=g+h} . Ovo uključuje izračunavanje procene od čvora n {\displaystyle n} do svih čvorova koji se nalaze u O P E N {\displaystyle OPEN} set-u. O P E N {\displaystyle OPEN} set se eksponencijalno povećava za sve oblasti u kojima je b > 1 {\displaystyle b>1} .

Reference

  1. ^ Efficient Point-to-Point Shortest Path Algorithms
  • de Champeaux, Dennis; Sint, Lenie (1977), „An improved bidirectional heuristic search algorithm”, Journal of the ACM, 24 (2): 177—191, doi:10.1145/322003.322004 .
  • de Champeaux, Dennis (1983), „Bidirectional heuristic search again”, Journal of the ACM, 30 (1): 22—32, doi:10.1145/322358.322360 .
  • Pohl, Ira (1971), „Bi-directional Search”, Ур.: Meltzer, Bernard; Michie, Donald, Machine Intelligence, 6, Edinburgh University Press, стр. 127—140 .
  • Russell, Stuart J.; Norvig, Peter (2002), „3.4 Uninformed search strategies”, Artificial Intelligence: A Modern Approach (2nd изд.), Prentice Hall .