算法导论------渐近记号Θ、Ο、o、Ω、ω详解

简介: 目录:1.渐近精确界记号:Θ(big-theta)2.渐近上界记号 :O(big-oh)3.渐近下界记号 :Ω(big-omege)4.非渐近紧确上界:o(小-oh)5.非渐近紧确下界:ω(小-omege)6.

目录:


1.渐近精确界记号: Θ (big-theta)

  假设算法A的运行时间表达式 T1(n) 为: T1(n)=30n4+20n3+40n2+46n+100  
  假设算法B的运行时间表达式 T2(n) 为: T2(n)=1000n3+50n2+78n+10  
当问题规模足够大的时候,例如n=100万,算法的运行时间将主要取决于时间表达式的第一项,其它项的执行时间只有它的几十万分之一,可以忽略不计。第一项的常数系数,随着n的增大,对算法的执行时间也变得不重要了。 
  于是,算法A的运行时间可以记为: T1(n)n4 ,记为 T1(n)=Θ(n4) ;算法B的运行时间可以记为: T2(n)n4 ,记为 T2(n)=Θ(n4)

Θ 的数学含义 
方式一:设 f(n) g(n) 是定义域为自然数集合的函数。如果 limnf(n)g(n) 存在,并且等于某个常数 c(c>0) ,那么 f(n)=Θ(g(n)) 。通俗理解为 f(n)g(n) 同阶, Θ 用来表示算法的精确阶。

方式二: Θ(g(n)) ={ f(n) :存在正常量 c1c2n0 ,使得对所有 nn0 ,有 0c1g(n)f(n)c2g(n) }若存在正常量 c1c2 ,使得对于足够大的n,函数 f(n) 能“夹入” c1g(n)c2g(n) 之间,则 f(n) 属于集合 Θ(g(n)) ,记作 f(n)Θ(g(n)) 。作为代替,我们通常记“ f(n)=Θ(g(n)) ”。

  由下图中左侧 f(n)=Θ(g(n)) 图可以看出,对所有 n>n0 时,函数 f(n) 乘一个常量因子可等于 g(n) ,我们称 g(n) f(n) 的一个 渐近紧确界 。 Θ 记号在五个记号中,要求是最严格的,因为 g(n) 即可以表示上界也可以表示下界。

这里写图片描述

  需要注意的是: Θ(g(n)) 的定义要求每个成员 f(n)Θ(g(n))  渐近非负,即当n足够大时, f(n) 非负。 渐近正函数就是对所有足够大的n均为正的函数。

2.渐近上界记号: O (big-oh)

定义:设 f(n)g(n) 是定义域为自然数集 N 上的函数。若存在正数 cn0 ,使得对一切 nn0 都有 0f(n)cg(n) 成立,则称 f(n) 的渐进的上界是 g(n) ,记作 f(n)=O(g(n)) 。通俗的说n满足一定条件范围内,函数 f(n) 的阶不高于函数 g(n)

  根据符号 O 的定义,用它评估算法的复杂度得到的只是问题规模充分大时的一个上界。这个上界的阶越低,评估越精确,越有价值。

例如:设 f(n)=n2+n ,则 
f(n)=O(n2) ,取 c=2 , n0=1 即可 
f(n)=O(n3) ,取 c=1 , n0=2 即可。显然, O(n2) 作为上界更为精确。

几种常见的复杂度关系

O(1)<O(log(n))<O(n)<O(nlogn)< O(n2)<O(2n)<O(n!)<O(nn)  
需要注意的是:对数函数在没有底数时,默认底数为2;如 lgn=logn=log2n 因为计算机中很多程序是用二分法实现的。

符号用法测试:素数测试

