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 .
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.
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 .
För beroende av den specifika situationen om sökningen inte sker på ett n-ärt träd .
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.
Algoritmen består av:
Komplexiteten i implementeringen ligger i den omvända sökalgoritmen.
Algoritmer för grafsökning | ||
---|---|---|
Oinformerade metoder | ||
Informerade metoder | ||
Genvägar | ||
Minsta spännträd | ||
Övrig |