比Big-Oh時,把summation展開,然後所有項目換成最後一項的和項,因為0到n都是正數(計算的都是程式的執行次數,所以沒有負數),所以換完一定會大於等於原來的summation。

Question

成大109資工 時間複雜度題目 1

Question

Please derive the corresponding time complexity (Big-Oh) for each of the following five program segments.

exercise


k=0;
  for(i=0;i<N; i++)
    k++;

ans

\( \displaystyle\sum_{i=0}^{N-1}1 =\overbrace{1+1+\dots+1}^{N\text{ terms}} \)
\( =N=O(N) \)

exercise


k=0;
  for(i=0;i<N;i++)
    for(j=0;j<N;j++)
      k++;

ans

\( \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{j=0}^{N-1} 1 =\displaystyle\sum_{i=0}^{N-1}(\overbrace{1+1+\dots+1}^{N\text{ terms}}) =\displaystyle\sum_{i=0}^{N-1}N \)
\( =(\overbrace{N+N+\dots+N}^{N\text{ terms}}) =N\cdot N=N^2=O(N^2) \)

exercise


k=0;
  for(i=0;i<N;i++)
    for(j=0;j<i;j++)
      k++;

ans

\( \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{j=0}^{i-1} 1 = \displaystyle\sum_{i=0}^{N-1} (\overbrace{1+1+\dots+1}^{i\text{ terms}}) = \displaystyle\sum_{i=0}^{N-1}i \)
\( = 0+1+2+\dots+(N-1) \leq (\overbrace{(N-1)+(N-1)+\dots+(N-1)}^{N\text{ terms}}) =N(N-1) \)
\( =N^2-N=O(N^2) \)

exercise


k=0;
  for(i=0;i<N;i++)
    for(j=0;j<i*i;j++)
      for(z=0;z<j;z++)
        k++;

ans

\( \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{j=0}^{i^2-1} \displaystyle\sum_{z=0}^{j-1} 1 = \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{j=0}^{i^2-1} j \)
\( \displaystyle\sum_{i=0}^{N-1} (\overbrace{0+1+2+\dots+(i^2-1)}^{i^2\text{ terms}}) \leq \displaystyle\sum_{i=0}^{N-1} (i^2-1)\times i^2 \)
\( = \{(0^2-1)\cdot 0^2+(1^2-1)\cdot 1^2+\dots+[(N-1)^2-1]\cdot (N-1)^2\} \)
\( \leq \{\underbrace{[(N-1)^2-1]\cdot (N-1)^2+[(N-1)^2-1]\cdot (N-1)^2+\dots+[(N-1)^2-1]\cdot (N-1)^2}_{N\text{ terms}}\} \)
\( = N[(N-1)^2-1]\cdot (N-1)^2 =O(N^5) \)

exercise


k=0;
  for(i=0;i<N;i++)
    for(j=0;j<i*i;j++)
      if(j%i==0)
        for(z=0;z<j;z++)
          k++;

ans

先看最內層z的那層, 計算k的執行次數為
\( \displaystyle\sum_{z=0}^{j-1}1 =j \)次

討論 if(j%i==0)
如果要z那層執行的話, 需要j為i的倍數,
則j可能為
\( 0\cdot i,\;1\cdot i,\;2\cdot i,\dots,\;(i-1)\cdot i \)
意思就是
\( j=0 \)時,k執行0次,
\( j=1\cdot i \)時, k執行\(1\cdot i\)次
\( j=2\cdot i \)時, k執行\(2\cdot i\)次
\( \vdots \)
\( j=(i-1) \cdot i\)時, k執行\((i-1) \cdot i\)次


就可得到j的for loop那層以下(意思是已經包含if和z那層了)的summation(這是k++的執行次數)為
\( \displaystyle\sum_{h=0}^{i-1}h\cdot i \)

接著考慮加上i那層的for loop 為
\( \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{h=0}^{i-1}h\cdot i \)

