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

数据结构:绪论之时间复杂度与空间复杂度


作者主页

失踪人口回归,陆续回三中。
开辟文章新专栏——数据结构,恳请各位大佬批评指正!


在这里插入图片描述

文章目录

    • 作者主页
  • 数据结构的基本知识
    • 数据:
    • 数据元素:
    • 数据对象:
    • 数据类型:
    • 数据结构:
      • 逻辑结构:元素之间的逻辑关系
      • 存储结构:物理结构
      • 数据运算
  • 算法与其评价
    • 算法的概念:
    • 算法效率的评价:
      • 时间复杂度
      • 空间复杂度

数据结构的基本知识

数据:

数据是信息的载体

数据元素:

数据元素是数据的基本单位,数据项是构成元素不可分割的最小单位。

数据对象:

具有相同性质的数据元素的集合

数据类型:

  1. 原子类型
  2. 结构类型
  3. 抽象数据类型(ADT):描述了数据的逻辑运算和抽象运算,从而构成一个完整的数据结构定义

数据结构:

有一种或多种特定关系的数据元素的集合

逻辑结构:元素之间的逻辑关系

在这里插入图片描述

集合:元素同属于一个集合

线性结构:一对一,除了第一个元素,所有元素都有唯一先驱,除了最后一个元素,所有元素都有唯一后继

树形结构:一对多

网状结构:多对多

存储结构:物理结构

顺序存储:数据存储在相邻存储单元中,可以实现随机存储,但是外部碎片多

链式存储:利用存储地址的指针来表示元素之间的逻辑关系,不会出现碎片现象,但是要存储指针占用额外空间,只能实现顺序存取

索引存储:检索快,但索引表占用额外空间,增删数据时也要修改索引表,花费时间较多

散列存储:根据元素的关键字直接计算出该元素存储地址,也称哈希存储。快,但是如果散列函数不好,会导致冲突浪费时间

数据运算

算法与其评价

算法的概念:

是对特定问题求解步骤的一种描述。程序=数据结构+算法(步骤)

算法具有:有穷性,确定性,可行性,输入,输出

算法是有穷的,程序是无穷的

一个好的算法应该具备:正确性,可读性,健壮性,高效率与低存储量需求

算法效率的评价:

时间复杂度

  • 定义

    衡量算法执行时间随输入规模增长的变化趋势,不关注具体执行时长,关注的是输入规模变大时,算法运行时间的增长快慢。

  • 表述方法

    用大 O 符号(Big O notation)表示,如 O (1)、O (n)、O (n²) 等。通过分析算法中基本操作的执行次数与输入规模 n 的关系来确定,忽略低阶项和常数系数,保留最高阶项表示量级 。

    在这里插入图片描述

  • 计算规则:

    • 只保留常数项
    • 保留最高项
  • 常用技巧

    在这里插入图片描述

    • 加法规则:当一个算法由多个部分组成时,这意味着在计算总时间复杂度时,取各部分时间复杂度中量级最大的那个。例如,算法一部分时间复杂度是(O(n)),另一部分是(O(n2)),整体时间复杂度就是(O(n2)) 。

      void loveyou(int n){//1次int i = 1;//3001次while(i<=n){//3000*2次i++;printf("i love you ");}
      }
      int main(){loveyou(3000)
      }
      //T(n)=1+3001+3000*2
      //T(n)=3n+3
      
    • 乘法规则:如果一个算法是嵌套结构,外层操作数量级是(f(n)),内层是(g(n)),那么整体时间复杂度就是两者相乘 。比如外层循环n次,内层循环m次,整体时间复杂度就是(O(n×m)) 。

    • 量级比较:“常对幂指阶” 是常见时间复杂度量级从小到大的排序,也是保留阶数最高的依据。

      在这里插入图片描述

  • 如何计算:

    顺序执行的代码只会影响常数项,可以忽略

    只需挑循环中的一个基本操作分析它的执行次数与n的关系即可

    如果有多层嵌套循环,只需关注最深层循环几次就行了

  • 三种复杂度:

    最坏时间复杂度:考虑输入数据“最坏的情况”,执行次数最多的时候

    平均时间复杂度:考虑所有输入数据都等概率出现的情况

    最好时间复杂度:考虑输入数据的最好的情况,

空间复杂度

  • 空间复杂度的定义:

    空间复杂度(Space Complexity)是衡量算法在执行过程中临时占用存储空间大小的量度。

    它反映了算法所需存储空间与输入数据大小之间的关系。

    空间复杂度通常用大O表示法来表示。

    2.2 空间复杂度的分析

    同时间复杂度一样用大O表示法表示;也是表示一个数量级。记作: 在这里插入图片描述

  • 2.3 常见的空间复杂度

    常数阶:

    如果算法的空间复杂度不随问题规模 n 的变化而变化,即算法所需的存储空间是一个常数,那么空间复杂度为 O(1)。

    线性阶:

    如果算法所需的存储空间与问题规模 n 成正比,即算法所需的存储空间随着 n 的增加而线性增加,那么空间复杂度为

    O(n)。

    多项式阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。

    对数阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。

    指数阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。

对数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。

指数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

http://www.xdnf.cn/news/583057.html

相关文章:

  • 论文阅读笔记——PixArt-α,PixArt-δ
  • 滚珠导轨:重构精密仪器传动架构,开启微纳世界
  • C++-继承
  • k8s容器入门(1)有状态服务 vs 无状态服务 核心区别
  • list(c++)
  • 排序和排列——蓝桥杯备考
  • 在Java的list.forEach(即 Stream API 的 forEach 方法)中,无法直接使用 continue 或 break 语句的解决办法
  • Lucide:一款精美的开源矢量图标库,前端图标新选择
  • 5G 核心网中的 NPN 功能详解
  • MongoDB大数据量的优化——mongoTemplate.stream()方法使用
  • 参与开发的注意事项
  • 每日算法-250522
  • CUDA加速的线性代数求解器库cuSOLVER
  • Spring AI 之提示词
  • 智能IoT未来与边缘生态共建 | 2025 高通边缘智能创新应用大赛第六场公开课来袭!
  • go语言基础
  • FastAPI在 Nginx 和 Docker 环境中的部署
  • 【Python socket模块深度解析】网络通信的核心工具
  • 高性能图表库SciChart WPF v8.8全新发布——提升渐变颜色映射高度
  • Mysql的主从同步
  • VR溺水安全:为生命筑牢数字化防线
  • 常见算法题目1 - 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的数组下标组合
  • MySQL的相关操作
  • RTC技术
  • 第六部分:阶段项目 5:构建 NestJS RESTful API 服务器
  • STM32+rt-thread使用MQTT协议连接腾讯物联网平台
  • 旧物回收小程序:让闲置焕发光彩,为生活增添价值
  • spring boot启动报错:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)
  • 响应式架构下的调试挑战:WebDebugX 如何帮助前端稳住场面?
  • 优化 CRM 架构,解锁企业竞争力密码