Evanalysis
2.1有來源支持嵌入式互動預計閱讀時間: 1 分鐘

2.1 複雜度增長與演算法成本

在寫程式前先嚴格比較 O(1)、O(log n)、O(n)、O(n log n)、O(n^2) 的增長。

筆記系列

CSCI2520:資料結構

針對 CSCI2520 資料結構基礎的結構化筆記,重視操作層級推理與選擇性互動示範。

章節 1

ADT 與操作語義

由 ADT 規格走向 stack/queue 實作中的操作行為。

章節 2

複雜度與排序

漸進增長、成本比較與面向排序的複雜度推理。

為甚麼先做複雜度分析

漸進分析回答的是「輸入變大時成本如何放大」。它比常數項調整更能決 定演算法是否可擴展。

定義

Big-O 上界

T(n)=O(f(n))T(n)=O(f(n)) 表示存在常數 C>0C>0n0n_0,使得對所有 nn0n\ge n_0 都有 T(n)Cf(n)T(n)\le C f(n)

邊讀邊試

在同一 n 比較漸進增長

在同一 n 下比較多種級別,讓相對增長差距具體化。

ClassValue at n=16
O(1)1.00
O(log n)4.00
O(n)16.00
O(n log n)64.00
O(n^2)256.00

常見級別

  • O(1):直接存取、已知節點的 pointer 重連
  • O(log n):對半縮減搜尋
  • O(n):線性掃描
  • O(n log n):分治加線性合併
  • O(n2)O(n^2):雙層線性迴圈

快速檢查

快速檢查

兩層各跑 n 次的迴圈(內部 O(1))是甚麼複雜度?

直接乘法則。

解答

答案