¿El algoritmo de retroceso tiene que ver con la recursividad? Si no, ¿cuál es un ejemplo?

No, no tiene que ver con la recursividad, específicamente, la recursividad verdadera enumeraría todo el espacio de búsqueda.

Si bien usualmente usa la recursividad como un detalle de implementación para atravesar el espacio de búsqueda, intencionalmente “se rinde” sin enumerar recursivamente todos los nodos. Esto se llama “podar” el espacio de búsqueda; Se implementa mediante un procedimiento de rechazo .

También tiene un procedimiento de aceptación , que acepta soluciones completas.

En el límite, si el procedimiento de rechazo siempre devuelve verdadero , entonces es el equivalente del descenso recursivo, pero no necesariamente enumerará todo el árbol, de la forma en que lo haría la recursividad verdadera (ver más abajo).

Dado que implica la poda, un algoritmo de retroceso puede podar cuando una profundidad es demasiado profunda, por ejemplo: mirar hacia adelante N se mueve en un simple programa de juego de ajedrez se vuelve mucho más caro computacionalmente, cuanto mayor sea su valor para N.

Por lo tanto, puede usarlo para limitar el gasto computacional, si tiene una capacidad de cálculo limitada en todo el dominio del tiempo. De esta manera, se puede utilizar como un enfoque para el problema P vs. NP en la teoría de la computabilidad. No necesariamente encontrará una solución … pero puede que sí .

Un ejemplo más clásico es un programa de resolución de laberintos, que se detiene después de encontrar una solución: se considera clásico porque la mayoría de los laberintos tienen una solución única y válida, y se cierra cuando se resuelve el laberinto.

También se puede usar para problemas de satisfacción de restricciones, donde puede detenerse después de cumplir con la restricción o encontrar N nodos que cumplan con la restricción, pero renunciar a la búsqueda de nodos adicionales.

Si se usa para la satisfacción de restricciones, hay un sesgo izquierdo inherente en los resultados que obtienes, ya que es un descenso profundo, por lo que no es útil para los motores de búsqueda que desean vender publicidad, ya que no obtienes el contexto completo a los resultados más relevantes.

A2A.

Estoy poniendo estos enlaces aquí como referencia (Wikipedia). Tenga en cuenta que el tercero es el ejemplo de otro que no sea la recursividad.

  • Retroceso
  • Recursión (informática)
  • Problema de satisfacción de restricciones (nota, el retroceso se conoce como resolución)

El retroceso es más amplio que la recursividad. La recursión es perseguir tu cola y esperar que no la atrapes. ¿Ancho? Hay más involucrado con el primero que usa el segundo según sea necesario.

Ahora, menciono CSP ya que parece haberse perdido. Hicimos un trabajo maravilloso (por supuesto, subjetividad en acción, pero los resultados están ahí) usando este enfoque. Ahora, mire la página en CSP e intente encontrar recursiva. Ver que se desvanece en el fondo.

Hola Hugo Guetta!

Si considera que retroceder como rechazar una ruta de programa dada y volver a una anterior, eso se puede implementar fácilmente como una pila. Y, recuerde, la recursividad puede considerarse un cálculo impulsado por la pila de llamadas .

Por supuesto, hay otras formas de crear una pila, además de la recursividad. Por lo tanto, un programa no recursivo también podría usar una pila de datos para controlar sus pasos.

Una cosa buena acerca de la recursividad es que si la estoy usando para caminar por un camino (por ejemplo, estoy tratando de resolver un laberinto) y decido revertir, simplemente puedo caminar de regreso a la pila de llamadas hasta el punto donde quiero para tomar una decisión diferente Si estoy usando bucles (o, Heaven Forfend, goto), tengo que caminar manualmente. La recursión mantiene mi camino a través del espacio del problema en la pila de llamadas.

Por qué sí, Hugo, sí lo es. Gracias por el A2A.

¿El algoritmo de retroceso tiene que ver con la recursividad? Si no, ¿cuál es un ejemplo?

More Interesting

¿Qué tan buena es la calidad de los problemas de HackerRank en comparación con los problemas de Topcoder, Codeforces, Codechef?

Cómo calcular la O grande de: for (int k = 2; k <floor (sqrt (n)); k ++)

Agregue dos números en la hoja1, luego vea mi respuesta en la hoja2. ¿Cómo hago eso en Excel?

¿Cómo obtuvieron sus nombres los recorridos de árbol binario preorden, inorder y postorder?

¿Por qué procesar una matriz ordenada es más rápido que una matriz sin clasificar?

¿Cuáles son los mejores recursos para aprender R? Tratando de construir mi propio algoritmo de predicción basado en datos anteriores que tengo en archivos csv y que solía ser un desarrollador de Ruby hace un par de años

¿Cómo asigno enteros de o a n en una matriz bidimensional en Java?

¿Cómo podría implementar un gráfico inductivo en Haskell?

¿Un árbol de búsqueda binario permite un vértice duplicado?

En el algoritmo O (n) para encontrar el elemento máximo en una matriz, ¿cuál es el valor esperado del número total de cambios en el valor de una variable que mantiene el máximo sobre el paso de una matriz?

¿Qué es el algoritmo?

¿Cuáles son algunas preguntas asombrosas de CodeChef con soluciones comprensibles que me ayudarán a aprender nuevos métodos y conceptos?

¿Cuál es la diferencia entre hashing perceptual y hashing local sensible?

Preguntado por un no experto en tecnología, ¿qué tan impactante sería si una tecnología pudiera mitigar el ruido impulsivo en tiempo real usando un algoritmo no lineal simple que usa la mediana (en lugar de la media)? Por ejemplo, podría usarse para reemplazar filtros lineales analógicos en teléfonos móviles, esencialmente actuando como un filtro lineal a menos que detecte ruido impulsivo y actúe para condicionarlo.

¿Recomendaría usar HackerRank para mejorar las habilidades del algoritmo? ¿Por qué?