时间复杂度
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变 化情况并确定T(n)的数量级。这里用”O”来表示数量级,
给出算法的时间复杂度。
T(n)=O(f(n));
它表示随着问题规模的n的增大,算法的执行时间的增长率和f(n)的增长率相同,这称作算法的渐进时间复杂度,简称时间复杂度。
时间复杂度的分析方法:
- 时间复杂度就是函数中基本操作所执行的次数
- 一般默认的是最坏时间复杂度,即分析最坏情况下所能执行的次数
- 忽略掉常数项
- 关注运行时间的增长趋势,关注函数式中增长最快的表达式,忽略系数
- 计算时间复杂度是估算随着n的增长函数执行次数的增长趋势
- 递归算法的时间复杂度为:递归总次数 x 每次递归中基本操作所执行的次数
常用的时间复杂度有以下七种,算法时间复杂度依次增加:
- O(1)常数型
- O(log2 n)对数型
- O(n) 线性型
- O(n log2 n)二维型
- O(n^2)平方型
- O(n^3)立方型
- O(2^n)指数型
空间复杂度
算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数,与问题的规模没有关系。算法的空间复杂度S(n)定义为该算法所耗费空间的数量级。
S(n)=O(f(n))
若算法执行时所需要的辅助空间相对于输入数据量n而言是一个常数,则称这个算法的辅助空间为O(1);
递归算法的空间复杂度:递归深度N*每次递归所要的辅助空间, 如果每次递归所需的辅助空间是常数,则递归的空间复杂度是 O(N).
算法效率
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,
而空间复杂度主 要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,
计算机的存储容量已经达到了很高的程度。 所以我们如今已经不需要再特别关注一个算法的空间复杂度。