1. 程式人生 > >資料結構與演算法學習筆記 4 (2018.10.08)

資料結構與演算法學習筆記 4 (2018.10.08)

漸進分析:大o記號

  • 回到原先的問題:隨著問題規模的增長,計算成本如何增長?

        注意:這裡更關心足夠大的問題,注重考察成本的增長趨勢

  • 漸進分析:在問題的規模足夠大後,計算成本如何成長?

            Asymptomatic analysis :當n>>2後,對於規模為n輸入,演算法

                                                         需執行的基本操作次數:T(n)=?

                                                          需佔用的儲存單元數:S(n)=? //通常可不考慮,為什麼?

橫軸(n)表示問題的規模,縱軸(f(n))表示相應的計算成本。

不需要關注區域性的,暫時的一些趨勢,而是看長遠的,主要的變化趨勢,個人理解為大的方向。

漸進分析:大o記號

漸進分析:其它記號

用的最多的是大 o 記號。

o(1)

  • 常數(constant function)

                     2 = 2013 = 2013×2013 = o(1),甚至 2013^{2013} = o(1) //含RAM各基本操作

  • 這類演算法的效率最高                                                                   //不能奢望不勞而獲
  • 什麼樣的程式碼段對應於常數執行時間?                                   //應具體分析

                     一定不含迴圈?不一定。

                             for (i=0; i<n; i+=n/2013 + 1);

                             for(i=1; i<n; i=i <<i);                                                                  //long‘n,幾乎常數

                     一定不含分支轉向?不一定。

                          if((n+m)*(n+m)<4*n*m)  goto UNR EACHABLE;                 //不考慮溢位

                     一定不能有(遞迴)呼叫?不一定。

                         if (2== (n*n) % 5) o1(n);

o(log^{c}n

o(n^{c}

o(2^{n}

2-Subject