entrevista por escrito del algoritmo de retroceso

En primer lugar, lo que está dando marcha atrás?

Dar marcha atrás, por definición, cuando la solución de un problema no puede, copia de seguridad, seleccione un camino nuevo resuelto. Eso es cuando el gran problema, a menudo será un gran problema en una serie de pequeños problemas, pero cada pequeño problema cuando hay solución múltiple (para tener mal) tiempo (árbol binario similar), es necesario Solución una por una prueba, seleccione las respuestas en línea con las normas establecidas. Después de dar marcha atrás y luego se la hora de seleccionar una solución y la solución no cumplir con las normas de la solución, se remonta al paso anterior, elija otro una idea del algoritmo de solución.

En segundo lugar, la leyenda específica

Por ejemplo, la siguiente figura, el macho cada vez que hay un pequeño pelo verde que caer de nuevo al paso anterior para seleccionar una ruta, hasta el cuidado rescatado de la casa!
Aquí Insertar imagen Descripción

En tercer lugar, la disposición espacial de la estructura de árbol del subconjunto del árbol y Soluciones

  1. Subconjunto del árbol
    cuando se administra problema es encontrar a partir del conjunto S n elementos satisfacer ciertas propiedades del subconjunto, el espacio de la solución correspondiente se convierte en un subconjunto del árbol.
    El problema 0-1 mochila, varios artículos de la selección en el peso de la mochila a los diferentes valores de los elementos, de modo que la mochila no se cumple en el caso de exceso de peso, el valor máximo de elementos dentro de una mochila. Su espacio de soluciones es un subconjunto propio de la árbol. (Parte Ponga solamente)
  2. disposición del árbol
    cuando problema dado es determinar n elementos dispuestos para satisfacer algunas propiedades, el espacio de soluciones está dispuesto en un árbol respectivo.
    Tales como el problema del viajante, un vendedor de viajar a varias ciudades de nuevo, requiere un mínimo de distancia a pie. Su solución es disponer varias ciudades, el espacio de soluciones está dispuesto en un árbol. (Para todos)

En cuarto lugar, el algoritmo de retroceso construye rutinas

1 solución espacio definido problema

2 determinar la estructura espacio de soluciones fácilmente investigable

3 en una profundidad-primero buscar el espacio de soluciones, y una función para prevenir la búsqueda poda no válida mediante el proceso de búsqueda.

En quinto lugar, la práctica :( seleccionado de examen Leetcode)

N representa el número de generación se da entre paréntesis, se escribe una función, es posible generar todas las posibles combinaciones de soportes y eficaz.

Por ejemplo, dada n = 3, para generar el resultado es:

[
"((()))", "(()
())",
"(()) ()",
"() (())",
"() () ()"
]
Link: https: //leetcode-cn.com/problems/generate-parentheses

Si el proceso objeto el uso de la violencia, necesidad de seleccionar todo el posible y seleccionado de acuerdo con la regla de correspondencia las soluciones de recorrido de reglas, es decir, la complejidad de tiempo es (2 ^ (2n) n) , hay una cierta cantidad de la cantidad de código. Bueno, debido a que el problema también implica una variedad de soluciones y elegir una solución para cumplir con los requisitos, cómo si utilizamos dar marcha atrás? (Recomendado para tratar a mí mismo a escribir, y luego ver la respuesta)
La respuesta es la siguiente:
la primera capa de la respuesta ((()))
y luego volver gradualmente a la función hasta que el número de vuelta en paréntesis ((
lo que la respuesta a la segunda capa (() ())
y luego volver gradualmente a la función hasta que el número de vuelta en paréntesis (()
por lo que la respuesta a la tercera capa (()) ()
y luego volver gradualmente a la función hasta que regrese a la serie de soportes (
que es la respuesta a la cuarta planta () (() )
y luego volver gradualmente a la función hasta que el número de vuelta en paréntesis () (
que es la respuesta a la quinta planta () () ()

class Solution {
    public List<String> generateParenthesis(int n) {
       List<String> lst = new ArrayList();
       trackback(lst,"",0,0,n);
       return lst; 

    }

    public void trackback(List<String> lst,String curr,int open,int close,int max){
        //当括号数等于给定括号数的两倍(左右括号),添加进容器
        if(curr.length()==max*2){
            lst.add(curr);
            return ;
        }
        //当左括号小于给定的括号数,随便加
        if(open<max){
            trackback(lst,curr+"(",open+1,close,max);
        }
        //当右括号小于左括号数,随便加
        if(close<open){
            trackback(lst,curr+")",open,close+1,max);
        }
    }
}

Segundo ejercicio: problema de las ocho reinas

Publicado 24 artículos originales · ganado elogios 0 · Vistas 588

Supongo que te gusta

Origin blog.csdn.net/weixin_43896829/article/details/104892436
Recomendado
Clasificación