Kaksisuuntainen haku

Kaksisuuntainen leveys- (tai syvyys)haku [1] [2] on hienostunut leveys- (tai syvyys- ) hakualgoritmi , jonka ideana on muodostaa hakuprosessi alkuperäisestä ( eteenpäinhaku ) ja viimeisestä kärjestä ( käänteinen haku ) kaaviosta .


Idea

Halutun polun löytäminen tarkoittaa polkujen määrittämistä alkupisteestä johonkin välikohtaan ja siitä loppupisteeseen. Toteutetaan tarkistamalla yksi tai molemmat prosessit, kun yhden hakupuun lehti vastaa toisen lehtiä, minkä jälkeen polut kyseiseen elementtiin poimitaan. Yhdistämällä polut saamme halutun polun. Jos kaksi hakua suoritetaan rinnakkain  , tämä säästää vielä enemmän aikaa halutun polun löytämiseen verrattuna yksisuuntaiseen hakuun.

Edut ja haitat

Vaikeusaste

Koko algoritmin monimutkaisuus arvioidaan eteen- ja taaksepäin tehtyjen hakujen monimutkaisuuden summana, jäsenyyden tarkistus yhtä operaatiota vastaava, vakioaika (O (n)), pääsy hash-taulukkoon .

Operaatioiden lukumäärän laskeminen

Liian riippuvainen tietystä tilanteesta, jos haku ei ole n-aarinen puu .

Kasvavien operaatioiden asymptoottinen monimutkaisuus

Tilastollinen arviointi

Kaksisuuntainen haku, kun otetaan huomioon yksi aloitus- ja loppuelementti, voi parantaa yksisuuntaista leveyshakua, tyypillisesti kertoimella 2. Vaikein tapaus kaksisuuntaiselle haulle on sellainen ongelma, jossa vain implisiittinen kuvaus jostain (mahdollisesti hyvin suuresta) kohdetilojen joukosta annetaan tavoitteen tarkistamiseksi, esimerkiksi kaikki tilat, jotka vastaavat tavoitteen "Shakki" mattia. " shakissa . Käänteisessä haussa olisi tarpeen luoda kompaktit kuvaukset kaikista tiloista, jotka sallivat matin liikkeillä jne.; ja nämä kuvaukset olisi tarkistettava suoraan haun luomiin tiloihin. Ei ole olemassa yleistä tapaa ratkaista tällainen ongelma tehokkaasti.

Kaksisuuntainen hakualgoritmi

Algoritmi koostuu:

Toteutuksen monimutkaisuus

Toteutuksen monimutkaisuus piilee käänteisessä hakualgoritmissa.

Toteutusesimerkkejä

Käytännön sovellus

Katso myös

Muistiinpanot

  1. Muu: kaksisuuntainen elementtihaku - suoritetaan kaksisuuntaisissa tai ympyräluetteloissa halutusta elementistä molempiin suuntiin.
  2. [1]  (downlink) Tämä algoritmi on täydellinen ja optimaalinen (yhtenäisin askelkustannuksin), jos molemmat hakuprosessit ovat leveys-ensimmäisiä; muilta menetelmien yhdistelmiltä saattaa puuttua täydellisyyttä, optimaalisuutta tai molempia.

Linkit

Kirjallisuus