本篇文章将要介绍:

文章目录

  • 1、什么是算法分析
  • 2、算法分析专有名词
  • 3、渐进算法分析
    • a)、时间复杂度化简规则
    • b)、如何得到算法的增长率
    • c)、两个函数的增长率比较
  • 4、渐进算法分析的局限性
  • 5、算法分析扩展
    • a)、问题的代价分析
    • b)、空间代价
    • c)、空间时间权衡原则
    • d)、基于磁盘的空间/时间权衡规则

1、什么是算法分析

要明确算法分析这个概念,就要知道计算机程序设计的两个核心目标:

  1. 程序员角度:设计一种容易理解、编码和调试的算法
  2. 计算机角度:设计一种能有效利用计算机资源的算法

算法分析就是从计算机角度分析,是对一个算法需要多少计算时间和存储空间作定量的分析。它可以估算出当问题规模变大时,一种算法及实现它的程序的效率和开销,这是一种事前分析估算的方法。

2、算法分析专有名词

问题: 需要完成的任务,即一组输入会有想应的输出,可以看出从输入到输出的一个函数。
算法: 指解决问题的一种方法或一个过程。是对特定问题求解步骤的一种秒数,在计算机中体现为指令的有限序列,其中一条指令表示一个或多个操作。
算法的四个特性:

  • 正确性: 必须完成期望的功能,因此必须要有输入和输出,并且能够将输入正确地转换为输出。
  • 可行性: 算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
  • 确定性: 必须无二义性,算法的每一个步骤都必须有明确的定义。
  • 有限性: 步骤一定是有限的,并且执行完成的时间一定是有限的。

程序: 使用某种程序设计语言对一个算法的实现。
问题规模: 指的是输入量的数目。
基本操作: 一个基本操作必须具有这样的性质:完成该操作所需时间与操作数的具体取值无关。
语句频度: 语句的频度指的是该语句执行的次数。
算法的代价: 是算法的效率的度量

  • 一个算法如果能在所要求的资源限制内将问题解决好,就说这个算法是有效率的。
  • 分类:
    • 时间代价:需要的时间资源的量
    • 空间代价:需要的空间资源的量
  • 算法代价的度量: 运行时间和所占空间大小。 影响因素:
    • 算法或数据结构的差异
    • 程序的编译和运行环境,如计算机的总线等外部设备,还有机器代码的质量等。需要完成的任务
      增长率: 当输入的规模增长时,算法代价的增长速率。
      T(n): 常表示为算法的时间代价函数,n为输入的规模

3、渐进算法分析

渐进算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论它的复杂度,探讨具体算法对问题的适应性。探讨当问题输入规模很大或者达到极限的时候,算法代价的变化,是一种事前分析的方法。

大O表示法: 算法运行时间的上限。 对于非负函数T(n),若存在两个正常数c和n0,使得当n>n0时有T(n)≤cf(n),则称T(n)在集合O(f(n))中,记为T(n)∈O(f(n))。常数n0称为使得上限成立的n的最小值,一般情况下n0取值都很小。通常我们会选择一找到一个最"紧"的上限,因为这样的上限是最贴近算法代价的增长率的。

大Ω表示法:

  • 类似于大O表示法的定义
    算法运行时间的下限。对于非负函数T(n),若存在两个正常数c和n0,使得当n>n0时有T(n)≥cg(n),则称T(n))在集合Ω(g(n))中,记为T(n)∈Ω(g(n))。同样,通常我们会选择一找到一个最"紧"的下限,因为这样的下限是最贴近算法代价的增长率的。

  • 更严谨的一种定义:
    如果存在正常数c,对无穷多个n使得T(n) ≥ cg(n)成立,则称T(n))在集合Ω(g(n))中,这种定义方式更加严谨,对于一些分段函数,有一部分是无法找到相应的常数的,这是我们需要取复杂度大的那个,用此定义就可以直接找出。

