int k=1;
while (k<n){
k=k+C //where C is a constant and >=2
}
Questo richiederà (n-1)/C
passi: scrivere u = (k-1)/C. Poi, k = Cu + 1 e la dichiarazione diventa
u=0;
while(u < (n-1)/C) {
u=u+1
}
Da qui il ciclo while è O(n)
(dal C
è costante)
EDIT: Vorrei provare a spiegare il contrario.
Inizia con una variabile fittizia u
. Il ciclo
u=0;
while(u < MAX) {
u = u+1
}
corre MAX
volte.
Quando si lascia MAX = (n-1)/C
, il ciclo è
u=0;
while(u < (n-1)/C) {
u=u+1
}
E che corre (n-1)/C
volte.
Ora, il controllo u < (n-1)/C
è equivalente a C*u < n-1
o C*u + 1 < n
, in modo che il ciclo è equivalente a
u=0;
while(C*u + 1 < n) {
u=u+1
}
Ora, supponiamo che abbiamo riscritto questo ciclo in termini di una variabile k = C * u + 1
. Poi,
u=0;
k=1; // C * 0 + 1 = 1
Il ciclo sembra
while(C*u + 1 < n) {
while(k < n) {
e la condizione interna è
u=u+1
k=k+C //C * (u+1) + 1 = C * u + 1 + C = old_k + C
Mettere tutto insieme:
int k=1;
while (k<n){
k=k+C
}
prende (n-1)/C
passi.
Vuoi dire che
DeCaf
@DeCaf Suppongo che era un errore di battitura –
Si prega di correggere gli errori nella domanda e formattarlo in modo coerente. –