¿Cuál es la complejidad del siguiente código y explica por qué?

Es O (n log n). La razón:

Suponga que “j” toma los pasos “k” para llegar a n. Es entonces cuando las condiciones del bucle se vuelven falsas y salimos del bucle. Cuando j alcanza n , el nuevo valor de j dado por j = 2 * j es (2 ^ k) .

Pero como j <n podemos presumir con seguridad (2 ^ k)> n.
Tome el registro en ambos lados:
Entonces la inecuación se convierte en k> log n

eso significa que k es una función que es mayor que log n. Por lo tanto, sabemos que al menos k tiene la forma Omega (log n) como k upperbounds log n .

Sin embargo, ahora tenemos que considerar el ciclo i en la ecuación. I loop se ejecuta hasta n, que es al menos n veces. Por lo tanto, k tiene que ir hacia arriba i y log n para retener su forma Omega. Pero no lo hace. Por lo tanto, k <i log n, que no es más que k <n log n.

Y esto reduce la ecuación a k = O (n log n), que es la complejidad temporal del algoritmo.

Para un valor dado de ‘n’, el bucle externo itera n veces.

Para cada iteración del bucle externo, el bucle interno ejecuta log n (base 2) veces.

Por lo tanto, la complejidad del código: –

Theta (n log n)

La complejidad del tiempo sería:

Bucle exterior -> n veces siempre.

Bucle interno -> log (n) siempre (base 2).

Por lo tanto, Complejidad del tiempo => O (nlog (n))