Θ表示法: 当上、下限相等时,我们就可以用Θ表示法。即如果非负函数T(n)既在O(h(n))中,又在Ω(h(n))中,则称T(n)是Θ(h(n))。这是也说T(n)与h(n)同阶。

对于一些算法,在相同问题的输入规模下,并不是所有的输入情况的时间复杂度都是相同的,他们往往有以下几种情况:
最佳情况时间复杂度: 在给定规模时,某个算法在最好的输入情况下算法的时间复杂度。
最差情况时间复杂度: 在给定规模时,某个算法在最差的输入情况下算法的时间复杂度。
平均情况时间复杂度: 在给定规模时,算法的"典型"时间代价,即考虑它对于所有可能的输入数据集的代价期望值。(一般为等概率平均,问题遍历每一个数据的概率相同)

a)、时间复杂度化简规则

  1. 传递性。
    若f(n)∈O(g(n))中,且g(n)在O(h(n))中,则f(n)在O(h(n))中。
  2. 常数系数可忽略。
    若f(n)在O(kg(n))中对于任意常数k>0成立,则f(n)在O(h(n))中; 因为常数系数不会影响时间代价函数的增长率。
  3. 低阶可忽略
    若f1(n) 在O(g1(n))中,f2(n)在O(g2(n))中,则f1(n) +f2(n) 在O( max (g1(n),g2(n) ) ) 中 。
  4. 函数相乘则复杂度相乘
    若若f1(n) 在O(g1(n))中,f2(n)在O(g2(n))中,则f1(n) *f2(n) 在O( g1(n)*g2(n)) 中 。

b)、如何得到算法的增长率

方法: 定义估算归纳法

  • 分析问题或算法时,可以求出代价和输入规模的函数T(n),再通过化简规则进行化简即可。如果不能得到T(n)的准确算术表达式,可以用估算和猜测法得到表达式。
  • 利用增长率的上限和下限的定义,采用归纳法,推导出函数的上限和下限。从而得到求解问题的方法或算法增长率的上限和下限。

c)、两个函数的增长率比较

如果已知两个函数的增长率的算数表达式,判断哪个增长率更快的方式: 判断两个函数比值的极限lim f(n)/g(n) n-> 无穷

  • 如果极限值趋向于无穷,则f(n)在Ω(g(n))中,因为f(n)增长得更快。
  • 如果极限值趋向于0,则f(n)在O(g(n))中,因为g(n)增长得更快。
  • 如果极限值趋向于非0常数,则f(n)等于θ(g(n)),因为f(n)和g(n)增长率相同。

4、渐进算法分析的局限性

  • 当数据规模较小时,对估算结果有偏差
  • 增长率相同,无法区分系数不同的情况
  • 对困难问题进行数学建模难得出分析结果

5、算法分析扩展

a)、问题的代价分析

  • 问题代价的上限:已知最优解算法的代价上限
  • 问题代价的下限:所有可能算法的代价下限(包括尚未涉及出来的算法)

b)、空间代价

  • 与分析时间代价类似
  • 渐进分析中增大率的概念对于空间代价同样适用
  • 时间代价是相对于处理某个数据结构算法而言的
  • 空间代价是相对于该数据结构本身而言的

空间开销: 算法需要的磁盘或内存空间的大小
空间浪费: 是一个数据结构中预先分配的空间减去当前时机存储的数据,标识空间的利用率
结构性开销: 是数据结构实现时,为了便于有效地访问而附加的一些信息,这些并非真正数据的附加信息称为结构性开销。使用一些数据结构的结构性开销可以提高对数据结构访问的简单性与有效性,但同时要保证结构性开销尽可能的小。

c)、空间时间权衡原则

  • 以空间换时间:信息压缩存储
  • 以空间换时间:查找表

d)、基于磁盘的空间/时间权衡规则

在磁盘上的存储代价越小,程序运行得越快。这是因为从磁盘上读取数据的时间代价远远大于用于计算的时间代价,于是几乎所有用于对数据进行解压缩的额外操作的时间代价,都小于减少存储代价后节约下来的读盘时间。

