Otros carteles respondieron esto en comparación con Dijkstra, por lo que intentaré una perspectiva diferente: comparar con la búsqueda de amplitud y profundidad.
La búsqueda en profundidad primero es como resolver un rompecabezas de laberinto: recorres un camino lo más lejos que puedes, luego, una vez que llegas a un callejón sin salida, vuelves a la última bifurcación e intentas el otro camino, y así sucesivamente; y retrocede repetidamente y prueba otras horquillas, hasta llegar a la meta. En términos de implementación, es un recorrido de gráficos utilizando una estructura de datos de pila para mantener los nodos por los que hemos caminado y que aún no hemos explorado.
La búsqueda de amplitud primero , en comparación, es como dar vueltas en anillos desde su punto de partida, hasta que finalmente llega a la meta. En términos de implementación, es un recorrido de gráficos utilizando una estructura de datos de cola para realizar un seguimiento de los nodos que hemos recorrido, pero que aún no hemos explorado.
- ¿Qué plataforma de bot es ideal para construir chatbots que admitan Facebook Messenger (todas las plantillas), slack, telegram y skype?
- ¿Qué tan lejos estamos de poder programar una computadora para distinguir buena música de mala música o ruido, de forma similar a como lo hace un humano?
- ¿Cuál es la diferencia entre inteligencia artificial, aprendizaje automático, minería de datos e inteligencia de negocios? ¿Cómo están relacionados?
- ¿Cuál será el primer país totalmente automatizado?
- Si tuviera una aplicación móvil (con tecnología de IA) que permitiera a los fanáticos del deporte debatir sobre un tema, ¿sería algo interesante?
Ahora, ambos algoritmos suponen que la búsqueda es ciega, y esencialmente tropiezas hasta que encuentras el objetivo. Pero, ¿qué pasaría si pudieras ver dónde está el objetivo y si estás caminando en la dirección correcta?
Un * algoritmo hace exactamente eso. Es como una búsqueda de amplitud, pero con un ajuste o dos: utiliza una estructura de datos de cola prioritaria , que empuja a los nodos al frente de la cola en función de lo cerca que se estima que están para el objetivo. En efecto, es como ir directamente hacia la meta y, si llegas a un obstáculo, explorar otros nodos en la misma dirección general para volver a la pista.
La principal diferencia de A * sobre BFS está en 1) usar la cola de prioridad y 2) tener una buena función que estima la distancia de cualquier nodo al objetivo. Si la función es “optimista” (es decir, subestima la distancia real), A * produce el camino más corto hacia la meta. Si la función es “pesimista” (es decir, sobreestima la distancia real), A * se dirige hacia la meta de manera más agresiva en lugar de explorar otros nodos, por lo que podría hacer menos trabajo pero producir caminos subóptimos. A * con una función de distancia pesimista a menudo se usa en juegos donde el tiempo de ejecución es muy importante, y las rutas óptimas no lo son tanto.