¿Cómo se puede observar fácilmente que la complejidad temporal del código escrito es exponencial?

No estoy seguro de cómo derivar las complejidades, pero puedo darle 2 ejemplos que tienen complejidades exponenciales:

1) Relación lineal con más de 1 términos en recursividad :
Por ejemplo, series de Fibonacci.
El algoritmo ingenuo y recursivo para calcular el enésimo término de fibonacci requiere el cálculo de los términos (N-1) th y (N-2) th.
Digamos, T (n) es el tiempo necesario para calcular el enésimo término. Ahora puedes decir,

T (n) = T (n-1) + T (n-2)

ahora, ¿cuál es la solución a la ecuación anterior? Podemos decir que x ^ n satisface la ecuación anterior, si,

x ^ n = x ^ (n-1) + x ^ (n-2)
x ^ 2 = x + 1 // descartando la solución trivial x = 0.
resolver para x da x = (1 + sqrt (5)) / 2. La otra raíz es negativa y el tiempo empleado no puede ser negativo, por lo que se descarta esa raíz.

Lo que dice que T (n) = {(1 + sqrt (5)) / 2} ^ n. Tenga en cuenta que este es un número> 1 y elevado a la potencia de n. ¡Esto es exponencial!

2) Permutaciones informáticas :
El algoritmo es dejar los elementos del primer término y el resto de permuta (N-1). Por cada permutación, se generan N permutaciones al colocar el primer término en todos los lugares posibles.
Si, T (n) es el tiempo necesario para calcular permutaciones para elementos (N), entonces podemos decir,

T (n) = nT (n-1)

La solución a la ecuación anterior es
T (n) = n!

Ahora, esto todavía no es exponencial, pero puedes demostrar que n! es de hecho equivalente a 2 ^ n. Ver aproximación de Stirling

Puede (de hecho debería) derivar todas las complejidades de la manera anterior.
Para darle otro ejemplo de la misma técnica (esto no es exponencial), puede intentar derivar O (N log N) de tipo de fusión:
Algo: Ordena los elementos primero (N / 2) y último (N / 2) por separado y luego se necesitan N comparaciones para obtener la matriz ordenada final.
Por lo tanto,

T (n) = T (n / 2) + T (n / 2) + n
T (n) = 2T (n / 2) + n.

La solución a lo anterior es:
T (n) = n log n

El análisis algorítmico es un campo complejo, por lo que tales heurísticas analíticas son claramente eso: heurística, escalones para usar en la evaluación de un algoritmo. Pero aquí hay algunas cosas que puede buscar al intentar determinar si un algoritmo es exponencial.

  • Cualquier cosa que tenga que ver con combinaciones o permutaciones.
  • En la misma línea, cualquier cosa que tenga que ver con subconjuntos.
  • La búsqueda en un gráfico infinito implícito tiende a ser exponencial según el factor de ramificación de su gráfico.
  • ¡Todo lo que cuenta ! ¡Recuerde que determinamos la complejidad en función del tamaño de entrada, como en bits! Si un algoritmo está limitado por lo grande que es el valor de un número de entrada, ¡está limitado por el exponente del tamaño de entrada!

More Interesting

Cómo aumentar mis habilidades en programación dinámica

Si hago algunos cálculos iterando sobre el bucle mientras tomo las entradas. A partir de entonces, imprimiendo el resultado. ¿Puedo decir que es O (1) complejidad?

¿Qué es el algoritmo Google Panda?

¿BFS es más rápido y más eficiente que DFS?

¿Debo aprender a diseñar estructuras de datos antes de aprender sobre algoritmos?

¿Cuál es el punto de los algoritmos gráficos?

Cómo mejorar en algoritmos, estructuras de datos y programación competitiva, solo por puro aprendizaje, así como por ubicaciones en empresas de primer nivel, en un año

Agregue dos números en la hoja1, luego vea mi respuesta en la hoja2. ¿Cómo hago eso en Excel?

¿Por qué es importante almacenar y organizar datos de manera eficiente dentro de estructuras específicas al programar?

¿Por qué necesitamos el término de sesgo en algoritmos ML como la regresión lineal y las redes neuronales?

¿Cómo se puede resolver el coeficiente binomial usando programación dinámica y tabla hash?

Dado un gráfico ponderado de N nodos, ¿existe un algoritmo que calcule la ruta más corta entre todos los nodos?

¿Cuál es la mejor estructura de datos para un juego de ajedrez?

No puedo desempeñarme bien en los concursos de programación, incluso después de practicar mucho. ¿Qué debería hacer ahora? ¿Debo dejar de hacer programación competitiva?

¿Por qué mi solución C ++ al problema SPOJ.com - Problema DIVSUM2 muestra un error?