2026考公/考研寄宿

高三式 半军事化 强化管理 一战成硕

2026考研专业课资料

覆盖全国7万+初试/复试专业课资料

134 5670 7733

各地信息

数据结构算法时间复杂度 订阅+ 进入阅读模式

2024-09-25 16:15 来源:张老师

算法的时间复杂度和空间复杂度是衡量其效率的核心指标,掌握分析方法对理解算法优劣至关重要,以下为系统解析:

一、时间复杂度(Time Complexity)

1. 定义:表示算法执行时间随问题规模n的增长趋势,用大O符号(O())表示,忽略常数系数和低阶项。

2. 计算步骤:

- 找出基本操作(执行次数最多的语句,如循环内的赋值、比较)

- 计算基本操作的执行次数T(n)(函数表达式)

- 取T(n)的最高阶项,去掉系数,得到O(f(n))

3. 常见案例分析:

(1)常数阶O(1):基本操作次数与n无关。

例:a = b + c; // 无论n多大,仅执行1次

(2)线性阶O(n):基本操作次数与n成正比。

例:for(int i=0; i

(3)平方阶O(n²):嵌套循环,内层次数随外层增长。

例:for(i=0; i

for(j=0; j

(4)对数阶O(logn):循环变量成倍增长/减少。

例:for(int i=1; i

(5)线性对数阶O(nlogn):外层循环n次,内层循环logn次。

例:快速排序、归并排序的平均情况,每层划分O(n),共logn层。

(6)指数阶O(2ⁿ):递归调用次数呈指数增长(如未优化的斐波那契递归)。

4. 特殊情况处理:

- 最坏时间复杂度:算法在最坏输入下的复杂度(如快速排序最坏O(n²))

- 平均时间复杂度:所有输入的期望复杂度(快速排序平均O(nlogn))

通常关注最坏复杂度,确保算法在极端情况下仍可用。

二、空间复杂度(Space Complexity)

1. 定义:表示算法所需存储空间随n的增长趋势,包括输入数据、程序本身和临时变量占用的空间,重点关注临时空间。

2. 常见案例:

(1)O(1):临时空间与n无关(原地算法)。

例:冒泡排序(仅用常数个临时变量)

(2)O(n):临时空间与n成正比。

例:数组复制int[] b = new int[n]; // 额外申请n个空间

(3)O(logn):递归调用栈深度为logn(如二分查找递归实现)。

(4)O(n²):二维数组等数据结构(如动态规划的二维DP表)。

三、分析技巧与误区

1. 技巧:

- 多个循环并列时,取最大阶(如O(n) + O(n²) = O(n²))

- 递归算法看递归深度和每层空间(如二叉树递归遍历空间复杂度O(h),h为树高)

- 忽略与n无关的操作(如初始化语句)

2. 误区:

- 混淆"执行时间"与"复杂度":O(n)算法不一定比O(n²)快(小n时可能相反),但n足够大时必然更优

- 误将系数计入:如2n+3的复杂度是O(n),不是O(2n)

四、复杂度排序(从优到劣)

O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(2ⁿ) < O(n!)

实际应用中,应优先选择O(nlogn)及以下复杂度的算法,避免指数阶算法(仅适用于极小n)。分析复杂度时需结合具体场景,例如对内存受限的系统,空间复杂度可能比时间复杂度更重要。

THE END  

声明:本站点发布的来源标注为“思研教育”的文章,版权均属思研教育所有,未经允许不得转载。

免责声明:本站所提供试题均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题,请联系本站管理员予以更改或删除。