算法分析—大O、大Ω、大θ

article/2025/8/22 10:50:18

前言

在算法的学习中,最开始便是要学习算法的分析。学习算法分析时,我们便会接触到这么几个符号:大O、大Ω、大θ,常常让人难以理解。

在通常的算法分析时,我们可以明白,在输入规模较小,各种算法之间的时间消耗并无明显差别。只有当输入规模较大时,对各个算法之间消耗差别的对比与分析才有意义。所以上面几个符号便常用于表达当规模逐渐趋向于一个极大数时的算法复杂度。

在表示一个算法时间复杂度时,我们常用如 T(n)=O(n^2) 的形式表示,而在渐进分析中的 “=” 更倾向于 “” 的意思。打个比方:渐进表达式 f(n) = O(g(n)) 所表达的意思是 O(g(n)) = [ f(n),h(n),…,g(n) ], f(n) ∈ O(g(n))

一、大O表示法

f(x) = O(g(x)) 表示的含义是f(x)以g(x)为上界

大O是我们在分析算法复杂度时最常用的一种表示法。当函数的大小只有上界,没有明确下界的时候,则可以使用大O表示法,该渐进描述符一般用与描述算法的 最坏复杂度f(x) = O(g(x))正式的数学定义:存在正常数c、n、n0,当 n>n0 的时,任意的 f(n) 符合 0 <= f(n) <= c.g(n)。

坐标图如下:
在这里插入图片描述
示例:
下面是一个很简单的嵌套循环,在分析这种简单算法的复杂度时,我们通常计算其中 关键步骤的执行次数 作为此算法的时间复杂度。
分析一: 该算法外层执行了 n 次循环,如果内层也是 n 次循环,我们便可知道该算法时间复杂度为 n^2,但是该算法内层执行的循环次数会随着外层循环的进行依次减少,最大为n。所以,我们便可以确定该算法的时间复杂度有一个上界 n^2,即T(n) = O(n^2)。
分析二: 另外我们可以采用最简单的加法来判定该算法复杂度,随着外层的循环,内层执行的次数依次为 n、n-1、…、2、1,那么关键步骤总的执行次数为等差数列的和 (n+1)*n/2, 展开即 n^2/2 + n/2,以此也可确定一个上界n^2,在我们使用O时,常有的一个说法便是“ O为取最高次数项去掉系数 ”。

	for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {...		// 关键步骤}}

二、大Ω表示法

f(x) = Ω(g(x)) 表示的含义是f(x)以g(x)为下界

当函数的大小只有下界,没有明确的上界的时候,可以使用大Ω表示法,该渐进描述符一般用与描述算法的 最优复杂度 f(n)= Ω(g(n)) 正式的数学定义:存在正常数c、n、n0,当 n > n0 的时,任意的 f(n) 符合 0 <= c.g(n) <= f(n)。

坐标图如下:
在这里插入图片描述
简析:
为什么我们通常把O用于分析最坏复杂度,把Ω用于分析最优复杂度?
大Ω描述的界是渐进最小,加入用大Ω来描述最坏复杂度,因为这只是一个下界,并不能说明算法的最坏复杂度,所以没意义。大O同理。

三、大θ表示法

f(x) = Θ(g(x)) 表示的含义是g(x)是f(x)的确界

用于界定函数的渐进上界和渐进下界。当 f(n)= θ(g(n)) 的时候,代表着g(n)为f(n)的渐进紧确界。而θ渐进描述符在所有的渐进描述符中是最严格的一个,因为它既描述了函数的上界,有描述了函数的下界。
f(n)= θ(c.g(n)) 正式的数学定义:存在正常数c1、c2、n、n0,当 n > n0 的时,对于任意的f(n)对符合 c1.g(n) <= f(n) <= c2.g(n),c1.g(n)、c2.g(n)都是渐进正函数(当n趋于无穷大的时候,f(n)为正)。

坐标图如下:
在这里插入图片描述
算法导论中还根据大O,大Ω,大θ的定义得到以下定理:
当且仅当函数 f(n) = O(g(n)) 并且 f(n)= Ω(g(n)) 时,才有 f(n) = θ(g(n))。

常见的几个算法复杂度

在这里插入图片描述
上图横轴代表输入规模,数轴代表复杂度,由图中的时间复杂度增长趋势可以看出:

  • 常见的最优的算法复杂度为logN;
  • 当 N 的值较小时,NlogN < N, 当 N 的值较大时,NlogN > N;
  • 指数次方与阶乘的复杂度非常高,应当尽量避免使用这些算法,二次方或三次方的时间复杂度在N值较大是也是相当高的,在设计算法的时候必须要注意这一点;

参考博文:
算法分析与时间复杂度
算法分析——算法的渐进效率分析 和 渐进符号大O、大Ω、大θ、小o、小ω


http://chatgpt.dhexx.cn/article/YLUIuytM.shtml

相关文章

算法分析——大O标记法

目录 一. 运行时间 二. 大O 表示法 2.1 示例 三. 总结 五. 扩展 一. 运行时间 每次介绍算法时&#xff0c;我们都将讨论其运行时间。一般而言&#xff0c;应选择效率最高的算法&#xff0c;以最大限度地减少运行时间或占用空间。 可是&#xff0c;如果代码都还没有运行&a…

Oracle数据库查询语句

1 oracle数据库查询表的所有数据–select * from 表名;&#xff08;* 代表所有&#xff09; 2 oracle数据库查询表中指定字段的值–select 字段名1&#xff0c;字段名2&#xff0c;……from 表名&#xff1b; 3 oracle数据库往表中添加数据信息–&#xff08;添加信息使用inser…

Access数据库的查询

内容很简单&#xff0c;我搭建access数据库就是为了简单测试access语句的对错&#xff0c;以及学习access数据库的语法。 1.打开access数据库。 2.主页->空数据库 3.创建数据 4.创建->查询设计 5.【显示表】中的【表】【查询】【两者都有】&#xff0c;都可以。点击添加…

数据库查询语句SQL中like、%、-的区别

数据库查询语句SQL中like、%、-的区别 数据库查询语句SQL中like、%、-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k" 结尾的所有客户: SELECT * FROM Websites WHERE name LIKE %k; 执行输出结果: 下划线通配符:表示…

使用oracle数据库分页查询语句,各种数据库的分页查询语句

各种数据库的分页查询语句 1.oracle数据库分页select * from (select a.*,rownum rc from 表名 where rownum=endrow) a where a.rc=startrow2.DB2数据库分页Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by 列名) as 各种数据库的分页…

