文章目录
要点2:比较不同函数的渐进阶大小
📌 适合对象:算法学习者、计算机科学学生
⏱️ 预计阅读时间:40-50分钟
🎯 学习目标:掌握O、Ω、Θ记号的定义和使用,能够比较不同函数的渐进阶大小,理解函数增长的渐近性态
📚 参考PPT:第 1 章-PPT-N2_v4(算法概述)- 渐进记号相关内容
📚 学习路线图
本文内容一览(快速理解)
- 大O记号(O):表示"阶不高于",用于描述算法复杂度的上界(最坏情况)
- 大Ω记号(Ω):表示"阶不低于",用于描述算法复杂度的下界(最好情况)
- 大Θ记号(Θ):表示"同阶",用于精确描述算法复杂度的渐近性态
- 函数增长顺序:从O(1)到O(n!),了解不同复杂度函数的增长快慢
- 比较方法:如何判断两个函数的渐进阶关系
一、大O记号(Big-O Notation):阶不高于
这一章要建立的基础:理解大O记号用于描述函数的上界,表示"阶不高于"。
核心问题:如何表示一个函数的增长速度不超过另一个函数?
[!NOTE]
📝 关键点总结:设 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)是两个定义域为自然数的正函数。如果存在一个常数 c > 0 c > 0 c>0和某个自然数 n 0 n_0 n0使得对任意 n ≥ n 0 n \geq n_0 n≥n0,都有关系 f ( n ) ≤ c ⋅ g ( n ) f(n) \leq c \cdot g(n) f(n)≤c⋅g(n),我们就说 f ( n ) f(n) f(n)的阶不高于 g ( n ) g(n) g(n)的阶,并记作 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))。
1.1 大O记号的定义(Definition):理解"阶不高于"的含义
概念的本质:
大O记号用于描述函数的上界。如果存在常数 c > 0 c > 0 c>0和 n 0 n_0 n0,使得对所有 n ≥ n 0 n \geq n_0 n≥n0都有 f ( n ) ≤ c ⋅ g ( n ) f(n) \leq c \cdot g(n) f(n)≤c⋅g(n),则 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))。
图解说明:
💡 说明:
- 定义:f(n) = O(g(n)) 表示f(n)的阶不高于g(n)的阶
- 数学表达:存在常数c > 0和n₀,使得对任意n ≥ n₀,都有f(n) ≤ c·g(n)
- 含义:当n足够大时,f(n)的增长速度不超过g(n)的某个常数倍
- 用途:描述算法复杂度的上界(最坏情况)
类比理解:
想象比较两个人的跑步速度:
- f(n) = O(g(n)):f的速度"不高于"g的速度
- 含义:当距离足够长时,f的速度不会超过g的某个倍数
- 例子:如果f(n) = 3n,g(n) = n,那么f(n) = O(n),因为3n ≤ 3·n(取c=3)
实际例子:
大O记号示例:
例1:证明 n³ + 2n + 5 = O(n³)
证明:当n ≥ 1时,我们有
n³ + 2n + 5 ≤ n³ + 2n³ + 5n³ = 8n³
所以 n³ + 2n + 5 = O(n³)
(取c = 8, n₀ = 1)
例2:常见的大O记号
- 1 = O(1) // 常数时间
- log n = O(log n) // 对数时间
- n = O(n) // 线性时间
- n log n = O(n log n) // 线性对数时间
- n² = O(n²) // 平方时间
- 2ⁿ = O(2ⁿ) // 指数时间
二、大Ω记号(Big-Omega Notation):阶不低于
这一章要建立的基础:理解大Ω记号用于描述函数的下界,表示"阶不低于"。
核心问题:如何表示一个函数的增长速度不低于另一个函数?
[!NOTE]
📝 关键点总结:设 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)为两个定义域为自然数的正函数。如果存在一个常数 c > 0 c > 0 c>0和某个自然数 n 0 n_0 n0使得对任意 n ≥ n 0 n \geq n_0 n≥n0,都有 f ( n ) ≥ c ⋅ g ( n ) f(n) \geq c \cdot g(n) f(n)≥c⋅g(n),我们则说 f ( n ) f(n) f(n)的阶不低于 g ( n ) g(n) g(n)的阶,并记作 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))。
2.1 大Ω记号的定义(Definition):理解"阶不低于"的含义
概念的本质:
大Ω记号用于描述函数的下界。如果存在常数 c > 0 c > 0 c>0和 n 0 n_0 n0,使得对所有 n ≥ n 0 n \geq n_0 n≥n0都有 f ( n ) ≥ c ⋅ g ( n ) f(n) \geq c \cdot g(n) f(n)≥c⋅g(n),则 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))。
图解说明:
💡 说明:
- 定义:f(n) = Ω(g(n)) 表示f(n)的阶不低于g(n)的阶
- 数学表达:存在常数c > 0和n₀,使得对任意n ≥ n₀,都有f(n) ≥ c·g(n)
- 含义:当n足够大时,f(n)的增长速度不低于g(n)的某个常数倍
- 用途:描述算法复杂度的下界(最好情况)
类比理解:
想象比较两个人的跑步速度:
- f(n) = Ω(g(n)):f的速度"不低于"g的速度
- 含义:当距离足够长时,f的速度不会低于g的某个倍数
- 例子:如果f(n) = n²,g(n) = n log n,那么f(n) = Ω(n log n),因为n² ≥ 1·n log n(当n足够大时)
实际例子:
大Ω记号示例:
例1:证明 n² = Ω(n log n)
证明:当n ≥ 1时,我们有n > log n,
从而有 n² > n log n,n ≥ 1
所以 n² = Ω(n log n)
(取c = 1, n₀ = 1)
例2:常见的大Ω记号
- n² = Ω(n) // n²不低于n
- n log n = Ω(n) // n log n不低于n
- 2ⁿ = Ω(n²) // 2ⁿ不低于n²
三、大Θ记号(Big-Theta Notation):同阶
这一章要建立的基础:理解大Θ记号用于精确描述函数的渐近性态,表示"同阶"。
核心问题:如何表示两个函数的增长速度相同(相差常数倍)?
[!NOTE]
📝 关键点总结:设 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)为两个定义域为自然数的正函数。如果关系 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))和 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))同时成立,我们则说 f ( n ) f(n) f(n)与 g ( n ) g(n) g(n)同阶,并记作 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))。
3.1 大Θ记号的定义(Definition):理解"同阶"的含义
概念的本质:
大Θ记号用于精确描述函数的渐近性态。如果 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))且 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))同时成立,则 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))。
图解说明:
💡 说明:
- 定义:f(n) = Θ(g(n)) 表示f(n)与g(n)同阶
- 数学表达:f(n) = O(g(n)) 且 f(n) = Ω(g(n))
- 含义:当n足够大时,f(n)的增长速度与g(n)的某个常数倍相同
- 用途:精确描述算法复杂度的渐近性态
类比理解:
想象比较两个人的跑步速度:
- f(n) = Θ(g(n)):f的速度与g的速度"同阶"
- 含义:当距离足够长时,f的速度与g的速度在同一个级别(相差常数倍)
- 例子:如果f(n) = 3n,g(n) = n,那么f(n) = Θ(n),因为3n = O(n)且3n = Ω(n)
实际例子:
大Θ记号示例:
例1:证明 n³ + 2n + 5 = Θ(n³)
证明:
- 已证明了 n³ + 2n + 5 = O(n³)
- 我们只需证明 n³ + 2n + 5 = Ω(n³)
- 注意到当n ≥ 1时,n³ + 2n + 5 > n³
- 所以 n³ + 2n + 5 = Ω(n³)(取c = 1, n₀ = 1)
- 因此 n³ + 2n + 5 = Θ(n³)
例2:常见的大Θ记号
- 3n + 5 = Θ(n) // 与n同阶
- n² + n = Θ(n²) // 与n²同阶
- n log n + n = Θ(n log n) // 与n log n同阶
四、函数增长顺序(Growth Order):从慢到快的排列
这一章要建立的基础:理解不同复杂度函数的增长顺序,从常数时间到指数时间。
核心问题:哪些函数增长更快?如何排列它们?
[!NOTE]
📝 关键点总结:表示算法复杂度的常用函数按增长慢到快的顺序排列。了解这些函数的增长顺序有助于我们评估算法的效率。
4.1 常用复杂度函数(Common Complexity Functions):从O(1)到O(n!)
概念的本质:
不同复杂度函数按增长速度从慢到快排列。了解这个顺序有助于我们比较算法的效率。
图解说明:
💡 说明:
- 从增长慢到快:
- O(1) - 常数时间
- O(log log n),O(log n),O((log n)²) - 对数时间
- O(n log log n),O(n log n),O(n(log n)²) - 线性对数时间
- O(n),O(n log log n) - 线性时间
- O(n²),O(n³),… - 多项式时间
- O(2ⁿ),O(n!),O(nⁿ) - 指数时间
类比理解:
就像交通工具的速度:
- O(1):静止不动(常数时间)
- O(log n):步行(对数增长,很慢但稳定)
- O(n):自行车(线性增长,速度与距离成正比)
- O(n log n):汽车(线性对数,比线性快一些)
- O(n²):火车(平方增长,速度更快)
- O(2ⁿ):飞机(指数增长,非常快但成本高)
实际例子:
函数增长顺序示例:
当n = 1000时:
- O(1) = 1
- O(log n) ≈ 10
- O(n) = 1000
- O(n log n) ≈ 10,000
- O(n²) = 1,000,000
- O(2ⁿ) ≈ 10³⁰⁰(天文数字)
比较:
- n² = O(n³) // n²增长慢于n³
- n log n = O(n²) // n log n增长慢于n²
- 2ⁿ = Ω(n²) // 2ⁿ增长快于n²
- n log n = Θ(n log n) // 同阶
五、比较函数渐进阶的方法(Comparison Methods):如何判断函数关系
这一章要建立的基础:掌握比较两个函数渐进阶的实用方法。
核心问题:给定两个函数,如何判断它们的渐进阶关系?
[!NOTE]
📝 关键点总结:比较函数渐进阶的方法包括:计算极限、使用定义证明、利用已知关系。关键是理解"当n足够大时"的含义。
5.1 比较方法(Comparison Techniques):三种常用方法
概念的本质:
比较两个函数 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)的渐进阶,有三种常用方法:
- 极限方法:计算 lim n → ∞ f ( n ) g ( n ) \lim_{n \to \infty} \frac{f(n)}{g(n)} limn→∞g(n)f(n)
- 定义证明:直接使用O、Ω、Θ的定义
- 已知关系:利用已证明的函数关系
图解说明:
💡 说明:
- 极限方法:如果 lim n → ∞ f ( n ) g ( n ) = 0 \lim_{n \to \infty} \frac{f(n)}{g(n)} = 0 limn→∞g(n)f(n)=0,则 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n));如果极限为常数,则 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n));如果极限为 ∞ \infty ∞,则 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))
- 定义证明:直接找到常数c和n₀,证明不等式成立
- 已知关系:利用已证明的函数关系进行推导
类比理解:
就像比较两个数列的增长率:
- 极限方法:看两个数列的比值趋向于什么
- 定义证明:直接找到证据证明大小关系
- 已知关系:利用已经知道的事实进行推理
实际例子:
比较方法示例:
例1:比较 n² 和 n log n
方法1(极限法):
lim(n→∞) n²/(n log n) = lim(n→∞) n/log n = ∞
所以 n² = Ω(n log n)
方法2(定义证明):
当n ≥ 2时,n > log n,所以 n² > n log n
因此 n² = Ω(n log n)(取c = 1, n₀ = 2)
例2:比较 n log n 和 n²
lim(n→∞) (n log n)/n² = lim(n→∞) log n/n = 0
所以 n log n = O(n²)
例3:比较 3n + 5 和 n
lim(n→∞) (3n + 5)/n = 3(常数)
所以 3n + 5 = Θ(n)
📝 本章总结
核心要点回顾:
-
大O记号(O):表示"阶不高于",用于描述上界
- 定义:存在c > 0和n₀,使得对n ≥ n₀,有f(n) ≤ c·g(n)
- 用途:描述算法最坏情况复杂度
-
大Ω记号(Ω):表示"阶不低于",用于描述下界
- 定义:存在c > 0和n₀,使得对n ≥ n₀,有f(n) ≥ c·g(n)
- 用途:描述算法最好情况复杂度
-
大Θ记号(Θ):表示"同阶",用于精确描述
- 定义:f(n) = O(g(n)) 且 f(n) = Ω(g(n))
- 用途:精确描述算法复杂度
-
函数增长顺序:从O(1)到O(n!),了解不同函数的增长快慢
-
比较方法:极限法、定义证明、利用已知关系
知识地图:
关键决策点:
- 何时使用O:需要描述算法的最坏情况或上界
- 何时使用Ω:需要描述算法的最好情况或下界
- 何时使用Θ:需要精确描述算法的渐近复杂度
- 如何比较函数:优先使用极限法,必要时使用定义证明
💡 延伸学习:渐进记号是算法分析的基础工具。掌握这些记号有助于我们:
- 比较不同算法的效率
- 评估算法的性能
- 理解算法复杂度的渐近性态
- 设计指定复杂度的算法
算法复杂度渐进阶比较
1361

被折叠的 条评论
为什么被折叠?



