"Algoritmo": algoritmo de seguimiento

1. Introducción

\ quad \ quad El algoritmo de retroceso se basa en realidad en un proceso de intento de búsqueda de enumeración similar DFS (primera búsqueda en profundidad), principalmente en el proceso de intento de búsqueda para encontrar la solución del problema, cuando se descubre que no se cumplen las condiciones de la solución, el "retroceso" Regrese, pruebe Otros caminos. El método de retroceso es una especie de método de búsqueda óptimo, que busca hacia adelante de acuerdo con las condiciones óptimas para lograr el objetivo. Pero cuando explora un cierto paso, encuentra que la elección original no es buena o que el objetivo no se ha logrado, por lo que retrocederá un paso y volverá a elegir. Esta técnica de retroceder y volver es el método de retroceso, y el punto de un cierto estado que satisface la condición de retroceso. Esto se denomina "punto de retroceso". Muchos problemas complejos y de gran escala pueden utilizar el método de retroceso, que tiene la reputación de "método universal de resolución de problemas".

La diferencia entre DFS y el algoritmo de retroceso

\ quad \ quad DFS busca constantemente en una determinada dirección hasta que alcanza el nivel más bajo. El algoritmo de retroceso se basa en DFS, pero la diferencia es que en el proceso de búsqueda, una vez que se alcanza la condición final, el estado se restaura, retrocediendo al nivel anterior. y vuelva a buscar. Por lo tanto, la diferencia entre el algoritmo de retroceso y DFS es si hay un restablecimiento de estado. El método de primera generación en profundidad con función de límite se denomina método de retroceso. (Método de retroceso = exhaustivo + poda)

2. La idea básica

\ quad \ quad En términos simples, el método de retroceso es agotar primero todos los algoritmos posibles en el orden de profundidad, pero la mejor parte del algoritmo de retroceso que el método de agotamiento por fuerza bruta es que el algoritmo de retroceso puede determinar si el estado actual cumple con las condiciones de el problema en cualquier momento. Una vez que no se cumplan las condiciones, vuelva al estado anterior, ahorrando tiempo para continuar explorando.

\ quad \ quad En otras palabras, el método de retroceso puede entenderse como encontrar el destino eligiendo diferentes bifurcaciones, una bifurcación a la vez y otra bifurcación para intentar encontrar el destino. Si toma el camino equivocado, continúe regresando para encontrar otro camino que se bifurca hasta que encuentre su destino. Ahorra tiempo ir por el camino equivocado.

3. Pasos básicos del proceso y la solución

\ quad \ quad Para evitar generar el estado del problema que no puede producir la mejor solución, el método de retroceso debe usar continuamente la función delimitadora para ejecutar (podar) aquellos nodos vivos que son realmente imposibles de producir la solución requerida, a fin de reducir el cálculo de la problema la cantidad.

Dos funciones de poda de uso común:

  • Función de restricción: reste el número de hijos que no cumplen con la restricción en el nodo de expansión
  • Función ligada: resta el subárbol que no obtiene la solución óptima

Los pasos generales para resolver el problema con el método de retroceso:

(1) Salida de retroceso : Para el problema dado, determine el espacio de solución del problema:
(2) Asunto de retroceso : Determine la regla de búsqueda extendida del nodo: atraviese todos los nodos secundarios del estado actual y determine si el siguiente estado es Satisfecho Para las condiciones del problema, si se cumplen las condiciones del problema, ingrese el siguiente estado.
(3) Retorno de estado : busque el espacio de la solución en profundidad y utilice la función de poda en el proceso de búsqueda (si el estado actual no cumple con las condiciones, vuelva al estado anterior) para evitar una búsqueda no válida.

Plantilla universal de función de retroceso

def backtrack ( 参数 ):

	#回溯出口
	if ( 满足题意了 ):
		计数或进行其他操作
		return True   #有时可以省略
	
	#回溯主体
	for( 查找当前节点的周围的节点 )
		进行其他的操作;
		标记已经搜索过的节点
		backtrack( 下一次搜索的节点 )
	#状态返回
		取消标记;
	return False	#有时可以省略

4. Condiciones aplicables

Es decir, las características del método de retroceso (para juzgar cuándo se debe utilizar el algoritmo de retroceso)

1. La respuesta a la pregunta tiene varios elementos.

2. La respuesta debe satisfacer algunas limitaciones

3. La forma de encontrar la respuesta es la misma en cada paso.

Si un problema es un problema de búsqueda para resolver, y la solución del problema es una estructura de árbol (vector en constante expansión), entonces el problema puede considerar el uso del algoritmo de retroceso.

5. Ejemplo clásico

Como n reinas, el color del gráfico, la búsqueda de subconjuntos, la disposición de las cadenas y otras cuestiones.

Tipos de preguntas sobre el algoritmo de retroceso:

  • Problemas de subconjuntos y combinaciones
  • Problema de permutación
  • Buscar, Preguntas de N Queens,

Supongo que te gusta

Origin blog.csdn.net/weixin_45666566/article/details/113795337
Recomendado
Clasificación