算法复杂性

算法复杂性 === 算法运行时所需要的计算机资源的量

通常指的是空间、时间资源

影响时间复杂性的因素

影响时间复杂性的因素有: 问题规模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 趋于无穷大使得

lim⁡n→∞T(n)−T∗(n)T(n)=0\lim_{n→∞}\cfrac{T(n)-T^*(n)}{T(n)}=0 n→∞lim​T(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

则:
lim⁡n→∞T1(n)−T1∗(n)T1(n)=lim⁡n→∞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→∞lim​T1​(n)T1​(n)−T1​∗(n)​=n→∞lim​30n4+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)c2​f(n)≤T(n)≤c1​f(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)≤c1​f(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)≥c2​f(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、Ω、θ相关推荐

  1. 模意义下的FFT算法

    //写在前面 单就FFT算法来说的话,下面只给出个人认为比较重要的推导,详细的介绍可参考 FFT算法学习笔记 令v[n]是长度为2N的实序列,V[k]表示该实序列的2N点DFT.定义两个长度为N的实序 ...

  2. 算法复杂性分析及运算规则证明(一)

    我们有必要知道算法的复杂性是算法运行所需要的计算机资源的量,需要空间资源的量称为空间复杂度,同样需要时间资源的量称为时间复杂度.那麽这个量与什么有关系呢? 这个量应该是只依赖于要解决的问题的规模,算法 ...

  3. 【计算理论】计算复杂性 ( 时间复杂度时间单位 : 步数 | 算法分析 | 算法复杂性分析 )

    文章目录 一.时间复杂度时间单位 二.算法分析 三.算法复杂性分析 一.时间复杂度时间单位 图灵机计算时间 是根据 步数 进行定义的 , 图灵机走 111 步 , 时间加一 , 每一步的时间可能不一致 ...

  4. day2:算法之美|打开算法之门与算法复杂性

    14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|函数特性与图形 day4.数学之美 ...

  5. 求解斐波那契数列模$p$意义下最短循环节

    如题,毕克老师给我们出的noip(NOIplus)模拟赛的\(Day1T1\) 首先我们知道斐波那契数列的特征根 \[\phi_1=\frac{1+\sqrt{5}}{2}\] \[\phi_2=\f ...

  6. 【算法】妙不可言---算法复杂性

    #14天阅读挑战赛# 14天阅读挑战赛 CSDN近期举办14天阅读打卡活动 目录 一.算法复杂性 ◼ 一棋盘粮有多少 ◼ 神奇的兔子数列 一.算法复杂性 如果我们想要求这样一个序列的每个元素之和: 你 ...

  7. (算法设计与分析)第一章算法概述-第一节:算法基本概念和算法复杂性分析

    文章目录 一:算法与程序 (1)算法的定义 (2)算法的五大特征 (3)算法与程序的区别 (4)算法的描述方法 二:算法复杂性分析 (1)时间复杂度 A:算法时间复杂度表示方法 B:表示算法渐进时间复 ...

  8. Lyapunov意义下的稳定性定义

    这里写自定义目录标题 1.稳定 1.1定义 1.2 Lyapunov稳定性定义的几何解释 2. 渐进稳定 2.1 定义 2.2 几何含义 3. 大范围渐近稳定 如图所示的三个曲面,小球均处于平衡点,考 ...

  9. Codeforces 1106F Lunar New Year and a Recursive Sequence 矩阵快速幂,原根转化模意义下对数,BSGS

    文章目录 题意 题解 对数法转指数线性递推 原根与模意义下求对数 拔山盖世! 最终步骤 Problem Origin 狠搞了一个多星期,做出来之后仍然一知半解,写个博客重理思路. 题意 定义序列fff ...

最新文章

  1. 应用构建工具包 Ecere SDK
  2. SQL基础(五)-- 递归
  3. csgo陀螺仪是什么意思_CSGO:起源2将在五月中旬推出?B5无意间透露出这个消息...
  4. BZOJ1299[LLH邀请赛]巧克力棒——Nim游戏+搜索
  5. loadrunner—事务、TPS
  6. winddows 运行指令 (2)
  7. 每日一笑 | 为什么Python比Java更受欢迎?
  8. ubuntu改变进程优先级从而防止卡
  9. (93)异步FIFO结构,为什么用格雷码? ,面试必问(十七)(第19天)
  10. shell 除法 小数点
  11. Ubuntu安装MyEclise16 过程差不多
  12. php验证码雪花源码,php如何生成雪花背景验证码(附代码)
  13. putty提示Network error:Software caused connection abort
  14. [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
  15. CNDS-Markdown之公式编辑(一)
  16. MySQL学习(一)脏读、不可重复读、幻读(鸣人和佐助上学的故事)
  17. Unity 使用Socket 简单实现通讯
  18. C语言实现url的编码和解码
  19. python3 zip命令_Python调用zip命令正确操作方法解析
  20. JS正则表达式-附身份证号码验证(简易版)

热门文章

  1. [mysql]数据迁移之data目录复制方法
  2. linux grep显示一行,Linux shell 之grep
  3. 为了与亚马逊竞争 沃尔玛开始通过分析UGC内容做商品推荐
  4. 广告精准投放数据分析
  5. Zoom视频会议,允许参会者在主持人到来前加入会议
  6. Embedded statement cannot be a declaration or labeled statement 错误
  7. python调用sql数据库进存销_python多进程快速批量爬取黄页海量信息并保存文本和数据库教程...
  8. 医院医生和护士都不愿说的医学小常识,不看不知道,一 看吓一跳!
  9. 执行sudo命令时command not found的解决办法
  10. sudo命令免密码 sudo免密码