Bootstrap

算法效率分析

1.算法定义

  • 研究对象的特性及其相互之间的关系—逻辑结构;
  • 有效的组织计算机存储—存储结构;
  • 有效的实现对象间的“运算”关系—算法;

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

2.算法与程序

  • 算法是解决问题的一种方法或过程,考虑如果将输入转化为输出,一个问题可以有多种算法;
  • 程序是用某种程序设计语言来实现算法的;
  • 算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤;
  • 程序是计算机指令的有序集合,是算法用某种程序设计语言的表述,是算法在计算机上的具体实现;

3.算法特性

  • **输入:**算法具有零个或多个输入;
  • **输出:**至少有一个或多个输出,算法是一定要有输出的;
  • **有穷性:**指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成;
  • **确定性:**算法的每一个步骤都具有确定的含义,不会出现二义性;
  • **可行性:**每一步都可行,且能够通过执行所有限次数完成;

4.算法设计的要求

  • **正确性(Correctness)😗*指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案;
  • **可读性(Readability)😗*为了便于阅读、理解;
  • **健壮性(Robustness)😗*当输入的数据不合法时,算法也能做出相应的处理,不是产生异常或者莫名其妙的结果;
  • **高效性(Efficiency)😗*指的是时间效率高和存储量低;

在这里插入图片描述

5.算法时间效率的度量

  • 依据该算法编写的程序在计算机上执行时所消耗的时间来度量,度量一个程序的执行时间通常有两种方法:

​ (1)事后统计估计:让算法先运行,事后统计其执行时间;

​ (2)事前分析估计:认为算法的执行时间时问题规模n的函数,用T(n)表示;

​ 算法运行时间 = 每条语句的执行次数 x 该语句一次执行所耗费的时间

  • 一般情况下, 算法中基本语句重复执行的次数是问题规模 n 的某个函数f(n), 算法的时间量度记作: T(n) = O(f(n));
  • 它表示随问题规模 n 的增大,算法执行时间的增长率 和 f(n)的增长率相同, 称做算法的渐近时间复杂度,简称时间复杂度;
  • 基本方法:

​ 找出语句频度最大的那条语句作为基本语句;

​ 计算基本语句的频度得到问题规模n的某个函数f(n);

​ 取其数量级用符号“O”表示;

  • 注意:算法中基本操作重复执行的次数还随问题的输入数据集的不同而不同

  • 对于复杂的算法,可以将它分为几个容易估算的部分,然后再利用加法法则和乘法法则计算算法的时间复杂度:

​ **加法法则:**T(n) = T1(n)+T2(n) = o(f(n))+ o(g(n))= o(max(f(n),g(n)))

​ **乘法法则:**T(n) = T1(n)×T2(n) = o(f(n))×o(g(n))= o(f(n)xg(n))

6.算法的空间效率的度量

作为算法所需存储空间的度量,简称空间复杂度,它也是问题规模n的函数,记作:

​ S(n) = O(f(n))

  • 算法占据的空间:

​ 算法本身要占据的空间,输入/输出、指令、常数、变量等;

n) = O(f(n))

  • 算法占据的空间:

​ 算法本身要占据的空间,输入/输出、指令、常数、变量等;

​ 算法要使用的辅助空间单元个数;

;