🚀 演算法必修:一篇搞懂 Big O Notation!

更新 發佈閱讀 6 分鐘

軟體工程師職涯升級計畫啟動!立即預約職涯諮詢、履歷健檢或模擬面試👈,為您的加薪做好準備!


🤔 為什麼要懂 Big O?

在技術面試中,寫出能跑的程式只是基本,真正的關鍵是:

  • 你的程式現在的 時間複雜度 (Time Complexity) 是多少?
  • 當資料變大時,效能會怎麼變?
  • 你能不能再優化?

懂 Big O,就像懂「演算法的語言」。沒有這個基礎,談優化就像盲劍客亂揮劍。


Big O 是什麼?

Big O Notation:描述一個演算法在「最壞狀況」下,執行時間隨輸入資料量成長的速度。

常見的三種情境:

  • 🟢 Best Case(最佳狀況)
  • 🔴 Worst Case(最壞狀況 → Big O 主要關注)
  • 🟡 Average Case(平均狀況,較接近真實情境)

🔑 常見時間複雜度

O(1) — Constant Time

無論輸入多大,執行時間都一樣。

function getFirst(arr) {
return arr[0]
}

console.log(getFirst([10, 20, 30])) // 10
console.log(getFirst([99, 88, 77, 66, 55])) // 99

O(n) — Linear Time

輸入增加,執行時間也等比例增加。

function printAll(arr) {
for (let item of arr) {
console.log(item)
}
}

printAll([1, 2, 3])
// 輸出: 1, 2, 3
printAll([1, 2, 3, 4, 5, 6])
// 輸出: 1, 2, 3, 4, 5, 6

O(n²) — Quadratic Time

巢狀迴圈最常見,輸入越大,效能急速下降。

function printPairs(arr) {
for (let i of arr) {
for (let j of arr) {
console.log(`(${i}, ${j})`)
}
}
}

printPairs([1, 2, 3])
// 共 9 組組合

O(log n) — Logarithmic Time

常見於「二分法」演算法,例如 Binary Search

function binarySearch(arr, key) {
let low = 0, high = arr.length - 1
while (low <= high) {
let mid = Math.floor((low + high) / 2)
if (arr[mid] === key) return mid
arr[mid] < key ? low = mid + 1 : high = mid - 1
}
return -1
}

console.log(binarySearch([1,2,3,4,5], 3)) // index 2

每次對半切,資料越大,效率優勢越明顯。


O(n log n) — Divide & Conquer

常見於排序演算法:Merge Sort、Quick Sort

  • 拆分:O(log n)
  • 合併:O(n)
  • 總和:O(n log n)
// 簡化版 Merge Sort
function mergeSort(arr) {
if (arr.length <= 1) return arr
let mid = Math.floor(arr.length / 2)
let left = mergeSort(arr.slice(0, mid))
let right = mergeSort(arr.slice(mid))
return merge(left, right)
}

function merge(left, right) {
let result = []
while (left.length && right.length) {
result.push(left[0] < right[0] ? left.shift() : right.shift())
}
return [...result, ...left, ...right]
}

console.log(mergeSort([5, 3, 8, 2, 1, 4]))
// [1, 2, 3, 4, 5, 8]

圖像化理解

  • O(1):🚗 平直的高速公路
  • O(log n):📉 趨緩的上升曲線
  • O(n):📈 線性成長
  • O(n log n):⚖️ 稍微加速的線性
  • O(n²) 以上:💣 資料大就炸掉

👉 Big O 只看「最大影響因子」:

  • 3n + 100 → O(n)
  • n² + n → O(n²)
vocus|新世代的創作平台

學習小技巧

  1. 白板練習:寫之前先講出複雜度。
  2. 持續優化:嘗試把 O(n²) 變成 O(n log n) 或 O(n)。
  3. 養成習慣:每次寫 function,問自己「這是什麼 Big O?」。

Big O 不是數學課題,而是 理解程式效能的語言

當你能流利說出「這段程式是 O(n log n)」,不只面試更有自信,日常開發也會更有結構感。

💡 記住:

  • O(1) 與 O(log n) = 🚀 飛快
  • O(n) = ✅ 可接受
  • O(n²) 以上 = ⚠️ 大型資料就危險

掌握 Big O,你就掌握了寫出高效程式的關鍵! 🚀


留言
avatar-img
跨越國界的程式人生
6會員
42內容數
自學程式,現為網頁開發工程師,同時擔任線上課程講師,專注於幫助自學程式的開發者找到理想工作。熱愛技術與分享,致力於將複雜的概念轉化為實用知識,讓更多人踏入軟體開發的世界。
2025/09/04
本文深入探討常見演算法,例如線性搜尋、二分搜尋、以及選擇排序、氣泡排序、插入排序、合併排序等,並以LeetCode題目範例說明如何優化程式碼效能,提升軟體工程師職涯競爭力。
Thumbnail
2025/09/04
本文深入探討常見演算法,例如線性搜尋、二分搜尋、以及選擇排序、氣泡排序、插入排序、合併排序等,並以LeetCode題目範例說明如何優化程式碼效能,提升軟體工程師職涯競爭力。
Thumbnail
2025/09/01
深入淺出遞迴函式與動態規劃的原理與應用,透過費氏數列案例比較兩種方法的效率,並說明動態規劃的優勢與實作技巧,提升程式設計能力。
Thumbnail
2025/09/01
深入淺出遞迴函式與動態規劃的原理與應用,透過費氏數列案例比較兩種方法的效率,並說明動態規劃的優勢與實作技巧,提升程式設計能力。
Thumbnail
2025/09/01
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
2025/09/01
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
看更多
你可能也想看
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
給定一個輸入非負整樹陣列nums,請找出k值,使得陣列中恰好有k個元素大於等於 k。如果無解,回傳-1。尋找k值的方法包括排序法和二分搜尋法,時間複雜度都為O(n log n),空間複雜度為O(1)。關鍵知識點是當解空間具有遞增或遞減的性質時,可以用二分搜尋法加快搜尋效率。
Thumbnail
給定一個輸入非負整樹陣列nums,請找出k值,使得陣列中恰好有k個元素大於等於 k。如果無解,回傳-1。尋找k值的方法包括排序法和二分搜尋法,時間複雜度都為O(n log n),空間複雜度為O(1)。關鍵知識點是當解空間具有遞增或遞減的性質時,可以用二分搜尋法加快搜尋效率。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧我們在AI說書 - 從0開始 - 6中說當Context長度是n,且每個字用d維度的向量表示時有以下結論: Attention Layer的複雜度是O(n^2 *
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News