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

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录

  • 前言
  • 时间复杂度
    • 1.概述
    • 2.大O记法
    • 3.常见类型
  • 空间复杂度
    • 1.概述
    • 2.常见类型
  • 典型算法的复杂度分析
    • 1.递归算法
    • 2.哈希表

前言

我们知道,研究算法的最终目的就是如何花更少的时间如何占用更少的内存去完成相同的需求。

时间复杂度

1.概述

我们要计算算法时间耗费情况,但我们并不能将时间占用和空间占用量化。所以我们得度量算法的执行时间,那么如何度量呢?

我们分析一个算法的运行时间,最重要的就是把核心操作的次数和输入规模关联起来。

2.大O记法

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随着n的变化情况并确定T(n)的量级。

算法的时间复杂度,就是算法的时间量度,记作:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度,其中f(n)是问题规模n的某个函数。

所以计算时间复杂度主要分两步:统计操作数量&判断渐进上界
常用技巧:
(1)用常数1取代运行时间中的所有加法常数;
(2)在修改后的运行次数中,只保留高阶项;
(3)如果最高阶项存在,且常数因子不为1,则去除与这个项相乘的常数;

3.常见类型

首先,常见的时间复杂度类型排序:

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2) <O(2^n) <O(n!)

在这里插入图片描述

空间复杂度

1.概述

统计 算法使用内存空间随着数据量变大时的增长趋势.

通常情况下,空间复杂度统计范围是「暂存空间」+「输出空间」

2.常见类型

同样是用大O来表示,只是这个是表示使用空间大小

O(1)<O(logn)<O(n)<O(n^2) <O(2^n)

典型算法的复杂度分析

1.递归算法

(1)时间复杂度
子问题个数乘以解决一个子问题需要的时间(即递归的次数 * 每次递归中的操作次数。)
例如,斐波那契数列
(2)空间复杂度

2.哈希表

空间换时间,查找的时间复杂度是O(1)

参考链接:https://www.helloalgo.com/chapter_computational_complexity/space_complexity/#232
https://programmercarl.com

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

相关文章:

  • Android OpenCV(七十三):吊打高斯模糊的StackBlur Android 实践
  • 4.排序算法之一:冒泡排序
  • python自学之《21天学通Python》(16)——第19章 用Pillow库处理图片
  • 发布依赖到maven仓库
  • Laravel-admin之自定义操作日志
  • 用Python做了一个法律查询小工具,非常好用
  • 工作篇:触摸屏原理介绍
  • Ep_操作系统面试题-操作系统的分类
  • iframe或document监听滚动事件不起作用
  • 基频估计算法简介
  • linux修改DNS 系统版本Kylin V10桌面版
  • 如何使用 AWS Lambda 运行 selenium
  • 认识Cesium旋转大小变量
  • 异响加持、吐槽声不断,小鹏G9难解困局
  • 【react】react18的学习
  • Ep_操作系统面试题-什么是线程,线程和进程的区别
  • 最流行的自动化测试工具,总有一款适合你(附部分教程)
  • Shell高级——进程替换vs管道
  • 国内有哪些支持定制化的低代码平台?
  • Altair 宣布将于3月举办 Future.Industry 2023 全球虚拟大会
  • react lazyLoad学习记录
  • 29 openEuler管理网络-配置网络绑定
  • RTT 全志D1s RDC2022纪念版开发板开箱使用分享与折腾记录
  • 24日常实习万得一面面径
  • MySQL的DML和DDL操作(1)
  • Kafka系列之:Kafka生产者和消费者
  • Linux进程间通信:信号量(一)
  • Python笔记一之excel的读取
  • JavaScript Number 数字对象
  • 设计模式-服务定位器模式