本次笔记内容:
1.2.1 算法的定义
1.2.2 什么是好的算法
1.2.3 复杂度的渐进表示

算法

算法是一个有限的指令集,一定在有限步骤之后终止,产生输出。

  • 每一条指令必须有充分明确的目标,不可以有歧义;
  • 计算机能处理的范围之内;
  • 描述应不依赖于任何一种计算机语言以及具体的实现手段。

例:选择排序算法的伪码描述

【数据结构笔记02】什么是算法_数据结构

算法的优劣

  • 空间复杂度S(n),占用存储单元的长度
  • 时间复杂度T(n),耗费时间的长度

例:打印N个整数递归

【数据结构笔记02】什么是算法_数据结构_02

在调用PrintN(99999)前,PrintN(100000)由于还没有返回,其变量N=100000被存在内存中。以此类推。其空间复杂度与N呈线性关系。

例:求多项式的值

【数据结构笔记02】什么是算法_数据结构_03

什么是好的算法?

在分析一般算法的效率时,经常只关注下面两种复杂度:

  • 最坏情况复杂度 T w o r s t ( n ) T_{worst}(n) Tworst(n)
  • 平均复杂度 T a v g ( n ) T_{avg}(n) Tavg(n)
  • 通畅分析最坏情况复杂度

复杂度的渐进表示法

  • T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n ≥ n 0 n \ge n_0 nn0时有 T ( n ) ≤ C ⋅ f ( n ) T(n) \le C \cdot f(n) T(n)Cf(n)
  • T ( n ) = Ω ( f ( n ) ) T(n)=\Omega (f(n)) T(n)=Ω(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n ≥ n 0 n \ge n_0 nn0时有 T ( n ) ≥ C ⋅ f ( n ) T(n) \ge C \cdot f(n) T(n)Cf(n)
  • T ( n ) = Θ ( f ( n ) ) T(n)=\Theta (f(n)) T(n)=Θ(f(n))表示存在常数 C > 0 C>0 C>0, n 0 > 0 n_0>0 n0>0使得当 n = n 0 n = n_0 n=n0时有 T ( n ) = C ⋅ f ( n ) T(n) = C \cdot f(n) T(n)=Cf(n)

【数据结构笔记02】什么是算法_数据结构_04

【数据结构笔记02】什么是算法_数据结构_05