Dubbelriktad sökning

Dubbelriktad bredd (eller djup) sökning [1] [2] är en sofistikerad bredd (eller djup ) sökalgoritm , vars idé är att bilda en sökprocess från den initiala ( framåtsökningen ) och från den slutliga vertexen ( omvänd sökning ) i grafen .


Idé

Att hitta den önskade vägen handlar om att bestämma banorna från den initiala till någon mellanliggande, och från den till den slutliga vertexen. Implementeras genom att checka in en eller båda processerna när ett blad från ett sökträd matchar ett blad från ett annat, varefter sökvägar till det elementet extraheras. Genom att koppla ihop stigarna får vi den önskade vägen. Om två sökningar görs parallellt  sparar detta ännu mer tid för att få den önskade sökvägen jämfört med en enkelriktad sökning.

Fördelar och nackdelar

Svårighetsgrad

Komplexiteten för hela algoritmen uppskattas som summan av komplexiteten av sökningar framåt och bakåt, medlemskontroll lika med en operation, konstant tid (O (n)), tillgång till hashtabellen .

Räknar antalet operationer

För beroende av den specifika situationen om sökningen inte sker på ett n-ärt träd .

Asymptotisk komplexitet av ökande antal operationer

Statistisk utvärdering

Dubbelriktad sökning, givet ett enda start- och slutelement, kan förbättra enkelriktad bredd-först-sökning, vanligtvis med en faktor 2. Det svåraste fallet för en dubbelriktad sökning är ett sådant problem där endast en implicit beskrivning av någon (möjligen mycket stor) uppsättning måltillstånd ges för att kontrollera målet, till exempel alla tillstånd som motsvarar målets schackmatt "Schack "i schack . I omvänd sökning skulle det vara nödvändigt att skapa kompakta beskrivningar av alla tillstånd som tillåter schackmatt med drag , etc.; och dessa beskrivningar skulle behöva kontrolleras mot de tillstånd som genereras av direkt sökning. Det finns inget generellt sätt att effektivt lösa ett sådant problem.

Dubbelriktad sökalgoritm

Algoritmen består av:

Implementeringens komplexitet

Komplexiteten i implementeringen ligger i den omvända sökalgoritmen.

Implementeringsexempel

Praktisk tillämpning

Se även

Anteckningar

  1. Övrigt: dubbelriktad elementsökning - utförs i dubbelriktade eller cirkulära listor från det önskade elementet i båda riktningarna.
  2. [1]  (nedlänk) Denna algoritm är komplett och optimal (med enhetliga stegkostnader) om båda sökprocesserna är breddförsta; andra kombinationer av metoder kan sakna fullständighet, optimalitet eller båda.

Länkar

Litteratur