数据结构与算法

ops/2025/2/12 6:00:41/

目录

一、数据结构概述

1.数据结构分为:数据的逻辑结构、数据的物理结构

🧠 ⑴.逻辑结构:数据关系的抽象模型

①. 集合结构

②. 线性结构

③. 树形结构

④. 图状结构

💾 ⑵.物理结构:数据存储的实体实现

①. 顺序存储

②. 链式存储

③. 散列存储

🔍2.逻辑 vs 物理:设计思维的双重视角

🛠️3.如何选择数据结构?三大黄金法则

🌟 4.真实世界的数据结构

二、算法概述

🧩 1.什么是算法?

📊 2.如何评价算法好坏?——效率是关键

🔢 3.经典案例:计算1+2+3+...+100

算法1:暴力循环法(时间换空间)

算法2:递归法(空间换时间)

算法3:高斯公式(最优解)

⏱️ 4.时间复杂度:程序的时间成本

💾5. 空间复杂度:程序的内存账单

⚖️ 6.时间与空间的权衡艺术

🚀7. 算法优化实战思路

🌐8. 真实世界中的算法应用

🔍 9.如何学习算法?

三、时间复杂度

1.什么叫做时间复杂度?

🌰 用汽车油耗做类比

📝 分步理解数学定义

📊 T(n) 与 O(n) 的关系

❓ 常见疑问解答

Q1:为什么要用极限?

Q2:系数为什么不重要?

Q3:为什么关注最坏情况?

📈 时间复杂度速查表

2.时间复杂度计算步骤

⑴. 计算基本操作的执行次数T(n)

⑵. 通过T(n)得到f(n)

⑶. 用大O表示时间复杂度

3.常见时间复杂度详细分析

⑴. 常数阶 O(1)

2. 对数阶 O(log n)

​编辑

3. 线性阶 O(n)

4. 线性对数阶 O(n log n)

5. 平方阶O(n²)

​编辑

6. 立方阶 O()

​编辑

7. 指数阶 O()

8. 阶乘阶 O(n!)

4.常见时间复杂度耗时比较


一、数据结构概述

📦 引言:为什么需要数据结构?
想象一下你的房间:如果衣服乱堆、书籍散落、工具混杂,想找到需要的东西如同大海捞针。同样的道理,程序中的数据如果无序存储,会导致执行效率低下甚至逻辑混乱。数据结构就像程序员设计的收纳系统,它决定了数据如何组织、存储和访问,是构建高效程序的基石。


1.数据结构分为:数据的逻辑结构、数据的物理结构

1.逻辑结构是指数据元素之间的逻辑关系,它是从抽象的角度描述数据元素之间的关系,不涉及具体的存储方式或实现细节。逻辑结构主要关注问题的本质、特点和抽象模型,是数据结构的逻辑表示。

2.物理结构是指数据结构在计算机内存中实际存储和组织的方式。它是从具体的角度描述数据结构的实现方式和存储结构,包括数据元素在内存中的存储分布和访问方式等。物理结构主要关注问题的具体实现和操作。

3.因此,逻辑结构与物理结构的区别在于:逻辑结构是从抽象的角度描述数据元素之间的关系,物理结构是从具体的角度描述内存中数据元素的存储方式和组织形式。

逻辑结构主要关注问题的本质和特点物理结构主要关注问题的具体实现和操作。

决定了数据如何组织、存储和访问,是构建高效程序的基石。


🧠 ⑴.逻辑结构:数据关系的抽象模型

逻辑结构关注数据元素之间的本质关系,如同设计收纳方案时思考"物品之间如何关联",不涉及具体如何摆放。

①. 集合结构
  • 特点:元素仅属于同一个集合,彼此独立

  • 比喻:一筐散装鸡蛋,每个鸡蛋之间没有直接联系

  • 应用场景:哈希表的键集合

②. 线性结构
  • 特点:元素呈一对一顺序关系

  • 比喻:糖葫芦串(竹签串联山楂)

  • 典型结构:数组、链表、栈、队列

  • 应用场景:浏览器访问历史(栈)、消息队列(队列)

③. 树形结构
  • 特点:元素呈一对多层次关系

  • 比喻:公司组织架构(CEO→部门经理→员工)

  • 典型结构:二叉树、B树、DOM树

  • 应用场景:文件系统目录、数据库索引

④. 图状结构
  • 特点:元素呈多对多复杂关系

  • 比喻:城市交通网(道路连接多个地点)

  • 典型结构:有向图、无向图

  • 应用场景:社交网络关系、地图路径规划


💾 ⑵.物理结构:数据存储的实体实现

