美文网首页
算法分析

算法分析

作者: 观语小白 | 来源:发表于2020-03-04 03:55 被阅读0次

    问题的分类

    • What:是什么

      面向判断与分类的问题
    • why:为什么

      面向求因与证明的问题
    • How:怎么做

      面向过程与构建的问题

    计算复杂性

    • "基于有穷观点的能行方法"的"可计算概念"
      • 仅仅涉及到问题的解决是否能在有限资源内(时间/空间)完成
      • 并不关心具体要花费多少计算步骤或多少存储空间
    • 由于资源相当有限,对于问题的解决考虑其可行性如何

    计算复杂性与算法

    • 计算复杂性理论研究问题的本质,将各种问题按照其难易程度分类,研究各类问题的难度级别,并不关心解决问题的具体方案
    • 而算法研究问题在不同现实资源约束情况下的不同解决方案,致力于找到效率最高的方案

    抽象与实现

    "抽象"发生在各个不同的层次上

    • 即使对于程序员来说,使用编程语言进行编程,也会涉及到"抽象"
    • 如计算一个数的平方根
      • 可以调用库函数math.sqrt,直接得到结果,而无需关心其内部如何实现
      • 这种功能上的"黑盒子"称作过程抽象Procedural Abstraction

    抽象与实现:编程

    • 编程是通过一种程序设计语言,将抽象算法实现为计算机可以执行的代码的过程
    • 图灵奖获得者Niklaus Wirth的著名公式:

    算法+数据结构=编程

    • 程序设计语言需要为算法的实现提供实现过程数据的机制
      • 具体表现为"控制结构"和"数据类型"

    大O表示法

    算法时间度量指标

    • 一个算法所实施的操作数量或步骤数可作为独立于具体程序/机器的度量指标
      +哪种操作跟算法的具体实现无关?
      +需要一种通用的基本操作来作为运行步骤的计量单位
    • \color{#FF4500}{赋值语句}是一个合适的选择
      • 一条赋值语句同时包含了\color{#FF4500}{表达式}计算和\color{#FF4500}{变量}存储两个基本资源
      • 仔细观察程序设计语言特性,除了与计算资源无关的定义语句外,主要就是三种控制流语句和赋值语句,而控制流仅仅起了组织语句的作用,并不实施处理。

    问题规模影响算法执行时间

    • 问题规模:影响算法执行时间的主要因素
    • 算法分析的目标是要找出\color{#FF4500}{问题规模}会怎么影响一个算法的\color{#FF4500}{执行时间}

    数量级函数 Order of Magnitude

    • 基本操作数量函数T(n)的精确值并不是特别重要,重要的是T(n)中起决定性因素的\color{#FF4500}{主导}部分
      • 用动态的眼光看,就是当问题规模增大的时候,T(n)中的一些部分会盖过其他部分的贡献
    • 数量级函数表述了T(n)中随着n增加而增加速度\color{#FF4500}{最快}的主导部分
      • 称作“大O”表示法,记作\color{#FF4500}{O(f(n))},其中\color{#FF4500}{f(n)}表示T(n)中的主导部分

    常见的大O数量级函数

    • 通常当m比较小的时,难以确定其数量级
    • 当n增长到较大时,容易看出其主要变化数量级
    f(n) 名称
    1 常数
    log(n) 对数
    n 线性
    n*log(n) 对数线性
    n2 平方
    n3 立方
    2n 指数

    相关文章

      网友评论

          本文标题:算法分析

          本文链接:https://www.haomeiwen.com/subject/tzjelhtx.html