arrow_back回到田野筆記
OFFENSIVE 已發佈 29 Jul 2026

Big O 符號:A-Level 計算機科學實際上期望什麼

A-Level 計算機科學中 Big O 符號的實務講解,包含詳細例題和應試技巧。

Big O 符號出現在每份主要的 A-Level 計算機科學規範中(AQA、OCR、Edexcel),許多學生在這裡栽跟頭不是因為數學困難,而是因為他們從未看過它與實際程式碼的連結。這是一份實務說明,告訴你需要了解什麼,以及如何在考試中回答相關問題而不兜圈子。

Big O 實際測量的是什麼

Big O 描述的是演算法的執行時間(或記憶體使用量)如何隨著輸入大小(通常稱為 n)增加而成長。這不是以秒為單位的碼錶測量。這是一種描述成長速率的方式,讓你能夠獨立於硬體來比較演算法。

當你寫下 O(n) 時,你在說:如果我將輸入加倍,工作量大約也會加倍。O(n²) 代表輸入加倍時工作量大約會增加四倍。這種關係就是審題者想要你識別的,而不是精確的操作計數。

你必須掌握的複雜度

A-Level 考試中,這些複雜度一再出現:

  • O(1) – 常數時間。透過索引存取陣列元素:arr[5]。不管陣列有多大。
  • O(log n) – 對數。在已排序列表上進行二元搜尋。每一步都將搜尋空間減半。
  • O(n) – 線性。單一迴圈遍歷列表,就像線性搜尋逐一檢查每個項目。
  • O(n log n) – 線性對數。Merge sort 和 quicksort(平均情況)都在這個範圍內。
  • O(n²) – 二次方。嵌套迴圈遍歷相同資料,這正是 bubble sort、insertion sort 和 selection sort 所做的。
  • O(2ⁿ) – 指數。沒有記憶化的樸素遞迴 Fibonacci。會迅速變得不可行。

你應該能夠看著虛擬碼,一眼就判斷出它屬於這些中的哪一個,因為這基本上就是考試測試的內容。

讀懂程式碼的複雜度

每次都有效的方法:數出迴圈,看它們如何與 n 相關。

# O(n) - 一個迴圈,單次遍歷
for i in range(n):
    print(i)

# O(n^2) - 嵌套迴圈,都與 n 相關
for i in range(n):
    for j in range(n):
        print(i, j)

# O(log n) - 搜尋空間在每次迭代時減半
low, high = 0, n - 1
while low <= high:
    mid = (low + high) // 2
    if target == arr[mid]:
        break
    elif target < arr[mid]:
        high = mid - 1
    else:
        low = mid + 1

嵌套迴圈其中內層迴圈的範圍取決於 n 仍然是 O(n²),即使看起來稍有不同(像是 for j in range(i) 而不是 for j in range(n) — 整體來說仍然是二次方,只是常數因子不同)。

小心那些完全不取決於 n 的迴圈。一個無論輸入大小多少都總是執行 10 次的迴圈是 O(1),即使有迴圈存在。審題者喜歡在這裡隱藏題目。

常見排序演算法及其 Big O

這是常見的考試主題,因為它同時結合了兩個規範:排序演算法和複雜度。

演算法最佳情況最差情況
Bubble sortO(n)O(n²)
Insertion sortO(n)O(n²)
Merge sortO(n log n)O(n log n)
Binary searchO(1)O(log n)
Linear searchO(1)O(n)

Merge sort 的一致性(最佳和最差情況複雜度相同)如果問題問你為什麼會在大型資料集上選擇它而不選 bubble sort,值得明確提到。Bubble sort 的 O(n) 最佳情況只在有提前退出最佳化時適用,當一次遍歷中沒有發生交換時 — 如果你提到這個,要說出這個細節,因為有些審題機構預期這個。

學生遺失分數的地方

最大的問題:寫

本文由 AI 協助撰寫,經 Michal Pilch(CISSP)審核並發佈,Korra Studio。

準備好更進一步了嗎?

這是 Korra Studio 知識庫中的一篇筆記——該平台將每個主題與一對一的師資配對。

免費開始arrow_forward