DSA_07: recursivo algoritmo

Frente a explicar la complejidad del análisis, las matrices, listas enlazadas, pilas, colas, algoritmo recursivo para explicar la actualidad.

 

Recursive, se puede decir con el frente amplio general de estos usos estructura de datos subyacentes, en muchos algoritmo, que es muy básico, que se utiliza comúnmente.

Algunos ejemplos simples:

  1. Antes de Binary Tree, con el fin, un recorrido posterior recursividad están disponibles.

  2. algoritmos de profundidad-primero recursivas, tales como pathfinding laberinto, la generación de laberinto.

  3. fila rápido, fusión recursiva tipo está disponible.

  4. recursiva de búsqueda binaria está disponible.

  5. recursividad disponible para resolver problemas prácticos.

Del mismo modo, el uso de la recursividad también numerosos. ¿Quiere corregir, para una aplicación flexible del algoritmo, es necesario tener algunas de sus características.

 

En este trabajo el algoritmo a través de un ejemplo de una de las técnicas basados ​​en el aprendizaje y da varias propiedades del algoritmo.

 

Ejemplo: Hay N pasos de la escalera, se puede cruzar un 1 1º, 2º o 3º orden, luego de haber completado este paso N-fin cuántos movimientos diferentes que?

Si ha encontrado este problema, le resultará muy sencillo. Pero si no recursividad, le resultará muy difícil, casi imposible pensar con claridad cerebro humano, detrás se da la explicación.

 

Aquí se dan métodos directos:

  Este N-acabado para el número de movimientos? A continuación, puede abarcar una orden de 1-3 para que este método de acabado de orden N con una F (N).

  Si el orden de la trayectoria es igual a ir N: N-1 pedido ha vienen métodos + N-2 + orden de proceso pedido volver Método N-3?

  Por supuesto, es posible que tenga que tomar tiempo para saborearlo.

  Se puede entender: N-orden puede llegar a partir de la orden N-1, también subió de N-2 fin, sino que también puede ir hacia arriba a partir de N-3 fin, para decir si o no lo entiende?

 

Por lo tanto F (n) = F (n-1) + F (n-2) + F (n-3).

A continuación, la condición de terminación: F (1) = 1, F (2) = 2, F (3) = 4. Creo que esto se puede pensar con claridad.

Por lo tanto los siguientes códigos:

int Fn ( int n) 
{ 
    si (n == 1 ) de retorno  1 ;
    si (n == 2 ) de retorno  2 ;
    si (n == 3 ) de retorno  4 ;
    si (n <= 0 ) de retorno - 1 ;
    retorno Fn (n - 1 ) + Fn (n - 2 ) + Fn (n - 3 ); 
}

Ahora, Echemos un vistazo a una vista del algoritmo explotó:

    

¿Le resulta un problema?

    F (4) se calcula repetidamente! ! !

Medida que n aumenta, más y más serán contados dos veces, el rendimiento de arriba también! ! !

Mirando hacia atrás, ¿por qué el cerebro humano no puede manejar sobre ella? Como se puede ver, su complejidad es O (3 ^ n), en segundo lugar solamente a la complejidad factorial, el cerebro puede soportar un índice explosión de este tipo que?

 

Recursividad consumen memoria de pila, el costo del espacio es, cuidadosamente pila muy grande explosión.

Cómo recursivo algoritmo para optimizarlo? Por un lado, por la recursivo método iterativo de escritura, y se puede utilizar recursión de cola de optimización, no elaborado aquí.

Hay un límite de tiempo, se le dará una gran cantidad de datos de prueba de la hebilla del título pincel en la fuerza y ​​otros lugares, lo que podemos hacer muy poco tiempo para ejecutarlo?

A los efectos de esta pregunta, si te digo, los pasos hasta 30 bandas, ver el código:

clase de soluciones 
{ 
público : 
    Solución () {Gen (); } 
    Int Fn ( int n) 
    { 
        si (n <= 0 || n> 30 ) de retorno - 1 ;
        retorno val [n - 1 ]; 
    } 

Privada :
     int val [ 30 ];
    void gen () 
    { 
        val [ 0 ] = 1 ; 
        val [ 1 ] = 2 ; 
        val [ 2] = 4 ;
        para ( int i = 3 ; i < 30 ; ++ i) 
            val [i] = val [i - 1 ] + val [i - 2 ] + val [i - 3 ]; 
    } 
};

Como resultado, el problema original puede ser resuelto de forma recursiva, directamente en la tabla de consulta, y de repente tener el tiempo y la complejidad se convierte en espacio O (1).

¿Cuántos movimientos hacemos cuando miramos a 30 pasos de la escalera?

  Fn (30) = 53.798.080

Más de 50 millones de dólares, lo que valida aún más la persona es incapaz de completar un cálculo tan grande.

 

Escaleras de estancia título del botón 70a.

Con una tabla de consulta, vamos a ver el expediente:

    

 

Para concluir algoritmo recursivo y una serie de salvedades:

  1. recursivas tres condiciones se deben cumplir:

    a. solución de una solución del problema puede ser descompuesto en varios sub-problemas.

    b. El problema con los sub-problemas después de la descomposición, además de la diferencia de tamaño de los datos, la solución de pensar exactamente lo mismo.

    C. a recursiva condición de terminación.

  2. ¿Cómo escribir código recursivo:

    a. Encontrar la manera de descomponer grandes problemas en pequeños problemas de la ley.

    b. En base a esta escritura fórmula recursiva.

    c. un examen más detallado condición de terminación.

    D. fórmulas de recursión y finalmente se tradujo en una condiciones de terminación de código.

  3.  código recursivo para estar alerta de desbordamiento de pila

  4.  ¿Cómo volver a escribir el código para no recursivo o recursiva codificación de códigos recursivos cómo óptimas

  5. pros y contras recursivas:

    Lee es muy expresivo código recursivo, redactar es muy simple.

    Desventajas es la complejidad espacial es alta , existe el riesgo de desbordamiento de pila , hay una doble contabilización , llamadas a funciones excesivo se consumen mucho tiempo problemas.

 

Sobre siendo este el final del algoritmo recursivo, optimizado con respecto a su artículo de transformación no recursivo y recursivo no explica en profundidad, lo que en el futuro será la de explicar muchas veces.

 

Supongo que te gusta

Origin www.cnblogs.com/teternity/p/DSA_07.html
Recomendado
Clasificación