算法导论------渐近记号Θ、Ο、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,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1948 0
|
3天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
1月前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
1月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
2月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
1月前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
1月前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。
|
1月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
14天前
|
算法
基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真
该程序基于蚁群优化算法(ACO)为无人机(UAV)规划最优巡检路线,将无人机视作“蚂蚁”,巡检点作为“食物源”,目标是最小化总距离、能耗或时间。使用MATLAB 2022a版本实现,通过迭代更新信息素浓度来优化路径。算法包括初始化信息素矩阵、蚂蚁移动与信息素更新,并在满足终止条件前不断迭代,最终输出最短路径及其长度。
|
17天前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
下一篇
无影云桌面