iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

演算法 30 Days --- 從小牛變水牛系列 第 8

Day8 演算法分析:時間複雜度 (Time Complexity) (下)

  • 分享至 

  • xImage
  •  

昨天介紹怎麼計算最壞執行次數 T(n),今天來介紹 O 表示法、Ω 表示法、Θ 表示法 這三個重要的東西。

這三個希臘字母為演算法漸進效率重要的表示法,在演算法分析至關重要

那甚麼是漸進效率呢?

我們在學習之前先來了解演算法執行時間的增長率


增長率

增長率是隨著 n 的增加,時間的增加速度,其在分析時間複雜度時是非常的因素。

以我們昨天的 insertion sort 的 T(n)
image
當 n 非常大的時候係數及低次項其實對時間的其實影響不大

  • 不考慮係數、低次項

所以最後只會剩下image 為我們的增長率

n 趨近於無限時image演算法的增長率就是我們的漸進效率


O 表示法、Ω 表示法、Θ 表示法

我們先釐清一個觀念

  • Worst-Case、Average-Case、Best-Case 跟 O、Ω、Θ 並沒有直接相關

我們可以分別分析三種 case 的 O、Ω、Θ

O、Ω、Θ 是我們的漸進表示法

O 表示法

O(Big O):演算法漸進的「上限」,代表一個演算法的增長率不會快過它 (<=)

  • 舉 insertion sort 為例子,前面得出他最壞情況的漸進image
  • 那我們可以說 insertion sort 最壞情況的時間複雜度為 image (big O of image)
  • 我們也可以說 insertion sort 最壞情況的時間複雜度為 image 因為 image

Ω 表示法

Ω(Big Omega):演算法漸進的「下限」,代表一個演算法的增長率至少會跟它一樣 (>=)

  • 那我們可以說 insertion sort 最壞情況的時間複雜度為 image (big Omega of image)
  • 我們也可以說 insertion sort 最壞情況的時間複雜度為 image 因為 image

Θ 表示法

Θ(Big Theta):演算法漸進的「嚴格界限」。代表一個演算法的增長率 (==)

  • 就是當 O(g(n))、Ω(g(n)) 的兩個 g(n) 相同的時候
  • 以 insertion sort 為例,他們當可以說最壞情況的時間複雜度為imageimage
  • 所以我們就可以說 insertion sort 最壞情況的時間複雜度為 image

了解這幾個表示法後,我有了一個問題,

明明 Θ 可以描述比較精確的時間複雜度,為甚麼我們大部分看到的還是 O?

參考至 stack overflow 的網友 (網址在最後面)

假設一個很複雜的演算法,他的時間複雜度為 image
但要證明這個時間複雜度是正確的,需要同時證明 imageimage 是對的
但如果我們直接證明 image 相對來說會容易許多
所以常常看到的時間複雜度,通常都是證明出來最小的 image

謝謝~

PENUP_20250915_211934

參考資料
Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest、Clifford Stein,《演算法導論》,碁峰資訊,2024 年
Big O and Big Omega of worst-case time complexity (top comment)


上一篇
Day7 演算法分析:時間複雜度 (Time Complexity) (上)
下一篇
Day9 資料結構:陣列 (Array)、矩陣 (Matrix)
系列文
演算法 30 Days --- 從小牛變水牛9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言