当前位置: 首页 > ops >正文

【数据结构】 时间复杂度

目录

一、循环结构类时间复杂度分析

1. 单层循环

2. 嵌套循环

二、递归类时间复杂度分析

三、链表操作类时间复杂度

四、特殊循环条件类

五、排序算法复杂度对比

六、易错点总结


仅供参考

一、循环结构类时间复杂度分析

1. 单层循环

例题1(2011年统考真题)

x=2;
while(x < n/2)
    x = 2*x;

解析

  • 基本操作x=2*x,每次执行后x呈指数增长。

  • 执行次数:设循环执行次数为t,则终止条件为 2^(t+1) < n/2,解得 t ≈ log₂n - 2

  • 时间复杂度O(log₂n) 

例题2(立方根循环)

int i=0;
while(i*i*i <= n) i++;

解析

  • 基本操作i++,循环终止条件为 i³ > n

  • 执行次数i的最大值为 n^(1/3)

  • 时间复杂度O(n^(1/3))

2. 嵌套循环

例题3(2014年统考真题)

count=0;
for(k=1; k<=n; k*=2)
    for(j=1; j<=n; j++)
        count++;

解析

  • 外层循环次数k每次乘以2,执行次数为 log₂n

  • 内层循环次数:固定执行n次。

  • 总频次n * log₂n,时间复杂度为 O(n log n)

例题4(等比数列循环)

int sum=0;
for(int i=1; i<n; i*=2)
    for(int j=0; j<i; j++)
        sum++;

解析

  • 外层循环次数i取值为 1, 2, 4, ..., 2^t,次数为 log₂n

  • 内层循环总频次1 + 2 + 4 + ... + 2^(log₂n) = 2n - 1

  • 时间复杂度O(n) 

二、递归类时间复杂度分析

例题5(2012年统考真题)

int fact(int n){
    if(n<=1) return 1;
    return n * fact(n-1);
}

解析

  • 递归深度:递归调用次数为n次,每次操作为常数时间。

  • 时间复杂度O(n)

三、链表操作类时间复杂度

例题6(2013年统考真题)
题目:合并两个升序链表为降序链表,最坏时间复杂度。
解析

  • 比较次数:每次比较确定一个元素位置,最坏需比较m+n次。

  • 优化分析:由于每次比较可确定一个元素,实际复杂度为 O(max(m,n))

四、特殊循环条件类

例题7(2019年真题变体)

X=0;
while(N >= X*X + X + 1)
    X++;

解析

  • 终止条件X² + X + 1 > N,近似解为 X ≈ √N

  • 时间复杂度O(√N)

五、排序算法复杂度对比

常见排序算法时间复杂度总结

算法平均时间复杂度最坏情况空间复杂度稳定性
快速排序O(n log n)O(n²)O(log n)不稳定
归并排序O(n log n)O(n log n)O(n)稳定
冒泡排序O(n²)O(n²)O(1)稳定
堆排序O(n log n)O(n log n)O(1)不稳定
:稳定性指相等元素的相对顺序是否改变 

六、易错点总结

  1. 循环变量非线性增长:如 i *= 2 或 i = i^3,需通过解不等式确定次数。

  2. 递归调用次数:递归深度与每层操作数的乘积决定总复杂度。

  3. 嵌套循环独立性:若内外层循环变量无关,直接相乘;若相关(如内层循环依赖外层变量),需求和计算总频次。

http://www.xdnf.cn/news/9219.html

相关文章:

  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南
  • 贝壳后端golang面经
  • 【信号与系统】【转载记录】漫谈《信号与系统》
  • 体绘制学习
  • Android开机向导定制(2)开机向导配置
  • 【免费】【无需登录/关注】多点矩阵计算器,计算任何坐标系转换
  • 【无标题】C++单例模式详解
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • linux如何查看网络设备类型
  • 学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙
  • 机器学习中的关键术语及其含义
  • 打造自己的开源组件:如何将 Starter 发布到 Maven Central?
  • 人工智能100问☞第34问:什么是语音识别与合成?
  • xilinx 7系列底层可配置逻辑块CLB资源简介