算法的时间复杂度和空间复杂度是衡量算法效率的两个重要指标。
衡量一个算法的好坏,一般是从时间和空间两个维度去衡量的。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。
一、时间复杂度
1. 定义:时间复杂度是指算法执行所需的时间与问题规模之间的关系。问题规模通常用输入数据的大小来表示。(简单的来说就是执行这个程序时,需要循环多少次)
2. 表示方法(大O渐进表示法):一般用大 O 符号表示。例如,O(n)表示时间复杂度与输入数据的大小 n 呈线性关系。
3. 常见时间复杂度类型:
- 常数时间复杂度 O(1):无论输入数据的大小如何,算法执行的时间都是恒定的。例如,访问数组中的单个元素。(简单来说就是循环次数为常数)
- 对数时间复杂度 O(log n):算法执行的时间与输入数据的大小呈对数关系。例如,二分查找算法。
- 线性时间复杂度 O(n):算法执行的时间与输入数据的大小呈线性关系。例如,遍历一个数组。
- 线性对数时间复杂度 O(n log n):常见于一些高效的排序算法,如快速排序和归并排序。
- 平方时间复杂度 O(n²):算法执行的时间与输入数据的大小的平方呈正比关系。例如,冒泡排序算法。
- 立方时间复杂度 O(n³)及更高:算法执行的时间与输入数据的大小的立方或更高次方呈正比关系。
二、空间复杂度
1. 定义:空间复杂度是指算法执行所需的存储空间与问题规模之间的关系。(简单来的说是开辟变量占据额外临时存储空间的量度)
2. 表示方法(大O渐进表示法):同样用大 O 符号表示。例如,O(n)表示空间复杂度与输入数据的大小 n 呈线性关系。
3. 常见空间复杂度类型:
- 常数空间复杂度 O(1):算法执行所需的存储空间是恒定的,不随输入数据的大小而变化。
- 线性空间复杂度 O(n):算法执行所需的存储空间与输入数据的大小呈线性关系。例如,创建一个与输入数组大小相同的新数组。
- 平方空间复杂度 O(n²):算法执行所需的存储空间与输入数据的大小的平方呈正比关系。