¿Cuál es la complejidad del tiempo para una solución iterativa de la serie Fibonacci?

Simplemente agregando una respuesta de Michael Veksler ya suficientemente buena a ¿Cuál es la complejidad de tiempo para una solución iterativa de la serie de Fibonacci ?, siempre que tratamos la complejidad en el análisis teórico de la complejidad, la representación del número, como el número de bits siempre cuenta. Esto se debe a que cada vez que arreglamos algún tamaño de registro (o fragmento de memoria) para la representación, siempre podemos encontrar números que no encajan en él.

En cuanto a la práctica, siempre se puede usar otra arquitectura con el doble de memoria y alcanzar un límite razonablemente alto en los números que puede representar. También se puede argumentar razonablemente que cualquier algoritmo que posteriormente use tales números no necesita números más grandes o será razonablemente prohibitivo para que no haya un punto en ejecutarlo.

Todos estos tecnicismos salen por la ventana en el tratamiento teórico.

Obtener una secuencia de Fibonacci de longitud N requiere iteraciones O (N). Pero, con cualquier N razonable, los números ya no se ajustan incluso a enteros de 64 bits. Debido a que los enteros de 64 bits no son suficientes, debe usar algún tipo de representación BigNum, lo que aumenta la complejidad del algoritmo.

El valor del número k-ésimo de Fibonacci, según Wikipedia, es aproximadamente [matemática] 1.62 ^ k / \ sqrt {5} [/ matemática]. A partir de esto, es fácil ver que a partir de k = 94 se debe usar un tipo BigNum. El número de bits necesarios para representar el número k, debe ser aproximadamente k * 0,68. La complejidad temporal para calcular k-ésimo número, es decir, resumiendo sus dos predecesores, también es O (k). Esto es así, a menos que se tome un atajo, como se describe en Wikipedia.

Ahora, dado que la iteración k cuesta O (k), realizar N tales iteraciones, cuando k va de 1 a N, costará [matemática] O (N ^ 2) [/ matemática]. Esto también es la complejidad de memoria requerida para mantener una secuencia de Fibonacci de longitud N.

Para N <94, si utiliza un número entero de 64 bits, el algoritmo actuará y se sentirá como si tuviera una complejidad lineal. Sin embargo, para N> 94 comienza a comportarse como un algoritmo de complejidad cuadrática.

Se considera que la complejidad de la serie iterativa de Fibonacci es el revestimiento O (n), pero el problema surge cuando N es lo suficientemente grande, por lo que generalmente no será lineal. Aquí debe usar el contenedor bigInteger para manejar números grandes y los enteros grandes son lentos porque internamente realiza alguna operación (operación aritmética) y eso también usa algún algoritmo específico.

La complejidad de un bucle que se ejecuta n-2 veces es O (n).

En general, las iteraciones na tienen una complejidad O (n) para valores de n razonablemente mayores que a.

No creo que representar la entrada (n) vaya a tener ningún impacto. Será un número entero positivo y va a iterar n-2 veces, sin importar la cantidad de bits utilizados para representar ese número.

More Interesting

Cómo hacer que mis veranos sean productivos cuando mi interés radica en la codificación competitiva

¿Cuál es el algoritmo para resolver el cubo de Rubik solo para la última esquina?

Noruega: ¿Cómo funciona BankID?

Dada una matriz S de n enteros, ¿hay elementos a, b, c en S tales que a + b + c = 0? ¿Encuentra todos los tripletes únicos en la matriz que da la suma de cero?

¿Es útil leer 5 o más libros para algoritmos, o debería leer solo uno o dos y usar los otros como referencia para algún algoritmo en particular?

¿Qué es el algoritmo A * en inteligencia artificial?

¿Somos solo un algoritmo?

¿En cuánto tiempo puedo ser un profesional en la resolución de problemas en algoritmos y estructuras de datos si empiezo hoy sin ningún conocimiento previo?

Cómo escribir un algoritmo que diseña guiones

¿Cuáles son las aplicaciones más prácticas (vida cotidiana) del algoritmo de agrupación de k-means? ¿Cómo se ha utilizado exactamente k-means en estas aplicaciones?

¿Sigue siendo relevante el modelado de objetos, o se ha reemplazado hoy solo con datos y algoritmos?

¿Qué papel juega la comprensión de los algoritmos y las estructuras de datos en la construcción de proyectos, conseguir un trabajo y hacer su trabajo?

¿Se ha encontrado alguna solución para los problemas de NP completo?

¿Dónde encuentro los mejores recursos para aprender algoritmos y estructuras de datos?

¿Desarrolla algoritmos comerciales después de volver a probar los datos históricos? ¿O debería buscar a través de datos históricos patrones utilizando un algoritmo?