Complejidad del algoritmo: bucle for dentro del bucle while; decreciendo por el factor 2

Pregunta: ¿Cuál es la forma "correcta" de interpretar el algoritmo que se describe a continuación?

Quería comprobar si mi comprensión del siguiente algoritmo es correcta, ya que no he "encontrado" este escenario en el que el bucle for interno, creo, se ve afectado por el valor de metro siendo constantemente reducido a la mitad. Si ayuda, los índices van de 1 a norte , y la entrada es una matriz de enteros, y un tamaño norte .

function F(A[.],n)
    s <- 0
    m <- n
    while m > 0
        for i <- 1 to m do
            s <- s + A[i]
        m <- m/2

Tengo entendido que miramos primero el ciclo más interno, que es el ciclo for. Por lo tanto, está en O ( metro ) complejidad, ya que itera hasta metro . Mirando fuera de este ciclo, está el ciclo while, que comienza en norte pero constantemente se redujo a la mitad, lo que significa que está en O ( yo o gramo norte ) complejidad. Por lo tanto, la complejidad general es O ( metro yo o gramo norte ) .

Sin embargo, lo que me "hace tropezar" es porque metro se está reduciendo a la mitad, eso estaría afectando el bucle for interno, lo que significaría que atraviesa la matriz "la mitad" del tiempo, por lo tanto, sería O ( yo o gramo norte ) complejidad. Como antes, el ciclo while externo es O ( yo o gramo norte ) , por lo tanto, la complejidad general es O ( yo o gramo norte yo o gramo norte ) .

¿Cómo debo "analizar" este algoritmo, ya que siento que las dos respuestas son "viables" pero la de abajo tiene más "sentido".

Respuestas (1)

PISTA

Su complejidad resumida es (asumiendo norte = 2 pag )

k = 1 pag ( 3 2 k + 1 )

¿Puedes sumar la serie geométrica y convertir el resultado en norte ?


ACTUALIZAR

Para responder a su pregunta en los comentarios, cada iteración del bucle for interno consta de 3 operaciones: A[i]búsqueda de valor s += A[i]e i += 1(incremento de índice de bucle). Supongo +=que es atómico, es decir, cuenta como una operación, si en realidad está implementando la asignación y la suma por separado, serán 2 operaciones cada una, por lo tanto, 5 operaciones en total.

Finalmente, se necesita una iteración del ciclo externo m /= 2con el check m > 0, que también asumo que es atómico. De lo contrario, necesitaría 3 operaciones aquí, y todo el ciclo sería 5 2 k + 3 en cambio.

Hola gt, gracias por eso. Me pregunto, pero ¿de dónde vienen estos valores? (Mi interpretación es que 2 k es el O ( yo o gramo norte ) , y pag es el límite superior de la ecuación que es O ( yo o gramo norte ) pero transpuesto es norte = 2 pag , pero no estoy seguro de dónde provienen el 3 y el +1). Gracias de nuevo por su ayuda, muy apreciada.
@WhatToDisplay encantado de ayudar, vea la actualización detallada de la respuesta