int k=1;
while (k<n){
k=k+C //where C is a constant and >=2
}
Esto se llevará a (n-1)/C
pasos: escribir u = (k-1)/C. Entonces, k = Cu + 1 y la declaración se convierte en
u=0;
while(u < (n-1)/C) {
u=u+1
}
De ahí que el bucle while es O(n)
(ya C
es constante)
EDIT: voy a tratar de explicarlo a la inversa.
Comience con una variable ficticia u
. El ciclo
u=0;
while(u < MAX) {
u = u+1
}
ejecuta MAX
veces.
Cuando dejas MAX = (n-1)/C
, el bucle es
u=0;
while(u < (n-1)/C) {
u=u+1
}
Y que corre (n-1)/C
veces.
Ahora, el cheque u < (n-1)/C
es equivalente a C*u < n-1
o C*u + 1 < n
, por lo que el bucle es equivalente a
u=0;
while(C*u + 1 < n) {
u=u+1
}
Ahora, supongamos que reescribimos este bucle en función de una variable k = C * u + 1
. Entonces,
u=0;
k=1; // C * 0 + 1 = 1
El bucle se parece
while(C*u + 1 < n) {
while(k < n) {
y la condición interna es
u=u+1
k=k+C //C * (u+1) + 1 = C * u + 1 + C = old_k + C
Poniendo todo junto:
int k=1;
while (k<n){
k=k+C
}
toma (n-1)/C
pasos.
¿Quiere decir i
DeCaf
@DeCaf Supongo que fue un error tipográfico –
Corrija los errores tipográficos en la pregunta y formatéela de forma coherente. –