日常开发中,合适的数据结构 + 算法思路,能有效帮助我们提升程序的运行效率,并节省资源空间。
这里,我们先来介绍下学习数据结构和算法需要了解的基本概念。
算法复杂度
算法复杂度一般用时间复杂度和空间复杂度来计算,用 Big O 表示法来表示。
常用概念解释:
T(n):代码执行时间
n:数据规模
f(n):每行代码执行次数总和
O:代码的执行时间,与f(n)成正比
常用的表示法及示例
O(1):常量
数组中,通过下标找元素
O(log n):对数
有序数组中,使用二分查找
O(n):线性
无序数组中,查找一个元素
O(n log n):线性对数
归并排序、堆排序
O(n^2):平方
选择排序、插入排序、冒泡排序
O(2^n):指数
找出一个列表的所有子集
O(n!):阶乘
找出一个列表的所有排列
总结
-
基于现在硬件性能的提升,大多数情况下我们其实更关注的是时间复杂度;
-
相同的操作(取值、更新、插入、删除等)使用不同的数据结构,算法复杂度也会呈现不同的结果;