美文网首页
算法分析

算法分析

作者: 观语小白 | 来源:发表于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