Cuando observa este tipo de problemas, observa qué aporta cada parte del código. Si tiene algo dentro de un ciclo, su complejidad se multiplica por la complejidad del ciclo.
Si tiene un ciclo que se ejecuta y finaliza, entonces otro ciclo que se ejecuta, suma sus complejidades (lo que significa que obtendrá la mayor de las dos complejidades).
# 1: tienes un bucle externo y un bucle interno. Mira cuántas veces se puede ejecutar el bucle externo.
Si n es positivo, el bucle externo se ejecutará una vez. j comienza como n, luego se divide por 3. El resultado es menor que n, por lo que el ciclo ya no se ejecuta. Como el número de bucles no varía con n, lo ignoraremos para descubrir la complejidad. Comenzamos como O (1), y esto no aporta nada, así que seguimos siendo O (1).
- ¿Cuáles son las raíces cúbicas de 1?
- ¿En qué campo de las matemáticas debería entrar si quiero estudiar la topología de las estructuras algebraicas?
- ¿Cómo se puede probar que [matemáticas] \ prod \ limits_ {k = 1} ^ {n-1} \ sin \ left (\ frac {k \ pi} {n} \ right) = \ frac {n} {2 ^ {n-1}} [/ matemáticas]?
- ¿Qué tan importante es la teoría de la representación para la geometría algebraica y la topología algebraica?
- Cómo resolver 2 ^ x = x ^ 2 para sus tres soluciones reales
Si n es negativo, es una historia diferente. j comienza como n, luego se divide por 3. El valor nunca más es menor que n, por lo que el bucle externo se ejecuta para siempre. Este es probablemente un problema con la definición del problema. Eso significa que esto ya no es un algoritmo, porque no se garantiza que termine en un tiempo finito.
Pero ignorando eso y volviendo a la tierra positiva, el ciclo interno se ejecuta una vez, donde j == n. Se repite n veces. Eso contribuye n. Si nuestra complejidad hubiera sido O (n ^ 2), ahora sería O (n ^ 3). Pero era solo O (1), por lo que ahora es O (n), que es el resultado final. (Pero todavía no es un algoritmo y esta no es realmente una respuesta válida).
# 2: Para n = 2, el ciclo comienza a suceder.
EDITAR:
El número de veces que el ciclo pasa al # 2 es log (n), ya que se multiplica cada vez. (Originalmente dije que era proporcional a n. Leí mal el * como un +.) Gracias Jeff Little.