解决数据库查询语句where条件为空查询全部数据,不为空按照条件查询

问题&#xff1a;在用查询语句查询电影类型&#xff0c;电影年代&#xff0c;电影区域的时候&#xff0c;要返回全部的数据&#xff0c;就是where条件为空&#xff0c;返回所有的数据 解决&#xff1a;select * from 表 where (字段条件 or 条件‘’) 代码&#xff1a; const …

数据库内外联接查询语句

建立如下表并插入数据&#xff1a; create table s(sid varchar2(10) primary key,sname varchar2(50),sage number(30));insert into s values(111,小红,20);insert into s values(222,小红,20);insert into s values(333,小红,20);insert into s values(555,小红,20);create…

SQL Server数据库的查询语句

select version; #查询数据库的版本 select servername; #查询服务名 select host_name(); #查询主机名&#xff0c;如果是用navicat远程连接的话&#xff0c;主机名是本地的名字 select db_name(); #查询当前数据库名 select db_name(1); #查询第一个数据库名 select db_name(…

数据库去重语句整理

示例数据 Test表中有id和name两个字段&#xff0c;id各不相同&#xff0c;name有重复。 现在需要去除重复的数据&#xff0c;只保留重复的里面id最大的数据。 一、去重语句一(通用型)&#xff1a; SELECT * FROM test c where c.id in( SELECT b.id from test a,test b wher…

数据库查询中的in语句

