算法复杂性和渐进复杂意义下的记号 O、Ω、θ
算法复杂性
算法复杂性 === 算法运行时所需要的计算机资源的量
通常指的是空间、时间资源
影响时间复杂性的因素
影响时间复杂性的因素有: 问题规模nnn、输入序列III、算法本身AAA
- 问题规模:如果相同的序列和算法的前提下,在10个数字中找一个数字和在10万个数字中找一个数字,两者消耗的时间不一样。
输入序列:如果相同的规模和算法的前提下,第一个就是要找的数字和最后一个是要找的数字,两者消耗的时间不一样。
算法本身:如果相同的序列和规模的前提下,算法效率高的和算法效率低的,两者消耗的时间不一样。
如:
顺序查找:最少111次 ; 最多nnn次
折半查找:最少111次 ; 最多lognlog nlogn次
影响空间复杂性的因素
一般请情况下,在算法使用的数据结构时需要借助大量的辅助空间来帮助完成算法。所以辅助变量影响空间复杂性。如:
- 顺序查找:借助1个循环变量完成。
- 冒泡排序:借助2个循环变量,1个交换的临时变量。
复杂度的表示形式有:
- O(1)O(1)O(1) O(logn)O(logn)O(logn)
- O(n)O(n)O(n) O(nlogn)O(nlogn)O(nlogn)
- O(n2)O(n^2)O(n2) O(2n)O(2^n)O(2n)
- O(nn)O(n^n)O(nn) O(n!)O(n!)O(n!)
算法的渐进复杂性态的引进
设算法的运行时间为T(n)T(n)T(n) ,如果存在T∗(n)T^*(n)T∗(n) , nnn 趋于无穷大使得
limn→∞T(n)−T∗(n)T(n)=0\lim_{n→∞}\cfrac{T(n)-T^*(n)}{T(n)}=0 n→∞limT(n)T(n)−T∗(n)=0
就称T∗(n)T^*(n)T∗(n)为算法的渐进性态 或 渐进时间复杂性。
当 nnn 很大很大时候T∗(n)T^*(n)T∗(n)就可以代替该算法的时间复杂度,如:
假设算法A的运行的时间表达式T1(n)T_1(n)T1(n)为:
T1(n)=30n4+20n3+40n2+46n+100T_1(n)= 30 n{^4} + 20 n{^3} + 40n{^2} + 46 n+ 100T1(n)=30n4+20n3+40n2+46n+100
令:T1∗(n)=30n4T_1{^*}(n)= 30 n{^4}T1∗(n)=30n4
则:
limn→∞T1(n)−T1∗(n)T1(n)=limn→∞20n3+40n2+46n+10030n4+20n3+40n2+46n+100=0\lim_{n→∞}\cfrac{T_1(n)-T_1{^*}(n)}{T_1(n)}= \lim_{n→∞}\cfrac{20 n{^3} + 40n{^2} + 46 n+ 100}{30 n{^4} + 20 n{^3} + 40n{^2} + 46 n+ 100}=0 n→∞limT1(n)T1(n)−T1∗(n)=n→∞lim30n4+20n3+40n2+46n+10020n3+40n2+46n+100=0
这样用T1∗(n){T_1}{^*}(n)T1∗(n)代替T1(n)T_1(n)T1(n)简化了时间表达式,便于衡量算法的时间复杂度。
在问题的规模nnn很大很大时,T1∗(n)=30n4≈n4{T_1}{^*}(n)=30{n^4}≈{n^4}T1∗(n)=30n4≈n4
渐进意义下的记号 O、Ω、θO、Ω、θO、Ω、θ
n,f(n)≥0,g(n)≥0n , f(n)≥0,g(n)≥0n,f(n)≥0,g(n)≥0
渐进上界记号 OOO
若存在两个正常数 ccc 和 n0n_0n0 ,使得 n≥n0n≥n_0n≥n0,都有T(n)≤cf(n)T(n)≤cf(n)T(n)≤cf(n),则称T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n)),即f(n)f(n)f(n)是T(n)T(n)T(n)的上界。
例子:
用OOO表示T(n)=10n+4T(n)=10n+4T(n)=10n+4的阶。
- 存在c=12,n0=12c=12 , n_0=12c=12,n0=12,使得 n≥n0n≥n_0n≥n0 都有:
- T(n)=10n+4≤12nT(n) = 10n+4≤12nT(n)=10n+4≤12n成立
- 令f(n)=nf(n) = nf(n)=n,可得T(n)≤cf(n)=12nT(n)≤cf(n)=12nT(n)≤cf(n)=12n
- T(n)=O(f(n))=O(n)T(n) = O(f(n))= O(n)T(n)=O(f(n))=O(n)
例子:
用OOO表示T(n)=n2+nT(n)=n{^2}+nT(n)=n2+n的阶。
- 存在c=2,n0=1c=2 , n_0=1c=2,n0=1,使得 n≥n0n≥n_0n≥n0 都有:
- T(n)=n2+n≤2n2T(n) = n{^2}+n≤2n{^2}T(n)=n2+n≤2n2成立
- 令f(n)=n2f(n) = n{^2}f(n)=n2,可得T(n)≤cf(n)=2n2T(n)≤cf(n)=2n{^2}T(n)≤cf(n)=2n2
- T(n)=O(f(n))=O(n2)T(n) = O(f(n))= O(n{^2})T(n)=O(f(n))=O(n2)
存在c、n0c 、 n_0c、n0即是说只要找到就行,数值不唯一。
渐进下界记号 ΩΩΩ
若存在两个正常数 ccc 和 n0n_0n0 ,使得 n≥n0n≥n_0n≥n0,都有T(n)≥cf(n)T(n)≥cf(n)T(n)≥cf(n),则称T(n)=Ω(f(n))T(n)=Ω(f(n))T(n)=Ω(f(n)),即f(n)f(n)f(n)是T(n)T(n)T(n)的下界。与OOO相对
例子:
用ΩΩΩ表示T(n)=30n4+20n3+40n2+46n+100T(n)= 30 n{^4} + 20 n{^3} + 40n{^2} + 46n+ 100T(n)=30n4+20n3+40n2+46n+100
- 存在c=30,n0=1c=30 ,n_0=1c=30,n0=1,使得n≥n0n≥n_0n≥n0都有T(n)≥30n4T(n)≥30n^4T(n)≥30n4
- 构造f(n)=n4f(n)=n{^4}f(n)=n4,可得T(n)≥cf(n)=30n4T(n)≥cf(n)=30n^4T(n)≥cf(n)=30n4,
- 即T(n)=Ω(f(n))=Ω(n4)T(n)=Ω(f(n))=Ω(n^4)T(n)=Ω(f(n))=Ω(n4)
渐进精确界记号 θθθ
若存在3个正常数 c1、c2c_1、c_2c1、c2 和 n0n_0n0 ,使得 n≥n0n≥n_0n≥n0,都有c2f(n)≤T(n)≤c1f(n)c_2f(n)≤T(n)≤c_1f(n)c2f(n)≤T(n)≤c1f(n),则称T(n)=θ(f(n))T(n)=θ(f(n))T(n)=θ(f(n))。
例子:
用θθθ表示T(n)=20n2+8n+10T(n)=20n^2+8n+10T(n)=20n2+8n+10的阶
①①① 求得上界:
存在c1=29,n0=10c_1=29,n_0=10c1=29,n0=10,使得n≥n0n≥n_0n≥n0都有:
T(n)≤20n2+8n+n=20n2+9n≤20n2+9n2=29n2T(n)≤20n^2+8n+n=20n^2+9n≤20n^2+9n^2=29n^2T(n)≤20n2+8n+n=20n2+9n≤20n2+9n2=29n2。
构造f(n)=n2f(n)=n^2f(n)=n2,可得T(n)≤c1f(n)=29n2T(n)≤c_1f(n)=29n^2T(n)≤c1f(n)=29n2,即T(n)=O(f(n))=O(n2)T(n)=O(f(n))=O(n^2)T(n)=O(f(n))=O(n2);
②②② 求得下界:
存在c2=20,n0=10c_2=20,n_0=10c2=20,n0=10,使得n≥n0n≥n_0n≥n0都有T(n)≥20n2T(n)≥20n^2T(n)≥20n2
构造f(n)=n2f(n)=n^2f(n)=n2,可得T(n)≥c2f(n)T(n)≥c_2f(n)T(n)≥c2f(n)即T(n)=Ω(f(n))=Ω(n2)T(n)=Ω(f(n))=Ω(n^2)T(n)=Ω(f(n))=Ω(n2)
③③③ 求得精确界:
存在c1=29、c2=20c_1=29、c_2=20c1=29、c2=20和n0=10n_0=10n0=10,使得你≥n0你≥n_0你≥n0都有:
20n2≤T(n)≤29n220n^2≤T(n)≤29n^220n2≤T(n)≤29n2 可得T(n)=θ(f(n))=θ(n2)T(n)=θ(f(n))=θ(n^2)T(n)=θ(f(n))=θ(n2)。
算法复杂性和渐进复杂意义下的记号 O、Ω、θ相关推荐
- 模意义下的FFT算法
//写在前面 单就FFT算法来说的话,下面只给出个人认为比较重要的推导,详细的介绍可参考 FFT算法学习笔记 令v[n]是长度为2N的实序列,V[k]表示该实序列的2N点DFT.定义两个长度为N的实序 ...
- 算法复杂性分析及运算规则证明(一)
我们有必要知道算法的复杂性是算法运行所需要的计算机资源的量,需要空间资源的量称为空间复杂度,同样需要时间资源的量称为时间复杂度.那麽这个量与什么有关系呢? 这个量应该是只依赖于要解决的问题的规模,算法 ...
- 【计算理论】计算复杂性 ( 时间复杂度时间单位 : 步数 | 算法分析 | 算法复杂性分析 )
文章目录 一.时间复杂度时间单位 二.算法分析 三.算法复杂性分析 一.时间复杂度时间单位 图灵机计算时间 是根据 步数 进行定义的 , 图灵机走 111 步 , 时间加一 , 每一步的时间可能不一致 ...
- day2:算法之美|打开算法之门与算法复杂性
14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|函数特性与图形 day4.数学之美 ...
- 求解斐波那契数列模$p$意义下最短循环节
如题,毕克老师给我们出的noip(NOIplus)模拟赛的\(Day1T1\) 首先我们知道斐波那契数列的特征根 \[\phi_1=\frac{1+\sqrt{5}}{2}\] \[\phi_2=\f ...
- 【算法】妙不可言---算法复杂性
#14天阅读挑战赛# 14天阅读挑战赛 CSDN近期举办14天阅读打卡活动 目录 一.算法复杂性 ◼ 一棋盘粮有多少 ◼ 神奇的兔子数列 一.算法复杂性 如果我们想要求这样一个序列的每个元素之和: 你 ...
- (算法设计与分析)第一章算法概述-第一节:算法基本概念和算法复杂性分析
文章目录 一:算法与程序 (1)算法的定义 (2)算法的五大特征 (3)算法与程序的区别 (4)算法的描述方法 二:算法复杂性分析 (1)时间复杂度 A:算法时间复杂度表示方法 B:表示算法渐进时间复 ...
- Lyapunov意义下的稳定性定义
这里写自定义目录标题 1.稳定 1.1定义 1.2 Lyapunov稳定性定义的几何解释 2. 渐进稳定 2.1 定义 2.2 几何含义 3. 大范围渐近稳定 如图所示的三个曲面,小球均处于平衡点,考 ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence 矩阵快速幂,原根转化模意义下对数,BSGS
文章目录 题意 题解 对数法转指数线性递推 原根与模意义下求对数 拔山盖世! 最终步骤 Problem Origin 狠搞了一个多星期,做出来之后仍然一知半解,写个博客重理思路. 题意 定义序列fff ...
最新文章
- 应用构建工具包 Ecere SDK
- SQL基础(五)-- 递归
- csgo陀螺仪是什么意思_CSGO:起源2将在五月中旬推出?B5无意间透露出这个消息...
- BZOJ1299[LLH邀请赛]巧克力棒——Nim游戏+搜索
- loadrunner—事务、TPS
- winddows 运行指令 (2)
- 每日一笑 | 为什么Python比Java更受欢迎?
- ubuntu改变进程优先级从而防止卡
- (93)异步FIFO结构,为什么用格雷码? ,面试必问(十七)(第19天)
- shell 除法 小数点
- Ubuntu安装MyEclise16 过程差不多
- php验证码雪花源码,php如何生成雪花背景验证码(附代码)
- putty提示Network error:Software caused connection abort
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- CNDS-Markdown之公式编辑(一)
- MySQL学习(一)脏读、不可重复读、幻读(鸣人和佐助上学的故事)
- Unity 使用Socket 简单实现通讯
- C语言实现url的编码和解码
- python3 zip命令_Python调用zip命令正确操作方法解析
- JS正则表达式-附身份证号码验证(简易版)
热门文章
- [mysql]数据迁移之data目录复制方法
- linux grep显示一行,Linux shell 之grep
- 为了与亚马逊竞争 沃尔玛开始通过分析UGC内容做商品推荐
- 广告精准投放数据分析
- Zoom视频会议,允许参会者在主持人到来前加入会议
- Embedded statement cannot be a declaration or labeled statement 错误
- python调用sql数据库进存销_python多进程快速批量爬取黄页海量信息并保存文本和数据库教程...
- 医院医生和护士都不愿说的医学小常识,不看不知道,一 看吓一跳!
- 执行sudo命令时command not found的解决办法
- sudo命令免密码 sudo免密码