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

【数据结构与算法】第1课—算法复杂度

文章目录

  • 1. 数据结构
  • 2. 算法
  • 3. 算法效率
  • 4. 算法复杂度
  • 5. 算法时间复杂度
    • 5.1 大O的渐进表示法
    • 5.2 时间复杂度示例
  • 6. 空间复杂度
    • 6.1 练习1
    • 6.2 练习2
    • 6.3 练习3

1. 数据结构

  • 数据结构是计算机存储、组织数据的方式,指相互之间存在一种和多种特定关系的数据元素的集合,常见的有线性表、树、图、哈希等

2. 算法

  • 算法:就是制定一个良好的计算过程,取一个或一组值作为输入,并产生一个或一组值作为输出
  • 简单来讲,算法就是一系列的计算步骤,用来将输入数据转化为输出结果

3. 算法效率

  我们先来看个简单的例子
在这里插入图片描述
  这个时候可能就满足不了,那么我们如何去判断一个代码的好坏呢?

4. 算法复杂度

  • 衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的
  • 时间复杂度主要衡量一个算法运行速度快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间

5. 算法时间复杂度

  • 为什么不用程序执行速度的快慢来作为判断一个算法的好坏呢?
  • 这是因为相同的程序在不同的计算机、不同的编译器上、乃至同一台计算机上执行速度都有所不同,并且时间只能在程序编写好后才可以进行测试,因此它不会直接用来作为衡量程序好坏的标准
  • 计算机科学规定了,作为衡量一个算法好坏的算法时间复杂度是一个表达式T(N),它用来计算程序的执行次数
  • 如果一个算法a程序的T(N)=N,另一个算法b程序的T(N)=N^2,那么算法a的效率一定优于算法b

在这里插入图片描述


5.1 大O的渐进表示法

  • 前面我们讲过,T(N)表达式中可能存在对它影响很小的变量和常量,因此我们需要抓大头来表示程序的变化趋势,因此就引入了大O的渐进表示法
  • 大O表示规则:
  • 时间复杂度表达式T(N)中,只保留高阶项,去掉低阶项,用来表示程序执行次数变化的趋势
  • 如果高阶项存在不是1,不将与高阶项相关的常数系数计算在内,因为随着N不断变大,常数系数对结果影响也不大
  • T(N)中如果高阶项就是常数,那么直接写成O(1),用1来代替所有的常数,其中1并不表示程序只执行一次,而是表示它与执行算法所需的时间与输入数据的数量或大小无关

在这里插入图片描述


5.2 时间复杂度示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  • 通过上述例子可以看出,大O渐进表示法一般关注的是算法的上界,也就是最坏的运行情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 空间复杂度

  • 函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译器期间已经确定好了,因此空间复杂度主要考虑函数在运行时额外申请的空间
  • 空间复杂度也用大O表示法

在这里插入图片描述


在这里插入图片描述


6.1 练习1

在这里插入图片描述


6.2 练习2

  • 创建新的数组,将k个数据放入新的数组中,再将剩下的数据放进去
  • 空间复杂度O(N)

在这里插入图片描述


6.3 练习3

  • 空间复杂度O(1)

在这里插入图片描述

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

相关文章:

  • 利用高德API获取整个城市的公交路线并可视化(五)
  • DNS:互联网域名系统的核心
  • 小猿口算炸鱼脚本
  • 浅谈云原生--微服务、CICD、Serverless、服务网格
  • android app执行shell命令视频课程补充android 10/11适配-千里马android
  • C++笔记-UTF8和UTF8-dom的区别
  • “探索Adobe Photoshop 2024:订阅方案、成本效益分析及在线替代品“
  • 网页复制粘贴助手,Chrome网页复制插件(谷歌浏览器复制插件)
  • 【C++刷题】力扣-#118-杨辉三角
  • Linux下的环境变量
  • Edge论文的创新点
  • ‌ComfyUI 高级实战:实现华为手机的AI消除功能
  • 我记得我曾喜欢过冬天
  • 最新夜间数据集发布LoLI-Street: 33000帧数据,涵盖19000个目标
  • 反向传播算法与随机搜索算法的比较
  • 【PDF文件】默认被某种软件打开,如何进行修改?
  • Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)
  • React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件
  • Java学习-JVM
  • leed认证分几个级别
  • 3.C++经典实例-计算一个数的阶乘
  • 深入理解Qt中的QTableView、Model与Delegate机制
  • 解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第1章 ARM Cortex-M处理器简介
  • java集合类的框架体系
  • 基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现
  • 什么是模糊测试?
  • 3.C++经典实例-奇数还是偶数
  • 真牛啊!全球人工智能标准教科书,斯坦福、麻省理工、加州大学等十多所顶尖机构为它点赞!!
  • Android——通过MediaStore查询图片
  • 手写Spring IOC-简易版