①. 顺序存储
  • 原理:连续内存空间存储元素

  • 特点

    • ✅ 访问速度快(通过下标直接计算地址)

    • ❌ 插入/删除效率低(需要移动元素)

  • 典型代表:数组

  • 内存示意图


②. 链式存储
  • 原理:通过指针关联离散存储的元素

  • 特点

    • ✅ 插入/删除高效(只需修改指针)

    • ❌ 访问需要遍历(无法随机访问)

  • 典型代表:链表

  • 内存示意图


③. 散列存储
  • 原理:通过哈希函数计算存储位置

  • 特点

    • ✅ 查询速度极快(理想情况下O(1))

    • ❌ 哈希冲突需要处理

  • 典型代表:HashMap

  • 存储过程


🔍2.逻辑 vs 物理:设计思维的双重视角

维度逻辑结构物理结构
关注点数据之间的抽象关系数据在内存中的实际存储方式
设计阶段需求分析阶段(解决"做什么")实现阶段(解决"怎么做")
修改成本高(影响整体设计)相对较低(局部实现调整)
示例对比树形结构(组织架构)数组存储 vs 链式存储

🛠️3.如何选择数据结构?三大黄金法则

  1. 看操作需求

    • 频繁查询 → 散列存储

    • 频繁增删 → 链式存储

    • 需要排序 → 树形结构

  2. 看数据规模

    • 小数据量 → 简单结构(如数组)

    • 大数据量 → 高效结构(如B+树)

  3. 看业务场景

    • 层级关系 → 树结构

    • 网络关系 → 图结构

    • 先进先出 → 队列


🌟 4.真实世界的数据结构

  • 数据库索引:B+树(平衡多路搜索树)

  • 浏览器缓存:LRU Cache(哈希表+双向链表)

  • 版本控制系统:有向无环图(Git提交历史)

  • 路由算法:图的最短路径(Dijkstra算法)

二、算法概述

🧩 1.什么是算法?

算法是解决问题的明确步骤集合,可以让计算机完成特定任务,并提高计算机系统的效率和性能。如同菜谱指导厨师如何烹饪一道菜:

  • 输入:食材(如牛排、调料)

  • 处理步骤:煎制时间、火候控制

  • 输出:成品(如香煎牛排)

在计算机中,算法是让数据从“原始状态”变成“目标结果”的加工流程。例如:

  • 排序算法:将乱序数字变为有序序列

  • 搜索算法:在数据海洋中快速找到目标


📊 2.如何评价算法好坏?——效率是关键

评价算法如同选择出行方式:

  • 自行车(低效算法):省钱但耗时

  • 出租车(高效算法)&


http://www.ppmy.cn/ops/157705.html

相关文章

redis底层数据结构——链表

文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力,以及顺序性的节点访间方式,并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有…

Rust 测试组织指南:单元测试与集成测试

一、为什么要同时使用单元测试与集成测试 单元测试:更为精细、聚焦某一逻辑单元;可以调用到私有函数,快速定位错误根源。集成测试:作为“外部代码”来使用库的公开接口,测试多个模块间的交互,确保整体功能…

ffmpeg -hwaccels

1. ffmpeg -hwaccels -loglevel quiet 显示ffmpeg支持的硬件设备 2. 输出 Hardware acceleration methods: vdpau cuda vaapi qsv drm opencl 3. 说明 输出中的cuda表示ffmpeg支持Nvidia 硬件设备。编译ffmpeg增加相关硬件设备的配置,输出会显示相应的信…

pycharm ai插件

PyCharm中的AI插件为开发者提供了强大的智能辅助功能,这些插件能够显著提升编码效率、优化代码质量,并提供实时的编程建议和帮助。以下是一些主要的PyCharm AI插件及其功能介绍: 一、CodeMoss(ChatGPT Free) 简介:CodeMoss是一款集成在PyCharm内的顶级AI插件,全称“Cha…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

React Vite 项目增加 eslint 和 prettier

React Vite 项目增加 eslint 和 prettier Eslint 版本为 8.X 1. 安装 8.X 版本的 eslint pnpm i eslint^8.57.0 -D 2. 安装其他包 pnpm add -D eslint-plugin-import prettier eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-prettier eslint-config-pre…

数据库约束(2)

数据库约束(2) 1.检查约束 检查约束时用来检查数据表中字段值有效性的一种手段,可以通过create table或者alter table语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 CHECK 表达式在更新表数据的时候,系统…

从零构建高可用MySQL集群:Percona XtraDB Cluster 实战部署

实战指南:基于Percona XtraDB Cluster 构建高可用 MySQL 集群架构 引言:为什么选择PXC? Percona XtraDB Cluster(PXC)是基于Galera协议的MySQL高可用解决方案,提供同步多主复制、数据强一致性等关键特性&…