算法导论 - 基础知识 - 函数的增长

各种语句和模块分析应遵循的规则:

(1)赋值语句和读写语句:运行时间取 O(1)。有函数调用的除外,此时要考虑函数的执行时间。

(2)顺序执行语句:运行时间有加法规则确定,即该序列中耗时最多的语句的执行时间。

(3)条件分支语句:运行时间有条件测试(通常为 O(1))加上分支中运行时间最长的语句的运行时间。

(4)循环语句:

运行时间是对输入数据重复执行n次循环体所耗时间的总和。

 

时间复杂度的运算法则:

设T1(n) = O(ƒ(n)),T2() = O(g(n)),则

①加法规则:T1(n) + T2(n) = O( max{ƒ(n),  g(n)} );

②乘法规则:T1(n) + T2(n) = O( ƒ(n) g(n) );

 

 接下来是对《算法导论》这一章的归纳:

首先是关于渐近记号

三种渐近记号:Θ记号、O记号、Ω记号。(这些描述记号都确定一类函数的集合,是集合!!!!

(1)Θ记号:(算法在某种情况下的运行时间)

Θ记号的定义:Θ(g(n))表示下类所描述函数的集合。

Θ(g(n)) = { f(n):存在正常量c1、c2、n0,使得对所有 n ≥ n0,有 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) }

理解:若存在正常量c1和c2,使得对于足够大的n,函数 f(n) 能“夹入”c1g(n)与c2g(n)之间,则 f(n)属于集合Θ(g(n))。(非常类似数学中的极限的定义)

换句话说,对所有 n≥n0,函数 f(n)在一个常量因子内等于 g(n)。我们称 g(n) 是 f(n) 的一个渐近紧确界

(2)O记号:(限制算法的最坏情况运行时间)

O记号的定义:O(g(n))表示下类所描述函数的集合。

O(g(n)) = { f(n):存在正常量c和n0,使得对于所有 n ≥ n0,有0 ≤ f(n) ≤ cg(n) }

我们使用O记号来给出函数的一个在常量因子内的上界,并称g(n)是f(n)的一个渐近上界

此处请注意,O记号描述算法的渐近上界,但不要求是渐近紧上界。(要注意区分渐近上界和渐近确界

(3)Ω记号:(限制算法的最佳情况运行时间)

Ω记号的定义:Ω(g(n))表示下类所描述函数的集合。

Ω(g(n)) = { f(n):存在正常量c和n0,使得对所有 n ≥ n0,有 0 ≤ cg(n) ≤ f(n) }

我们用Ω记号提供一个算法的渐近下界,称g(n)是f(n)的一个渐近下界。(此处同样不要求是渐近紧下界)

 

定理:对任意两个函数 f(n) 和 g(n),我们有 f(n) = Θ(g(n)),当且仅当 f(n) = O(g(n)) 且 f(n) = Ω(g(n))。

注:通常情况下使用该定理,我们可以通过算法的渐近上界渐近下界相等来证明算法的渐近确界存在并给出该确界。

但多数情况下,算法的最坏情况运行时间和最佳情况运行时间的确界不相等。例如插入排序,插入排序的最坏运行情况时间为 O(n^2),最佳情况运行时间为 Ω(n),此时无法用 Θ 记号描述该算法,但我们可以说在最坏运行情况下算法时间为Θ(n^2)(即补加一个算法条件来说明)。

 

还有两种描述算法不常用的记号:o记号、ω记号

o记号:

O记号描述的渐近上界可能是也可能不是渐近紧确的。我们使用 o 记号来表示一个非渐近紧确的上界,数学上常用该记号表示更高阶的无穷小量

ω记号:

我们使用 ω 记号来表示一个非渐近紧确的上界,数学上使用该记号表示更低价的无穷小量。

posted on   Black_x  阅读(259)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示