Cómo calcular el gran espacio O de una pila en problemas de retroceso

El espacio en la pila en la mayoría de los casos se puede calcular usando la fórmula:

[matemáticas] F () = altura * f () [/ matemáticas]

dónde

[math] height [/ math] – altura máxima del árbol de recursión,

[matemática] f () [/ matemática] – espacio de pila adicional asignado en cada llamada recursiva

Aparentemente, la altura del árbol de recursión depende del algoritmo en sí mismo, aunque a partir de su descripción es [matemática] N [/ matemática] llamadas recursivas consecutivas. Para algoritmos como la combinación de clasificación, la altura es [matemática] log (n) [/ matemática] en el peor de los casos donde [matemática] n [/ matemática] es la longitud de la matriz que se clasificará.

La mayoría de las veces, cada llamada recursiva utiliza un espacio adicional constante en la pila para almacenar argumentos de función y variables locales junto con la dirección de retorno guardada implícitamente. Aunque podría haber algoritmos que usan una cantidad no constante de espacio extra para cada llamada recursiva, son bastante posteriores.

Por lo general, el número de opciones [matemáticas] M [/ matemáticas] para que el algoritmo se ramifique no afecta la cantidad de pila asignada, por lo tanto, no tiene influencia en el espacio adicional de la pila general. Un ejemplo de cuándo [matemática] M [/ matemática] puede influir en [matemática] f () [/ matemática] es cuando crea una matriz con longitud [matemática] M [/ matemática] en cada llamada recursiva y guarda el resultado de cada de las opciones de esta matriz para usarla más adelante en esta llamada recursiva.

Si entendí correctamente en tu ejemplo:

[matemáticas] altura = N, [/ matemáticas]

[matemáticas] f () = O (1) [/ matemáticas]

Por lo tanto, la cantidad de espacio de pila adicional utilizada por el algoritmo en la descripción es:

[matemáticas] F () = N * O (1) = O (N) [/ matemáticas]

More Interesting

¿Cuál es el significado de usar una cola prioritaria en el algoritmo de Dijkstra? ¿Qué diferencia hay si usamos una cola normal?

¿Para qué sirven los bordes traseros en el algoritmo Ford-Fulkerson?

¿Es posible usar los poderes de una matriz de adyacencia para calcular las rutas más cortas que BFS calcularía?

¿Hay algún buen sitio para aprender algoritmos / conceptos de programación todos los días (similar a la pregunta SAT del día)?

¿Alguna vez has usado los algoritmos que has aprendido en la universidad?

Recientemente me enamoré de las estructuras de datos y algoritmos. ¿Qué idioma (s) y qué rama (s) de matemáticas le servirían mejor y qué tipo de trabajos de entrada debería buscar una vez que lo lleve a un nivel decente, unos 4-6 meses después?

¿Cuál es el mejor libro sobre estructuras de datos y algoritmos en Java?

¿Por qué los marcos para componer música aleatoria algorítmica como SoundHelix no son más populares?

¿Cuáles son algunas explicaciones intuitivas / sencillas de los algoritmos estándar?

¿Qué es un filtro de Kalman?

¿Cuáles son algunos lenguajes de programación que me permiten visualizar algoritmos?

Soy un desarrollador web que trabaja en el marco Python Django durante el año pasado. ¿Puedo aprender estructuras de datos y algoritmos si paso solo 2-3 horas diarias?

¿Por qué la agrupación aleatoria al iterar sobre ella y cambiarla por un elemento aleatorio entre 0 y el último elemento de la matriz no produce una barajadura distribuida uniformemente?

¿Qué es un algoritmo para aprender nuevos lenguajes de programación?

Tengo 23 años. ¿Es demasiado tarde para estudiar la introducción a algoritmos por CLRS?