開始計算Big-Oh
\( \displaystyle\sum_{i=0}^{N-1} \displaystyle\sum_{h=0}^{i-1}h\cdot i = \displaystyle\sum_{i=0}^{N-1} [\overbrace{0i+1i+2i\dots+(i-1)i}^{i\text{ terms}}] \)
\( \leq \displaystyle\sum_{i=0}^{N-1} [\overbrace{(i-1)i+(i-1)i+\dots+(i-1)i}^{i\text{ terms}}] \)
\( = \displaystyle\sum_{i=0}^{N-1} [(i-1)i]\cdot i = \displaystyle\sum_{i=0}^{N-1} [(i^3-i^2)] \)
\( = \overbrace{(0-0)+(1^3-1^2)+(2^3-2^2)+\dots+[(N-1)^3-(N-1)^2]}^{N\text{ terms}} \)
\( \leq \overbrace{[(N-1)^3-(N-1)^2]+\dots+[(N-1)^3-(N-1)^2]}^{N\text{ terms}} \)
\( = N[(N-1)^3-(N-1)^2]=O(N^4) \)

Question

Let \( T(n)=\theta(f(n)) \). Derive \( f(n) \) in the simplest formula for \( T(n)=1*n+2(n-1)+\dots+(n-1)*2+n*1 \)

ans

觀察\( T(n) \)規律,
得出summation為
\( T(n)= \displaystyle\sum_{k=1}^{n}k\cdot(n-k+1) \)
計算\( \Theta \):
\( \displaystyle\sum_{k=1}^{n}kn-k^2+k \)
(式子裡的n為常數)
\( = n\displaystyle\sum_{k=1}^{n}k - \displaystyle\sum_{k=1}^{n}k^2 + \displaystyle\sum_{k=1}^{n}k \)
\( = n\cdot\frac{n(n+1)}{2} - \frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2} \)
\( = \frac{n^3+n^2}{2} - \frac{n(n+1)(2n+1)}{6} + \frac{n^2+n}{2} \)
由經驗法則猜測為\( T(n)=\Theta(n^3) \)
討論\( n^3 \)係數是否為零,如果不是零, 那\( T(n)=\Theta(n^3) \)是對的。
\( \rightarrow \frac{n^3}{2}-\frac{2n^3}{6} =\frac{n^3}{6} \)
\( \therefore T(n)=\Theta(n^3) \)

Question

Let \( T(n)=\Theta(f(n)) \). Derive \( f(n) \) in the simplest formula for \( T(n)=2^0*k+2^1*(k-1)+\dots+2^k*(k-k) \); where \( 2^k=n \)

ans

Hint
\( \log_2a=\lg a \)
\( 2^k=n\)
\( \Rightarrow \lg2^k=\lg n \)
\( \Rightarrow k=\lg n \)

代進T(n)的k:
\( T(n) = 2^0\cdot\lg n + 2^1\cdot(\lg n-1) + \dots + 2^{\lg n}\cdot(\lg n-\lg n) \)
這似乎很難用最後一項去比大小。

所以另解
\( T(n) = 2^0\cdot\lg n + 2^1\cdot(\lg n-1) + \dots + 2^{\lg n}\cdot(\lg n-\lg n) \)
\( 2T(n) = 2^1\cdot\lg n + 2^2\cdot(\lg n-1) + \dots + 2^{\lg(n)+1}\cdot(\lg n-\lg n) \)

兩式相減得
\( 2T(n)-T(n) =T(n) = 2^1 + 2^2 + \dots + 2^{\lg n} + 2^{\lg(n)+1}\cdot(\cancelto{0}{\lg n-\lg n}) - 2^0\cdot\lg n \)
\( = 2^1+2^2+\dots+2^{\lg n} -2^0\cdot \lg n \)
Hint
\( c\neq1,c\in R,\)
\( a_n=ca_{n-1},\)
\( a_1+a_2+\dots+a_n\)
\( =a_1\frac{c^n-1}{c-1} \)
\( a^{\log_{a}^{x}}=x \)

\( \Rightarrow 2\frac{2^{\lg n}-1}{\cancelto{1}{2-1}} -2^0\cdot \lg n \)
\( = 2\cdot(2^{\lg n}-1) -\cancelto{1}{2^0}\cdot\lg n \)
\( = 2\cdot(n-1) -\lg n \)
\( =\Theta(n) \)