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

2.1算法的时间复杂度与空间复杂度

本篇博客介绍算法的时间复杂度与空间复杂度

一、算法效率

算法好坏从时间空间两个维度衡量

二、时间复杂度

1.概念

时间复杂度是算法中基本操作的执行次数,定量描述了算法的运行时间

2.注意

(1)时间复杂度是偏保守的估计量,可理解为最低的预期
(2)时间复杂度是一个数量级,表征大概执行次数,采用大O渐进表示法

  • 如果是常数次计算,时间复杂度为O(1)
  • 在运行次数函数中,只保留次数最高的那一项
  • 要省略最高阶项前面的常数
    常见的时间复杂度
    (3)时间复杂度实际上是一个函数f(x),注意与平时编程时调用的函数进行区分,是算法精确的执行次数

3.例子

(1)冒泡排序的时间复杂度

void BubbleSort(int* a, int n) 
{ assert(a); for (size_t end = n; end > 0; --end) { int exchange = 0; for (size_t i = 1; i < end; ++i) { if (a[i-1] > a[i]) { Swap(&a[i-1], &a[i]); exchange = 1; } } if (exchange == 0) break; } 
} 

冒泡排序的时间复杂度

(2)二分查找的时间复杂度

int BinarySearch(int* a, int n, int x) 
{ assert(a); int begin = 0; int end = n-1; while (begin <= end) { int mid = begin + ((end-begin)>>1); if (a[mid] < x) begin = mid+1; else if (a[mid] > x) end = mid-1; else return mid; } return -1; 
}

二分查找的时间复杂度
注意:只有以2为底的对数才可以简写成logN

(3)递归函数的时间复杂度

long long Fac(size_t N) 
{ if(0 == N) return 1; return Fac(N-1)*N; 
} 

递归函数的时间复杂度

三、空间复杂度

1.概念

空间复杂度是算法运行过程中临时占用存储空间大小的量度,算的是变量的个数,研究额外申请的空间

2.例子

long long Fac(size_t N) 
{ if(N == 0) return 1; return Fac(N-1)*N; 
}

解析:从Fac(N)到Fac(0)共调用Fac()函数N+1次,数量级是N,因此空间复杂度为O(N)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Keepalived 企业应用示例
  • tcpdump的使用
  • 思二勋:web3.0是打造应对复杂市场敏捷组织的关键
  • SpringBoot依赖之Spring Data Redis 一 Hash类型
  • VirtualBox安装Oracle Linux 7.9全流程
  • 【秋招笔试】8.17京东秋招第二场(后端岗)-三语言题解
  • 什么是OpenTiny?
  • 使用Nexus搭建Maven私服仓库
  • C++之STL容器详解(包含十种常用容器)
  • 给既有exe程序添加一机一码验证
  • 共享内存、消息队列、信号量
  • GPT-SoVITS
  • EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2)
  • 大模型日报 2024-08-16
  • vim中跳转头文件
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 11111111
  • 2017 前端面试准备 - 收藏集 - 掘金
  • fetch 从初识到应用
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • PAT A1092
  • Python学习笔记 字符串拼接
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • uni-app项目数字滚动
  • VuePress 静态网站生成
  • vue学习系列(二)vue-cli
  • 从0到1:PostCSS 插件开发最佳实践
  • 批量截取pdf文件
  • 前端_面试
  • 前端之Sass/Scss实战笔记
  • 深度学习在携程攻略社区的应用
  • 小李飞刀:SQL题目刷起来!
  • 学习ES6 变量的解构赋值
  • 移动端 h5开发相关内容总结(三)
  • 再次简单明了总结flex布局,一看就懂...
  • 走向全栈之MongoDB的使用
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #include
  • #java学习笔记(面向对象)----(未完结)
  • (02)vite环境变量配置
  • (2)STL算法之元素计数
  • (function(){})()的分步解析
  • (void) (_x == _y)的作用
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (一)Linux+Windows下安装ffmpeg
  • .bat文件调用java类的main方法
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 6 redis操作类
  • .NET WPF 抖动动画
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使窗口永不获得焦点
  • .Net多线程Threading相关详解