《資料結構的C++偽碼實現》(《DATA STRUCTURES A Pseudocode Approach with C++》)讀書筆記(三) (轉)

amyz發表於2007-08-16
《資料結構的C++偽碼實現》(《DATA STRUCTURES A Pseudocode Approach with C++》)讀書筆記(三) (轉)[@more@]

演算法(Algorithm efficency)

  首先提出來演算法效率的學習是建立在迴圈上面的。(The study of algorithm efficency focuses on ls)
 
  1,線形迴圈(linear loops)
  先看一段程式碼:
  1  i=1
  2  loop (i <= 1000)
  1  application code
  2  i=i+2
  3 end loop
  顯然這個迴圈內部的語句會1000/2次,換句話說我們如果把1000換成n的話,這個迴圈次數為n/2,我們用
 
  f(n)=n/2
  來表示
 
  2,對數迴圈(logarithmic loops)
  先看一段程式碼:
   1  i=1
  2  loop (i <= 1000)
  1  application code
  2  i=i * 2
  3 end loop
  這裡我們把i=i+2改為了i=iX2,因此在執行時
 
  multiply  2**iterations<1000
  div  1000/2**iterations>=1

 
  我們可以得出這個迴圈的次數是對數級的f(n)=┍log2(n)┑

  3,巢狀迴圈(nested loops)
  巢狀迴圈的執行次數為:iterations=outer iterations X inner iterations
  例如:
  1  i=1
  2  loop(i<=10)
  1  j=1
  2  loop(j<=10)
  1  application code
  2  j=j*2
  3  end loop
  4  end loop
  3  i=i+1

顯然這個演算法的效率就是10*┌log2(n)┐也就是f(n)=┍nlog2(n)┑,當然我們可以的到平方(quadratic)演算法,f(n)=n**2;

  4,現在我們用Big-O法來表示這些演算法的效率
  可以分為兩步:
  a,把每一個效率公式的係數設為1
  b,只留下最高次數的項
  例如:
  11n**2+7n  //我們可以得到效率為:n**2記為O(n**2)

  七種標準效率衡量資料由小到大為O(log2(n)),O(n),O(nlog2(n)),O(n**2),O(n**K),O(c**n),O(n!)

(to be continued)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962689/,如需轉載,請註明出處,否則將追究法律責任。

相關文章