Pregunta: ¿Cuál es la forma "correcta" de interpretar el algoritmo descrito a continuación?
Quería comprobar si mi comprensión del siguiente algoritmo es correcta, ya que no me he "encontrado" con este escenario en el que el bucle for interno, creo, se ve afectado por el valor de $m$ siendo constantemente reducido a la mitad. Si ayuda, los índices van de 1 a $n$ y la entrada es una matriz de enteros, y un tamaño $n$ .
function F(A[.],n)
s <- 0
m <- n
while m > 0
for i <- 1 to m do
s <- s + A[i]
m <- m/2
Según tengo entendido, primero miramos el bucle más interno, que es el bucle for. Por lo tanto, es en $O(m)$ complejidad, ya que itera hasta $m$ . Mirando fuera de este bucle, está el bucle while, que comienza en $n$ pero se redujo constantemente a la mitad, lo que significa que está en $O(logn)$ complejidad. Por lo tanto, la complejidad global es $O(mlogn)$ .
Sin embargo, lo que me hace "tropezar" es que $m$ se está reduciendo a la mitad, eso estaría afectando al bucle for interno, lo que significaría que atraviesa el Array "la mitad" del tiempo, por lo tanto sería $O(logn)$ complejidad. Al igual que antes, el bucle while externo es $O(logn)$ por lo que la complejidad global es $O(logn*logn)$ .
Cómo debería "analizar" este algoritmo, ya que siento que las dos respuestas son "viables" pero la de abajo es la que tiene más "sentido".