La búsqueda bidireccional de amplitud (o profundidad) [1] [2] es un sofisticado algoritmo de búsqueda de amplitud (o profundidad ) , cuya idea es formar un proceso de búsqueda desde el vértice inicial ( búsqueda hacia adelante ) y desde el vértice final ( búsqueda hacia atrás ). búsqueda ) del gráfico .
Encontrar el camino deseado se reduce a determinar los caminos desde el inicial hasta algún intermedio, y desde este hasta el vértice final. Se implementa comprobando uno o ambos procesos cuando una hoja de un árbol de búsqueda coincide con una hoja de otro, después de lo cual se extraen las rutas a ese elemento. Conectando los caminos obtenemos el camino deseado. Si se realizan dos búsquedas en paralelo , se ahorra aún más tiempo para obtener la ruta deseada en comparación con una búsqueda unidireccional.
La complejidad de todo el algoritmo se estima como la suma de la complejidad de las búsquedas hacia adelante y hacia atrás, verificación de membresía igual a una operación, tiempo constante (O (n)), acceso a la tabla hash .
Demasiado dependiente de la situación específica si la búsqueda no está en un árbol n-ario .
La búsqueda bidireccional, dado un solo elemento inicial y final, puede mejorar la búsqueda unidireccional en amplitud, generalmente por un factor de 2. El caso más difícil para una búsqueda bidireccional es un problema en el que solo se proporciona una descripción implícita de algún conjunto (posiblemente muy grande) de estados objetivo para verificar el objetivo, por ejemplo, todos los estados correspondientes al jaque mate del objetivo "Ajedrez". " en el ajedrez . En la búsqueda inversa, sería necesario crear descripciones compactas de todos los estados que permitan el jaque mate con jugadas , etc.; y estas descripciones tendrían que cotejarse con los estados generados por la búsqueda directa. No existe una forma general de resolver de manera efectiva tal problema.
El algoritmo consta de:
La complejidad de la implementación radica en el algoritmo de búsqueda inversa.