int k=1;
while (k<n){
k=k+C //where C is a constant and >=2
}
这需要
(n-1)/C
步骤:设 u = (k-1)/C,然后 k = Cu + 1,语句变为
u=0;
while(u < (n-1)/C) {
u=u+1
}
因此,while循环的时间复杂度为O(n)(因为C是常数)。
编辑:让我尝试另一种解释方式。
从一个虚拟变量u开始。循环如下:
u=0;
while(u < MAX) {
u = u+1
}
运行MAX
次。
当你让MAX = (n-1) / C
时,循环就是这样的:
u=0;
while(u < (n-1)/C) {
u=u+1
}
这将运行(n-1)/C
次。
现在,检查u < (n-1)/C
等同于C*u < n-1
或C*u + 1 < n
,因此循环等同于:
u=0;
while(C*u + 1 < n) {
u=u+1
}
现在,假设我们用变量 k = C * u + 1
来重写这个循环。那么,
u=0;
k=1; // C * 0 + 1 = 1
循环看起来像这样:
while(C*u + 1 < n) {
while(k < n) {
内部条件为
u=u+1
k=k+C //C * (u+1) + 1 = C * u + 1 + C = old_k + C
将所有内容结合在一起:
将所有内容结合在一起:
int k=1;
while (k<n){
k=k+C
}
takes (n-1)/C
steps.