第一章习题 1. 𝑛 5. 𝑐 = 𝑐𝑛2 i = n; while(i > 1) i=i/2; for语句内,𝑗在第𝑘次循环后的值为 𝑗𝑘 = 2𝑘 𝑖 𝑖在第𝑘次循环后的值为 𝑖𝑘 = 𝑛 令𝑗𝑘 < 𝑛,得 2𝑘 𝑘 < log2 令𝑖𝑘 > 1,得 𝑘 < log2 𝑛 𝑛 𝑖 要使𝑘为最大整数,则 要使𝑘为最大整数,则 𝑘 = log2 𝑘 = ⌊log2 𝑛⌋ 𝑛 𝑖 则循环次数为 则循环次数为 log2 ⌊log2 𝑛⌋ + 1 则 𝑛 +1 𝑖 则 ⌊log2 𝑛⌋+1 𝑇 (𝑛) = 𝑛−1 log2 𝑐 = 𝑐(⌊log2 𝑛⌋ + 1) 𝑂 = 𝑂(log 𝑛) =𝑐 𝑛 𝑛 𝑘=1 𝑛−1 5 1 ± (𝑛 − 1) + (⌊log2 𝑛⌋ − ⌊log2 𝑖⌋) 2 2 𝑖=1 9 1 ± (𝑛 − 1) + (𝑛 − 1)⌊log2 𝑛⌋ − 𝑛⌊log2 (𝑛 − 1)⌋ − 2 2 2 当𝑛 → ∞时,含(𝑛 − 1)的项占主导, 𝑛 𝑇 (𝑛) = =𝑐 +1 𝑐 𝑖=1 for(i = 1; i <= n; i++) for(j = 1; j <=n; j++) for(k = 1; k <= n; k++) x++; 𝑛 𝑖 𝑇 (𝑛) = 𝑘=1 𝑐 = 𝑐𝑛 𝑖=1 𝑗=1 𝑘=1 𝑂 = 𝑂 𝑛3 4. 𝑘=1 for(i = 1; i < n; i++) { j = i; while(j < n) j *= 2; } 𝑂 = 𝑂 𝑛2 3. 𝑐 = 𝑐 𝑛2 + 𝑛 𝑂 = 𝑂 𝑛2 𝑖=0 𝑗=0 2. 𝑛 𝑐+ 𝑖=1 𝑗=1 𝑛−1 𝑛−1 𝑇 (𝑛) = 𝑛 𝑇 (𝑛) = for(i = 0; i < n; i++) for(j = i; j < n; j++) x++; for(i = 1; i <= n; i++) for(j = 1; j <=n; j++) x++; for(k = 1; k <= n; k++) x++; 3 𝑂 = 𝑂(𝑛)