算法复杂度渐进符号(大O、Ω和θ)的个人理解

article/2025/8/22 8:16:27

做软考习题时,碰到了这样的一道题:
【2012年上半年真题】


关于算法复杂度渐进符号(O、Ω、θ),详细解释可参考:
【双语字幕】什么是算法复杂度渐进符号?阿布老师算法课11

这里节选总结了视频的重点内容,并补充了视频中缺失的部分细节、以及我的个人理解:

==================================================

(1)常见函数阶数由低到高排列:

请记住它!
在这里插入图片描述

(2)O(Big-Oh,大O表示法)——表示上限

构造形如f(n) = c * g(n)形式的不等式,使得在n ≥ n0的条件下,满足0 ≤ f(n) ≤ c * g(n)。(n0是自己取的一个数)

eg:在这里插入图片描述
如图,待分析式f(n)=2n+3
此时,可以构造式子2n+3n,可以保证当n≥1时f(n)= 2n+3 ≤ 2n+3n = 5n成立
此时,c*g(n)= 5n(c为系数5,g(n)=n)
因为g(n)= n,所以f(n)=O(n)

ps:大O表示法可以用比最接近的函数阶数更大的函数来表示。

向上面这种f(n)= 2n+3 ≤ 2n+3n = 5n的情况:用O(n)是最贴切的情况,但是也可以用O(n^2)、O(nlogn)等阶数更高的形式进行表达,只是阶数过大的时候也没什么意义了。


(3)Omega(Ω)——表示下限

构造形如f(n) = c * g(n)形式的不等式,使得在n ≥ n0的条件下,满足f(n) ≥ c * g(n) ≥ 0。(n0是自己取的一个数)

eg:在这里插入图片描述
如图,待分析式f(n)=2n+3
此时,可以构造式子2n+3n,可以保证当n≥1时f(n)= 2n+3 ≥ 1 * logn成立
此时,c*g(n)= 1 * logn(c为系数1,g(n)=logn)
因为g(n)= logn,所以f(n)=O(logn)

ps:Omega(Ω)表示法可以用比最接近的函数阶数更大的函数来表示。

同理,向上面这种f(n)= 2n+3 ≥ 1 * logn的情况:用O(logn)是最贴切的情况,但是也可以用O(1)这样阶数更低的形式进行表达,只是阶数过低的时候也没什么意义了。

(4)Theta(θ)——平均界限

在这里插入图片描述
相比大O和Ω,平均界限θ的选取往往比较严格,只会有一种。

eg.在这里插入图片描述
如图,待分析式f(n)=2n+3
此时,可以构造式子c1 * g(n) = 1 * n和式子c2 * g(n) = 5 * n,可以保证当n≥1时n ≤ f(n)= 2n+3 ≤ 5n成立。

此时,不等式两边的g(n)均为n,此时g(n) = n就是平均界限θ。

ps:
平均界限要求不等式两边的g(n)必须相同,如上面的例子,不能左边的g(n)是n,右边的g(n)取n2

=================================================
所以,再看一下这道软考题:
在这里插入图片描述
A:取f(n)=n2
当n≥1时,1/2 * n2 ≤ n2≤ 2n2,所以f(n)= θ(n2),A正确

B:取f(n)=n2
当n≥1时,n2≤ 2n2,所以f(n)=O(n2),B正确

C:
找不到一个n0,使得在n ≥ n0的条件下,满足0 ≤ f(n)=n2 ≤ c * g(n) = c* n,C错误

D:取f(n)=n2
当n≥1时, n2 ≤ n3,所以f(n2)= O(n3),A正确

===================================================
ps:
大O并不是只能表示最坏情况,Ω不是只能表示最好情况,其实用任何符号都可以表示最好情况/最坏情况。
请不要弄混淆。


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

相关文章

数据结构考研:大O表示法最浅显易懂且详细深入的解释及与小o表示法的区别(十分钟必懂)

大O表示法的背景 作为软件工程专业的学生,在我们学习数据结构的时候,总是会碰见对各种算法时间复杂度和空间复杂度的大O表示法的描述。我们只是将信将疑的用着,并不知道大O表示法的准确含义,今天博主李同学在查阅各方资料后进行详…

算法的时间复杂度(大O表示法)

首先我们先来看个例子, 我想找个1~100的数字,你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。下面我们来看下两种简单的方法(方法有很多种),再来引入算法的运行时间&#xff0…

算法时间复杂度分析——大O、大Ω、大θ、小o,小ω

最近开始转战传统算法分析的研究工作了,重新拾起以前学过的一些内容。 目录 一、概述 二、对常见的Ο和Ω进行分析 2.1 大O表示法 2.2 大Ω表示法 三、P问题,NP问题,NP-hard问题,NPC问题 3.1 P问题和NP问题 3.2 NPC问题和N…

复杂度分析(大O表示法)

复杂度分析 前文提要 本文完完全全引用极客时间的文章《数据结构与算法之美》,作者王争。 数据结构是作为程序猿绕不过的一道坎,所以萌生了学习的想法,试读了几篇文章后发现讲的很好,也有很多人订阅,于是不回头的走…

big O notation - 大 O 表示法

big O notation - 大 O 表示法 Big O notation (with a capital letter O, not a zero), also called Landau’s symbol. 大 O 表示法 (大写字母 O,不为零),也称为 Landau’s symbol。 Big O notation is a mathematical notation that describes the l…

算法分析:大O符号/大Ω符号/大Θ符号/小o符号/小w符号

感谢作者分享,原文链接:http://blog.csdn.net/u012816041/article/details/49888631 大O,渐进表示法,接下来我尝试用最简单的方式进行说明。 学习算法我经常听到这个词汇,我一开始很难理解,什么鬼&#xff…

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

前言 在算法的学习中,最开始便是要学习算法的分析。学习算法分析时,我们便会接触到这么几个符号:大O、大Ω、大θ,常常让人难以理解。 在通常的算法分析时,我们可以明白,在输入规模较小,各种算…

算法分析——大O标记法

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

Oracle数据库查询语句

1 oracle数据库查询表的所有数据–select * from 表名;(* 代表所有) 2 oracle数据库查询表中指定字段的值–select 字段名1,字段名2,……from 表名; 3 oracle数据库往表中添加数据信息–(添加信息使用inser…

Access数据库的查询

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

数据库查询语句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条件为空查询全部数据,不为空按照条件查询

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

数据库内外联接查询语句

建立如下表并插入数据: 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(); #查询主机名,如果是用navicat远程连接的话,主机名是本地的名字 select db_name(); #查询当前数据库名 select db_name(1); #查询第一个数据库名 select db_name(…

数据库去重语句整理

示例数据 Test表中有id和name两个字段,id各不相同,name有重复。 现在需要去除重复的数据,只保留重复的里面id最大的数据。 一、去重语句一(通用型): 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;…