数据结构

分类下的全部文章

AOE网络-介绍
数据结构
11 分钟

AOE网络-介绍

这篇笔记围绕 AOE 网络梳理工程计划中的任务依赖与时间约束建模方法,说明它以有向无环图表示项目:顶点是事件,边是活动,边权是活动持续时间,源点到汇点的最长路径决定最短总工期。内容重点区分事件最早发生时间 ve、最迟发生时间 vl,以及活动的最早开始 E、最迟开始 L、最早完成时间和总时差,并给出正向取最大、逆向取最小的计算公式。拓扑排序部分解释了 Kahn 入度法和 DFS 法如何为依赖任务生成合法顺序,也说明在 AOE 网中正向推算最早时间本质上依赖拓扑序。关键路径求法采用 CPM 的“一次正推 + 一次逆推”:先从源点计算各事件 ve 和总工期,再从汇点反推 vl,最后用 E(i,j)==L(i,j) 判断关键活动。示例通过逐步计算 1 到 6 号事件的 ve、vl,展示活动 d 的最早开始和最迟开始都为 12,从而说明关键活动判定的具体过程。适合学习项目进度控制、DAG 任务编排、构建依赖分析或 Airflow、Prefect、Dagster 等调度框架底层思想的读者,用来建立从图论模型到关键路径计算的基础框架。

散列表-介绍
数据结构
13 分钟

散列表-介绍

散列表是一篇面向数据结构初学者的基础笔记,围绕“如何用哈希函数把关键字直接映射到存储位置”展开,解释它为什么能在平均情况下获得接近 O(1) 的插入、删除和精确查找效率。内容先定义哈希函数、散列表、装填因子等核心概念,再梳理开放定址法、链地址法、线性探测、二次探测、双重散列以及直接定址、除留余数、数字分析、平方取中等构造哈希函数的方法。文章通过与顺序表、链表、二叉搜索树对比,突出散列表适合快速精确查找,但本质上是以空间换时间,并不强调有序遍历或范围查询。示例部分用 H(key)=key%7、表长 11、线性探测插入 8 个关键字,逐步展示冲突处理,并计算成功查找平均长度为 9/8,失败查找平均长度为 6。这里特别提醒失败查找的统计起点由哈希函数值域决定,虽然物理槽位是 0 到 10,但 key%7 只会产生 0 到 6,不能把 7 到 10 也纳入平均。最后补充数据结构哈希与 MD5、SHA、CRC32 等成熟哈希函数的目标差异,并说明它们在数据分片、URL 缩短、文件去重、跨平台实现和安全需求中的使用边界。

数据结构
6 分钟

平衡二叉树AVL

这篇笔记面向正在学习数据结构和索引原理的读者,梳理 AVL 树作为自平衡二叉搜索树的基本定义、操作流程与应用价值。正文先用“任意结点左右子树高度差不超过 1”界定平衡条件,并引入高度和平衡因子 BF,说明 AVL 通过保持树高接近对数级来让查找、插入、删除稳定在 O(log n)。在基本操作部分,查找沿用普通 BST 的比较路径,不需要旋转;插入则先按 BST 规则放置新节点,再自底向上更新高度和 BF,一旦出现 |BF|>1 就在局部执行单旋或双旋。文章重点拆分 LL、RR、LR、RL 四种失衡形态:左左和右右分别用一次右旋或左旋修复,左右和右左则需要先处理子节点方向再旋转失衡节点。删除部分强调先按 BST 的叶子、单孩子、双孩子规则完成结构删除,再回溯检查平衡,且一次删除可能在多层触发旋转。最后,笔记把 AVL 的高度控制思想延伸到 B 树、B+ 树和 MySQL InnoDB、PostgreSQL、SQLite 等索引场景,帮助读者理解平衡树为什么适合动态有序且频繁增删的数据维护。

数据结构
4 分钟

哈夫曼树与哈夫曼编码

这篇笔记聚焦哈夫曼树与哈夫曼编码在无损压缩中的基本原理:根据符号出现次数或概率分配变长二进制码,让高频符号更短、低频符号更长,从而降低加权平均码长。正文把哈夫曼编码定位为前缀码中的平均码长最优方案,并用带权路径长度 WPL 公式说明其目标是寻找一棵使权值与码长乘积总和最小的满二叉树。构造部分给出典型流程:统计权值,将每个符号作为单节点树放入小根堆,反复合并权值最小的两棵树,直到得到唯一根树,再按左 0 右 1 的路径生成码字。示例使用 a 到 f 的频率演示树形结构、各字符码字以及 face 被拼接成比特串的过程,同时提醒左右孩子次序不同会导致具体码字不同,但总加权码长保持一致。文章还补充了哈夫曼树的结构性质与实现代价,包括 n 个叶子对应 2n-1 个节点、小根堆构造复杂度为 O(nlogn)、解码时从根按 0/1 走到叶子再回根继续。应用场景覆盖 ZIP、GZIP、PNG、MP3、JPEG、HTTP/2 HPACK、HTTP/3 QPACK、嵌入式存储和搜索索引等,适合数据结构学习者、后端与网络开发者理解压缩算法中“最优前缀码”的基础机制。

数据结构
1 分钟

关于“数据结构”类别

“数据结构”类别的核心作用是为站内相关内容提供清晰的归档边界,而不是展开某一种具体结构或算法实现。该说明需要帮助作者判断:一篇文章是否真正以数据组织方式、结构特性、使用场景或相关规则为中心,而不是仅在其他主题中顺带提及。它还强调分类应与既有类别保持区分,避免因为概念相邻、应用场景重叠或文章内容混杂而造成归类混乱。适合纳入该类别的内容,应围绕该分类存在的理由、承载的话题范围、与其他分类的差异以及后续维护规则展开。对于站点维护者而言,这类说明的价值在于统一写作和归档口径,减少重复分类、过细拆分或不必要的新建类别。读者也能据此快速理解该栏目关注的知识范围,并判断某篇技术笔记是否应被放入“数据结构”这一分类下。