408数据结构知识点——第一章 绪论(二)

文章目录

    • 算法和算法评价
      • 算法的基本概念
        • 什么是算法
        • 算法的特性
        • 算法与程序的区别
        • “好”算法的特质
      • 算法的时间复杂度
      • 算法的空间复杂度

注:内容参考王道2024考研复习指导以及《算法分析与设计》

算法和算法评价

算法的基本概念

什么是算法

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。

算法的特性
  • 有穷性:一个算法必须保证执行有限步之后结束,且每一步都可在有穷时间内容完成。
  • 确切性:算法的每一步骤必须有确切的定义,对于相同的输入只能得到相同的输出。
  • 输入:一个算法有0个或多个输入。
  • 输出:一个算法有一个或多个输出。
  • 可行性:算法原则上能够精确地运行,算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
算法与程序的区别

程序是算法用某种程序设计语言的具体实现。不满足算法的有穷性。

具体区别如下:

  • 一个程序不一定满足有穷性,例如操作系统是一个在无限循环中执行的程序。
  • 程序的指令必须是机器可执行的,而算法中的指令则无此限制。
  • 算法代表了对问题的解,而程序则是算法在计算机上的特定实现。
“好”算法的特质

​ 1)正确性,算法应该能够正确地解决求解问题。

​ 2)可读性,算法应具有良好的可读性,以帮助人们理解。

​ 3)健壮性,输入非法数据时,算法能适当地做出反应或进行处理,而不会莫名其妙的输出结果。

​ 4)高效率与低存储量需求。

算法的时间复杂度

算法的时间复杂度:针对指定的基本运算,计数算法所做的运算次数。

算法所耗费的时间应是算法中每条语句的执行时间之和,而每条语句的执行时间就是该语句的执行次数(频度)与该语句执行一次所需时间的乘积

事前预估算法时间开销 T ( n ) T(n) T(n)问题规模 n n n的关系。

如何计算(非递归算法)

  1. 找到最深层循环的一个基本操作
  2. 分析该操作的执行次数 x x x与问题规模 n n n的关系, x = f ( n ) x=f(n) x=f(n)
  3. 算法时间复杂度 T ( n ) T(n) T(n)= x x x的数量级 O ( x ) O(x) O(x)

对于递归算法,可采取两种方法来计算

  1. 迭代法

    408数据结构知识点——第一章 绪论(二)_第1张图片

  2. 主方法

    408数据结构知识点——第一章 绪论(二)_第2张图片

算法时间复杂度分为以下三种:

最坏时间复杂度:最坏情况下算法的时间复杂度

平均时间复杂度所有输入示例等概率出现的情况下,算法的期望运行时间

最好时间复杂度:最好情况下算法的时间复杂度

算法的空间复杂度

非递归算法

  1. 找到所占空间大小与问题规模相关的变量
  2. 分析所占空间 x x x与问题规模 n n n的关系 x = f ( n ) x=f(n) x=f(n)
  3. 算法空间复杂度 S ( n ) S(n) S(n)= x x x的数量级 O ( x ) O(x) O(x)

递归程序

  1. 找到递归调用的深度 x x x与问题规模 n n n的关系, x = f ( n ) x=f(n) x=f(n)
  2. 算法空间复杂度 S ( n ) S(n) S(n)= x x x的数量级 O ( x ) O(x) O(x)
  3. 注:存在算法各层函数所需的存储空间不同,分析方法1有所区别。

如果一个算法的 S ( n ) = 1 S(n)=1 S(n)=1,我们称该算法原地工作

你可能感兴趣的:(数据结构,考研)