Estoy tratando de averiguar la complejidad de un bucle for utilizando la notación Big O. He hecho esto antes en mis otras clases, pero este es más riguroso que los otros porque está basado en el algoritmo real. El código es el siguiente:Complejidad de un doble para el bucle
for(cnt = 0, i=1; i<=n; i++) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
Y
for(cnt = 0, i=1; i<=n; i*=2) //for any size n
{
for(j = 1; j <= i; j++)
{
cnt++;
}
}
me han llegado que el primer bucle es de O (n) la complejidad, ya que va a través de la lista de n veces. En cuanto al segundo ciclo, estoy un poco perdido. Creo que está pasando por el ciclo i veces por cada n que se prueba. He asumido (incorrectamente) que esto significa que el ciclo es O (n * i) cada vez que se evalúa. ¿Hay algo que me falta en mi suposición? Sé que cnt ++ es un tiempo constante.
Gracias por la ayuda en el análisis. Cada bucle está en su propio espacio, no están juntos.
La primera muestra no está en O (n), ¿ha intentado imprimir cnt después de los bucles usando valores diferentes para n? – Kwariz
@Kwariz Me disculpo. Quise decir que el primer bucle más externo en el primer ejemplo es O (n). No toda la colección de doble para bucles en el primer ejemplo. –