数据库查询中的in语句 在数据库中也有运算符&#xff0c;比如<、>、、之类的&#xff0c;还有一些or、and之类的&#xff0c;下面我们来学习关于in语句的方法&#xff0c;in在数据库中到底起怎样的作用&#xff1f; 如上图&#xff0c;我通过where语句限制年龄&#xff0…

数据库查询语句(二)-条件查询

文章目录 前言一、单条件查询二、多条件查询 前言 1. 熟练掌握where子句各类运算符的使用 2. 熟练掌握多条件查询and、or的使用 一、单条件查询 在SQL中&#xff0c;insert、update、delete和select后面都能带where子句&#xff0c;用于插入、修改、删除或查询指定条件的记…

数据库查询语句中的排序

1.排序查询语法 排序查询语法&#xff1a; select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]语法说明&#xff1a; 先按照列1进行排序&#xff0c;如果列1的值相同&#xff0c;则按照列2排序&#xff0c;以此类推asc从小到大排序&#xff0c;即升序desc从大到…

C# 数据库查询语句1

C# 数据库查询语句1作者&#xff1a;陈钰桃 撰写时间&#xff1a;2022年3月27日第1节. 查询数据 数据库表是存储数据库中所有数据的对象。 在表中&#xff0c;数据按行和列格式逻辑组织&#xff0c;类似于电子表格(Excel)。在表中&#xff0c;每行代表一个唯一记录&#xff0c;…

数据库基础之查询语句

mysql三范式&#xff1a; 第一范式(确保每列保持原子性)【属性不可分】 第二范式(确保表中的每列都和主键相关)【符合第一范式&#xff0c;同时非主属性完全依赖于主键】 第三范式(确保每列都和主键列直接相关,而不是间接相关)【符合2NF&#xff0c;并且消除传递依赖】 前言 …

数据库的查询语句

目录 一 . 基本查询 1. 查询所有数据 2.查询部分字段 3. 起字段别名 4. 拓展 二 . 条件查询 三 . 模糊查询 四 . 范围查询 五 . 为空查询 六 . 排序 七 . 聚合函数 八 . 分组 九 . 分页查询 练习模板 一 . 基本查询 1. 查询所有数据 select * from goods; 2.查…

深度学习-深度卷积神经网络发展

AlexNet网络 现代意义上的深度卷积神经网络起源于AlexNet网络&#xff0c;它是深度卷积神经网络的鼻祖。这个网络相比之前的卷积网络最显著的特点是层次加深&#xff0c;参数规模变大。网络结构如下图所示&#xff1a; 这个网络有5个卷积层&#xff0c;它们中的一部分后面接着m…

什么是深度卷积神经网络,基于深度卷积神经网络

卷积神经网络算法是什么&#xff1f; 一维构筑、二维构筑、全卷积构筑。 卷积神经网络&#xff08;ConvolutionalNeuralNetworks,CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff08;FeedforwardNeuralNetworks&#xff09;&#xff0c;是深度学习&a…

经典卷积和深度卷积的神经网络

文章目录 LeNet网络AlexNet深度卷积神经网络 (AlexNet)VGGNIN(网络中的概念)含并行连接的网络GoogLeNet / Inception V3批量 归一化一些B站评论区大佬讨论残差网络ResNetResNet为什么能训练一千层暂时浅过一遍,不求每个部分都理解很深度,后面通过复现项目来加深理解。 这里…

深度学习--卷积神经网络

目录 &#xff08;一&#xff09;输入层&#xff08;Input Layer&#xff09; &#xff08;二&#xff09;卷积层&#xff08;Convolution Layer&#xff09; &#xff08;三&#xff09;激活层&#xff08;Activation Layer&#xff09; &#xff08;四&#xff09;池化层…

基于深度卷积神经网络,深度卷积神经网络结构

1、卷积神经网络算法是什么&#xff1f; 一维构筑、二维构筑、全卷积构筑。 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff08;Feedforward Neural Networks&#xff09;&#xff0c;是深…