渐进算法分析(简称算法分析)详解相关推荐

  1. 【算法分析】分支限界法详解+范例+习题解答

    [算法分析]分支限界法详解+范例+习题解答

  2. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  3. 核函数与径向基函数 (Radial Basis Function 简称 RBF)详解

    1.核函数 1.1核函数的由来 -----------还记得为何要选用核函数么?----------- 对于这个问题,在Jasper's Java Jacal博客<SVM入门(七)为何需要核函数 ...

  4. python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

    #2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...

  5. 【算法分析】贪心法详解+范例+习题解答

    [贪心法]动态规划详解+范例+习题解答

  6. DID会固定年份吗_倍分法DID详解 (二):多时点 DID (渐进DID)

    作者:王昆仑 (天津大学) Stata连享会 计量专题  || 公众号合集 2020寒假Stata现场班 (北京, 1月8-17日,连玉君-江艇主讲) 「+助教招聘」 2020寒假Stata现场班 文 ...

  7. 数据结构:渐进记法详解

    渐进记法详解 渐进记法有三种表示: 1.大O记法:T(n)=O(f(n))表示存在常数c>0,n0>0,使得当n>=n0时,有T(n)<=cf(n). 2.Ω记法:T(n)=Ω ...

  8. DID会固定年份吗_倍分法DID详解 (三):多时点 DID (渐进DID) 的进一步分析

    作者:王昆仑 (天津大学) E-mail: shawn0513@163.com 连享会专题课程:DSGE 模型及应用 连享会 DSGE 专题课程 这是连享会「倍分法(DID)专题推文」系列的第三篇文章 ...

  9. 倍分法DID详解 (二):多时点 DID (渐进DID)

      作者:王昆仑 (天津大学)   Stata连享会 计量专题 || 公众号合集   导入 在 「连享会 - 倍分法系列推文」-- 「倍分法DID详解 (一):传统 DID」 文中,我们详细介绍了 D ...

  10. 数据结构与算法之时间复杂度详解

    数据结构与算法之时间复杂度详解 目录 排序算法的介绍和分类 算法的时间复杂度概念 常见的时间复杂度解析 平均时间复杂度和最坏时间复杂度 空间复杂度介绍 1. 排序算法的介绍和分类 排序算法的介绍 排序 ...

最新文章

  1. 百度怎么不挣钱?一个吧居然有不下10种广告!
  2. 数据结构(Splay平衡树):HAOI2008 排名系统
  3. vim全局搜索并跳转
  4. C语言写的俄罗斯方块
  5. Winform中使用异或算法对数字进行加密解密
  6. shiro的登录 subject.login(token)中执行逻辑和流程
  7. 工厂三兄弟之简单工厂模式
  8. LeetCode 623. 在二叉树中增加一行(BFS/DFS)
  9. python定时任务_Python 定时任务最佳实践
  10. [LUOGU1437] 敲砖块
  11. php脚本搭vps,#分享#基于宝塔面板的ZFaka(发卡程序)一键脚本
  12. 整数规划---指派问题
  13. Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
  14. matlab小波去噪wden,MATLAB小波去噪
  15. FileUriExposedException异常:file://与content://
  16. 全球及中国建筑涂料市场盈利能力分析与产值规模预测报告2022版
  17. 南京计算机徐宪忠,nakaga
  18. 日本日野汽车因尾气数据造假问题受到调查
  19. 硬盘内部硬件结构和工作原理详解
  20. betaflight 10.8.0_win10调试笔记(未完待续)

热门文章

  1. 如何使用高程DEM建立三维地图模型(Arcgis ArcScene)
  2. 分数一定是有理数吗?
  3. 实测 (三)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图
  4. 布隆过滤器 - Redis 布隆过滤器,Guava 布隆过滤器 BloomFilter
  5. 2021 年度个税汇算清缴申报流程来了
  6. 什么是平台(平台商业模式)
  7. javascript获取手机键盘的高度
  8. ccie入门学习day1
  9. 利用jacob操作word文档
  10. 高通Camera bring up软件流程【转】