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

【数据结构与算法 | 第一篇】时间复杂度和空间复杂度

前言

学习数据结构与算法,先要分清两个问题:数据怎样组织,操作怎样完成。前者由数据结构解决,后者由算法解决。写代码时,除了得到正确结果,还要关注程序执行要花多少时间、占多少额外空间。

数据结构和算法是什么

数据结构是数据在计算机中的组织方式。它既包含数据之间的逻辑关系,也包含具体的存储方式。

从逻辑结构看,常见的类型有集合结构、线性结构、树形结构和图状结构。例如数组和链表属于线性结构,二叉树属于树形结构。

从存储方式看,数据可以连续存放,也可以离散存放:

  • 顺序存储:元素放在连续的存储空间中,例如数组。
  • 非顺序存储:元素分散存放,通过关系把它们连接起来,包括链式存储、索引存储和散列存储。

算法是解决某类问题的一组有限步骤。一个算法需要具备确定性:相同的输入应得到相同的输出;它也必须在有限步骤后结束。评价算法时,除了正确性、可读性和健壮性,还要看运行效率和存储需求。

时间复杂度

时间复杂度用来描述:当数据规模 n 增大时,算法执行次数增长得有多快。它通常写成O( ),关注增长趋势,不统计某一台电脑上的实际秒数。

计算规则

多项式相加,只保留最高阶,系数化为 1。

例如:

T(n) = 3n² + 5n + 10

当 n 很大时,n² 的增长最快,因此时间复杂度为O(n²)

嵌套循环,复杂度相乘。

for(inti=0;i<n;i++){for(intj=0;j<n;j++){// 执行一次常量操作}}

外层循环执行 n 次,内层每次执行 n 次,总执行次数约为 n × n,所以时间复杂度是O(n²)

顺序执行的代码,复杂度相加后再取最高阶。

for(inti=0;i<n;i++){// O(n)}for(intj=0;j<n*n;j++){// O(n²)}

总复杂度为 O(n + n²),保留最高阶后是O(n²)

常见时间复杂度从低到高可以简单记为:O(1)、O(log n)、O(n)、O(n log n)、O(n²)。在数据量较大时,增长级别的差异会非常明显。

空间复杂度

空间复杂度描述算法运行时额外申请的存储空间随 n 的增长情况。这里主要看辅助变量、数组、递归调用等产生的额外空间,不把输入数据本身重复计算进去。

计算规则

固定数量的变量,占用常量空间。

intmax=0;intindex=0;

无论 n 多大,变量数量都不变,空间复杂度为O(1)

申请长度和 n 成正比的数组,空间复杂度为 O(n)。

int[]temp=newint[n];

数组长度随 n 一起增长,因此额外空间为O(n)

二维数组的行和列都与 n 有关,空间复杂度为 O(n²)。

int[][]matrix=newint[n][n];

它一共保存 n × n 个元素,因此空间复杂度为O(n²)

循环次数多不一定占用更多空间。只要循环中没有持续申请与 n 相关的新空间,即使时间复杂度是 O(n²),空间复杂度也可能仍是 O(1)。

总结

数据结构决定数据怎样存放,算法决定问题怎样求解。分析复杂度时,时间复杂度看操作次数的增长,空间复杂度看额外存储量的增长。掌握“取最高阶”和“嵌套相乘”这两条规则,就能完成大多数基础复杂度判断。

http://www.jsqmd.com/news/1196009/

相关文章:

  • 烟台SEO优化公司|长尾词矩阵建设,烟台SEO全案外包服务商解读 - 招财兔数字员工
  • 基于STM32单片机TF卡Mp3音频音乐频谱音箱播放器显示设计DIY-T163
  • Java Web | 世界杯赛事网站开发
  • Windows C++程序崩溃调试:自动生成Dump文件原理与实践指南
  • 一起玩儿物联网人工智能小车——05. 从TT马达到L298N:动力系统的选型与实战接线
  • 2026哈尔滨楼顶漏水、卫生间漏水、外墙、地下室、阳光房渗漏?3家实力企业榜单(7月) - 防水企业百科
  • Cursor CSS动画生成紧急响应指南:当客户要求“今天上线悬停反馈动效”,如何用3条指令10分钟交付?
  • 2026渭南楼顶漏水、卫生间漏水、外墙、地下室、阳台渗漏怎么办?3家靠谱公司(7月) - 防水企业百科
  • LP3907电源管理芯片:PFM/PWM自动切换与I2C可编程设计实战
  • 福州翡翠回收别被“水头不足”乱压价!靠谱翡翠回收店铺实物实测估价不套路 - 每日生活报
  • GraphQL全功能越权漏洞:从密码重置到系统权限崩塌的深度剖析
  • 2026 年当下,黄埔专业的球墨铸铁篦子优质厂家联系方式,用它解决排水难题:球墨铸铁篦子的惊人秘密 - 行业推荐官【官方】
  • Java多线程环境下外卖CPS订单状态机线程安全设计与锁粒度控制
  • 2026辽宁公考机构怎么选?辽宁粉笔、中公、华图三强全维对比,一份数据告诉你答案 - 天涯视角
  • 武汉奢二网回收名包,免费鉴包无任何隐形扣费 - 大牌深度测评
  • 反激变换器设计实战:从理论计算到磁芯与气隙的工程权衡
  • 功率电路死区时间测量与计算:从理论到工程实践
  • Java对接微信支付APIv3避坑指南(从零到一实战)
  • 用泊松分布+Python实现足球比分概率预测
  • 企业防泄密软件推荐榜:这6款产品各具特点
  • DeepSeek LeetCode 3559. 给边赋权值的方案数 II Python3实现
  • 包装生产线PLC控制系统设计资料12(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 从命令行到编程接口:在C++/Python中集成Bellhop进行声学仿真的工程实践
  • 【开题神器】专业级AI论文写作软件:研究框架、文献综述一键搭建 - 论文助教
  • TDA2Px SoC异构计算架构与接口调试实战指南
  • 基于Go语言实现北极星日本海淘合箱智能体积测量算法优化
  • 沧州防水补漏全攻略 公司价格免砸砖漏水检测全解析 - 徽顺虹
  • 第一周
  • 模型推理部署优化参数完全指南(上):从省钱到加速的20个关键配置
  • CSMA/CD协议:从总线争用到碰撞退避的经典网络仲裁