当前位置: 首页 > 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)

http://www.lryc.cn/news/428797.html

相关文章:

  • Linux VSFTP 部署与配置
  • 【Docker】Docker Consul
  • diamond安装与使用
  • flume--数据从kafka到hdfs发生错误
  • Android笔试面试题AI答之Kotlin(14)
  • 博弈论,CF 1600E - Array Game
  • win10安装docker,打包python、java然后centos执行镜像
  • 【数据结构入门】二叉树之堆的实现
  • 智能微气候:精准调控背后的算法革命
  • eNSP 华为交换机链路聚合
  • 编译器揭秘
  • ubuntu下qt连接mysql出现 QMYSQL driver not loaded
  • html 首行缩进2字符
  • 什么是IP?
  • js拖拽交换元素位置
  • 在 C++ 中实现自定义容器的实用指南
  • 《深入浅出WPF》读书笔记.4名称空间详解
  • 电驱动总成
  • JavaScript class和正则
  • [Linux#42][线程] 锁的接口 | 原理 | 封装与运用 | 线程安全
  • 奇异递归Template有啥奇的?
  • 每天五分钟深度学习框架pytorch:神经网络工具箱nn的介绍
  • 【办公软件】安全风险 Microsoft 已阻止宏运行,因为此文件的来源不受信任
  • JavaScript语法基础之流程结构(顺序、选择、循环结构)
  • 集团数字化转型方案(四)
  • 【MySQL索引】索引失效场景
  • 基于MATLAB视觉的静态手势识别系统
  • day02-作业题
  • torch.cuda.set_divice()
  • <数据集>RSOD数据集<目标检测>