int k=1;
while (k<n){
k=k+C //where C is a constant and >=2
}
這將花費(n-1)/C
步驟:寫u =(k-1)/ C。然後,K =銅+ 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
}
採取(n-1)/C
步驟。
你的意思是我
DeCaf
@DeCaf我認爲這是一個錯字 –
請修正問題中的拼寫錯誤,並將其格式保持一致。 – 2011-10-03 17:59:47