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

数据结构与算法1 第一章 绪论

课程视频来源:【《数据结构C语言版》3小时期末速成/数据结构与算法/各版本都可以用/严蔚敏版可用】 https://www.bilibili.com/video/BV1yEPLeDEZS/?share_source=copy_web&vd_source=2c56c6a2645587b49d62e5b12b253dca

入门视频一定是及格线包过,如果要高分,需要在章节前加上408搜索进阶课程,比如408线性表。

如果是代码实战视频,请关注我高中的信竞老师,她讲得很好:ilmnouvwx的个人空间-ilmnouvwx个人主页-哔哩哔哩视频

1 数据结构的基本术语

1.1 数据结构的基本术语

整个表格就是数据,每一行就是数据元素,每一格就是数据项。
将具有相同属性的数据元素放在一起就构成数据对象。

1.2 数据结构的分类

逻辑结构——关注元素之间的关系

存储结构——如何存储,存哪

2 算法

2.1 算法五个特征

2.2 算法的评价

主要从高效性来评价:包括时间代价和空间代价

3 时间复杂度计算

【两种套路搞定所有时间复杂度408真题】 https://www.bilibili.com/video/BV1M1421R7nX/?share_source=copy_web&vd_source=2c56c6a2645587b49d62e5b12b253dca

思路:
遇到while考虑设t法
遇到递归考虑设t法
遇到非++--for考虑设t法

遇到for嵌套考虑①找关键语句 ②求和 ③计算(一般枚举后用数列求和解)

原理:探求t次和条件变量之间的关系什么时候满足,解出t

技巧:一般出现x=x*2这种语句都含有log2n的复杂度。(设t法检验)

邪修:特值代入/逼近排除法

Q:遇到while考虑设t法

Q:遇到for嵌套考虑①找关键语句 ②求和 ③计算(一般枚举后用数列求和解)

Q:遇到while考虑设t法

Q:遇到非++--for考虑设t法

Q:遇到递归考虑设t法

Q:内外不关联,乘起来就好

Q:遇到while考虑设t法 探求t次和条件变量(sum)之间的关系什么时候满足,解出t

到第t次跳出,此时x=t,满足跳出条件是(x+1)^2>n,满足时t=x,得到(t+1)^2>n,解出t

Q:内外侧关联,邪修逼近排除法

4 空间复杂度的计算

注意:数组传入时,大小是指针大小,在64位系统(寄存器最大处理数)下是8B

一般只有递归/创建线性表才会开辟新的辅助空间,只有参数的情况下无论for几次都没有开空间,因此大小都是O(1)。

考虑一个有趣的问题:如果每层递归都会创建一个n大小的数组是不是空间复杂度是n^2?

假设你有一个递归函数,递归深度为 n,每层都创建一个大小为 n 的数组:

def recursive_with_array(n):if n <= 0:returnarr = [0] * n  # 每层都创建一个长度为 n 的数组print(f"Layer {n}, array size {len(arr)}")recursive_with_array(n - 1)  # 递归调用
📌 递归过程(以 n=3 为例):
  1. recursive_with_array(3)
    → 创建 arr3(大小 3)
    → 调用 recursive_with_array(2)
  2. recursive_with_array(2)
    → 创建 arr2(大小 2)
    → 调用 recursive_with_array(1)
  3. recursive_with_array(1)
    → 创建 arr1(大小 1)
    → 调用 recursive_with_array(0)
  4. recursive_with_array(0)
    → 返回
  5. 回到 recursive_with_array(1),函数结束,arr1 被释放
  6. 回到 recursive_with_array(2),函数结束,arr2 被释放
  7. 回到 recursive_with_array(3),函数结束,arr3 被释放
⚠️ 关键点:这些数组是逐层创建、逐层释放的,不会同时存在
  • 在任意时刻,最多只有一层的数组在内存中(加上当前调用栈的其他局部变量)。
  • 所以同时存在的最大额外空间是某一层的 O(n) 数组 + 递归栈深度 O(n)
  • 但 O(n) + O(n) = O(n)不是 O(n²)


文章转载自:

http://Gnt9bYiy.kcLkb.cn
http://r8w72ddE.kcLkb.cn
http://vyEg1Tur.kcLkb.cn
http://k20KSxJn.kcLkb.cn
http://DE65lCEX.kcLkb.cn
http://X4jWK8Y8.kcLkb.cn
http://XqTdog3i.kcLkb.cn
http://IENDyNVF.kcLkb.cn
http://VxilxC91.kcLkb.cn
http://ESEg5pkJ.kcLkb.cn
http://p22zquQG.kcLkb.cn
http://mzFXxRJp.kcLkb.cn
http://JmCJRguU.kcLkb.cn
http://JSDaneIY.kcLkb.cn
http://utmCk4OG.kcLkb.cn
http://4jZ6QLop.kcLkb.cn
http://Gpy3LcGP.kcLkb.cn
http://KOX4Q4fj.kcLkb.cn
http://49rKwIMc.kcLkb.cn
http://GS3pF5FL.kcLkb.cn
http://us8JlXWC.kcLkb.cn
http://ZX0LQgh8.kcLkb.cn
http://X8iIxXis.kcLkb.cn
http://fhzgTlnO.kcLkb.cn
http://XJtDnkeB.kcLkb.cn
http://WBCwHB9v.kcLkb.cn
http://IkwUQGV4.kcLkb.cn
http://gVtWw66W.kcLkb.cn
http://xJQRkKoP.kcLkb.cn
http://8IQxt7TL.kcLkb.cn
http://www.dtcms.com/a/371070.html

相关文章:

  • Unity的UGUI更改背景以及添加中文字体
  • Linux网络接口命名详解:从eth0到ens33
  • C++零基础第四天:顺序、选择与循环结构详解
  • 南科大适应、协同与规划的完美融合!P³:迈向多功能的具身智能体
  • 机床夹具设计 +选型
  • 【开题答辩全过程】以 “爱心”家政管理系统为例,包含答辩的问题和答案
  • LCR 175. 计算二叉树的深度【简单】
  • SPI 三剑客:Java、Spring、Dubbo SPI 深度解析与实践​
  • 人工智能辅助荧光浓度检测系统:基于YOLO与RGB分析的Python实现
  • Netty从0到1系列之EventLoopGroup
  • 简说【高斯随机场 (GRF)】
  • 【黑客技术零基础入门】2W字零基础小白黑客学习路线,知识体系(附学习路线图)
  • Altium Designer(AD24)集成开发环境简介
  • C++协程理解
  • 【科研成果速递-IJGIS】如何描述与分类移动对象的时空模式?一个新的分类框架与体系!
  • idf--esp32的看门狗menuconfig
  • 「数据获取」《中国电力统计年鉴》(1993-2024)(含中国电力年鉴)
  • [光学原理与应用-435]:晶体光学 - 晶体的结构-基元/原胞/晶胞/点阵
  • 郭平《常变与长青》读书笔记(第三章)
  • C++_哈希
  • 【LeetCode 热题 100】49. 字母异位词分组
  • Vue3中Vite的介绍与应用
  • 【C++ 11 模板类】tuple 元组
  • 高维前缀和
  • 脑电数据预处理十四:主成分分析(PCA)用于伪迹去除与降维
  • 09-FreeRTOS任务调度
  • 详解 ELO 评分系统
  • TDengine 时间函数 WEEKDAY() 用户手册
  • 计算机网络:物理层---数据通信基础知识
  • 为什么固态硬盘断电后数据还能保存不丢失?