int isprime(int n) {
    for(int i=2; i<=(int)sqrt(n); i++) {
        if(n%i==0) { 
            return0;
        }
    }
    return1;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上面这个素数测试的例子中,基本运算是整除;时间复杂度 T(n)=O(n12) 是正确的。当被测的数n为偶数时,基本运算一次也没执行,所以 T(n)=Θ(n12) 是错误的,因为没有办法证明 T(n) 的下界是 Ω(n12)


3.渐近下界记号: Ω (big-omege)

定义:设 f(n)g(n) 是定义域为自然数集 N 上的函数。若存在正数 cn0 ,使得对一切 nn0 都有 0cg(n)f(n) 成立,则称 f(n) 的渐进的下界是 g(n) ,记作 f(n)=Ω(g(n)) 。通俗的说n满足一定条件范围内,函数 f(n) 的阶不低于函数 g(n)

  根据符号 Ω 的定义,用它评估算法的复杂度得到的只是问题规模充分大时的一个下界。这个下界的阶越高,评估越精确,越有价值。

例如:设 f(n)=n2+n ,则 
f(n)=Ω(n2) ,取 c=1 , n0=1 即可 
f(n)=Ω(100n) ,取 c=1/100  , n0=1 即可

显然, Ω(n2) 作为下界更为精确。

4.非渐近紧确上界:o(小-oh)

定义1:设 f(n)g(n) 是定义域为自然数集 N 上的函数。若对于任意正数 cn0 ,使得对一切 nn0 都有 0f(n)<cg(n) 成立,则称 f(n) 的渐进的非紧确上界是 g(n) ,记作 f(n)=o(g(n)) 。通俗的说n满足一定条件范围内,函数 f(n) 的阶低于函数 g(n) 。 
定义2:设 f(n) g(n) 是定义域为自然数集合的函数。如果 limnf(n)g(n)=0 ,那么 f(n)=o(g(n)) 。通俗理解为 f(n)g(n) 的阶。

O 记号提供的渐近上界可能是渐近紧确的,也可能是非紧确的。(如: 2n2=O(n2) 是渐近紧确的,而 2n=O(n2) 是非紧确上界。) 
例子: f(n)=n2+n ,则 f(n)=o(n3)


5.非渐近紧确下界:ω(小-omege)

定义1:设 f(n)g(n) 是定义域为自然数集 N 上的函数。若对于任意正数 cn0 ,使得对一切 nn0 都有 0cg(n)<f(n) 成立,则称 f(n) 的渐进的非紧确下界是 g(n) ,记作 f(n)=ω(g(n)) 。通俗的说n满足一定条件范围内,函数 f(n) 的阶高于函数 g(n) 。 
定义2:设 f(n) g(n) 是定义域为自然数集合的函数。如果 limnf(n)g(n)= ,那么 f(n)=o(g(n)) 。通俗理解为 f(n)g(n) 的阶。

ω 记号与 Ω 的关系类似于 oO 记号的关系。我们用 ω 表示一个非渐近紧确的下界。 
例子: f(n)=n2+n ,则 f(n)=ω(n) 是正确的。 f(n)=ω(n2) 则是错误的, f(n)=Ω(n2) 是正确的。


6.渐近记号Θ、Ο、o、Ω、ω关系

记号 含义 通俗理解
(1)Θ(西塔) 紧确界。 相当于”=”
(2)O (大欧) 上界。 相当于”<=”
(3)o(小欧) 非紧的上界。 相当于”<”
(4)Ω(大欧米伽) 下界。 相当于”>=”
(5)ω(小欧米伽) 非紧的下界。 相当于”>”

这里写图片描述

目录
相关文章
|
机器学习/深度学习 算法
《算法导论(原书第3版)》一3.1 渐近记号
本节书摘来自华章出版社《算法导论(原书第3版)》一 书中的第3章,第3.1节,作者:(美)Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1977 0
|
15天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
21天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
1天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
9天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
17天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
9天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
14天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。
|
18天前
|
算法
通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法
本项目使用MATLAB2022A版本,对比分析了PSO、反向学习PSO及多策略改进反向学习PSO三种优化算法的性能,主要通过优化收敛曲线进行直观展示。核心代码实现了标准PSO算法流程,加入反向学习机制及多种改进策略,以提升算法跳出局部最优的能力,增强全局搜索效率。
|
12天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
下一篇
DataWorks