資料結構與演算法學習筆記 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),甚至 = 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);