一、基础概念

1、什么是数据结构?

数据结构:就是一个能组在一起的集合对象。比如:数组,链表,队列等。

2、什么是算法?

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

数据结构与算法有什么关系?

程序 = 数据结构 + 算法

  • 数据结构:如何用数据正确地描述现实世界的问题(逻辑结构),并存入计算机(存储结构)。
  • 算法:如何高效地处理上述这些数据,以解决实际问题。

可见数据结构是将现实问题转化为电脑可以处理的数据,而算法则是求解问题的步骤;因此针对同一数据结构,求解问题的步骤方法可以不同,因此使用的算法也可以不同。

2.1 算法的特性

算法的五个特征:有穷性、确定性、可行性、有输入、有输出

2.2 设计原则

  • 正确性
  • 可读性
  • 健壮性(少bug):写出代码很少会出现bug,而且系统比较稳定。
  • 高效率与低存储:内存 + CPU,内存占用最小(防止OOM),CPU占用最小,运算速度最快。

2.3 评价算法的两个重要指标

  • 时间复杂度:运行一个程序所花费的时间。
  • 空间复杂度:运行程序所需要占用的内存大小。

3、时间复杂度

3.1 时间复杂度

时间复杂度:运行一个程序所花费的时间。

时间复杂度表示法:大O渐进表示法

比如:O(1),O(n),O(nlogn),O(n^2),O(logn),O(n!)。

3.2 时间复杂度如何来分析

  • 找到有循环的地方,而且要找循环量最大的那一段
  • 找有网络请求(RPC,远程调用,分布式,数据库请求)的地方。估算平均时间。

注意:计算时间复杂度往往是计算比较大的,而且是不确定的数,如果已经确定了,那么就不用计算了,也是我们说的常量,常量可以忽略。

3.3 时间复杂度分析比较

时间复杂度分类:

  • 常数:O(1) 1表示是常数,所有能确定的数字我们都用O(1)。比如O(1000) = O(1)
  • 对数:O(logn),O(nlogn)
  • 线性:O(n)
  • 线性对数:O(nlogn)
  • 平方:O(n^2)
  • N次方:O(n^n)

记忆方式:常 < 对 < 幂< 指 < 阶

数据结构与算法 博客 《数据结构与算法》_数据结构

几种常见的时间复杂度分析:

数据结构与算法 博客 《数据结构与算法》_数据结构_02

4、空间复杂度

4.1 什么是空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。

空间复杂度表示法:大O渐进表示法

空间复杂度不是程序占用了多少 bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。
比如:O(1),O(n),O(nlogn),O(n^2),O(logn),O(n!)。

参考文章讲的很详细

  • 【数据结构】一篇文章带你彻底吃透·算法复杂

– 求知若饥,虚心若愚。