
数据结构
文章平均质量分 70
严文文-Chris
这个作者很懒,什么都没留下…
展开
-
为什么哈夫曼编码不会有歧义?
原因说明哈夫曼编码是前缀码所有编码之间互不为前缀解码树有唯一路径每次从根节点走到叶子,就确定一个字符按位读取无歧义不会出现多种解释路径因此,哈夫曼编码即使是变长编码,也能安全、无歧义地解码。原创 2025-04-15 14:44:03 · 330 阅读 · 0 评论 -
【哈夫曼树和哈夫曼编码是什么?】
哈夫曼树是一种最优二叉树,用于构造最短的前缀编码。是一棵带权路径长度最短的二叉树。权值大的节点离根较近,权值小的节点离根较远。哈夫曼编码是基于哈夫曼树生成的一种无前缀编码(Prefix-Free Code)没有任何一个字符的编码是另一个字符编码的前缀。频率越高的字符,编码越短。频率越低的字符,编码越长。这样整体编码长度最短,实现压缩。概念哈夫曼树哈夫曼编码是什么最优二叉树基于哈夫曼树生成的前缀编码结构树结构,节点有权重编码表(字符 -> 二进制串)特点权重小的节点路径长。原创 2025-04-15 14:42:35 · 285 阅读 · 0 评论 -
【广度优先搜索遍历小结】
广度优先搜索(Breadth-First Search, BFS)是一种图的遍历方法。它的策略是“先广后深”,也就是说,先从起点开始,把离起点最近的点全部访问一遍,再继续访问离起点稍远的点,直到所有的点都访问完。使用方式:BFS 通常用队列来实现。应用场景:可以用来求最短路径、检测连通性、生成最小生成树等。原创 2024-12-09 15:18:53 · 473 阅读 · 0 评论 -
【深度优先搜索遍历小结】
深度优先搜索(DFS)是一种用来遍历图的方法,它的特点是“走到底再回来”。什么意思呢?就是从一个起点出发,沿着一条路径一直往下走,直到走不动了,然后再回头找其他没走过的路继续走,直到所有的点都被访问过。适用范围:DFS 可以用在无向图、有向图、甚至是带权图里。常见用途:比如检测图是否连通、找路径、生成树,甚至一些复杂的问题也能用 DFS 来解决。特性邻接表邻接矩阵时间复杂度( O(V^2) )空间复杂度( O(V^2) )适用场景稀疏图(连接少的图)稠密图(连接多的图)实现难度。原创 2024-12-09 15:15:05 · 525 阅读 · 0 评论 -
【邻接矩阵的缺点】
邻接矩阵适合用来表示边很多的图(比如密集图),或者当你很少进行图的更新时。但是,如果你的图是稀疏图,或者需要频繁更新,那么邻接矩阵就不太适用了。通常来说,在这些情况下,我们会用邻接表来存储图,因为它更加节省空间,操作也更高效。原创 2024-12-07 10:55:59 · 312 阅读 · 0 评论 -
【图小结】
图 ( G ) 可以表示为一个有序对 ( G = (V, E) ),其中:( V ) 是顶点集,包含图中的所有顶点。( E ) 是边集,包含图中的所有边。每一条边连接两个顶点。对于无向图,边没有方向,表示两个顶点之间的双向关系。对于有向图,边有方向,表示从一个顶点到另一个顶点的单向关系。原创 2024-12-07 10:34:33 · 879 阅读 · 0 评论 -
【哈夫曼编码】
哈夫曼编码(Huffman Coding)是基于贪心算法的压缩技术,用于为不同频率的字符分配变长编码。在哈夫曼编码中,频率较高的字符被分配较短的编码,而频率较低的字符被分配较长的编码。哈夫曼编码的关键步骤是构建哈夫曼树。原创 2024-12-06 15:22:05 · 479 阅读 · 0 评论 -
【哈夫曼编码小结】
哈夫曼编码是一种无损数据压缩算法,它通过为频率较高的字符分配较短的编码,为频率较低的字符分配较长的编码,从而有效地减少数据的总编码长度。哈夫曼编码基于原则,哈夫曼编码最早是由在 1952 年提出的。它的出现源于数据压缩的需求,特别是减少字符表示所需的比特数,从而节省存储空间和传输带宽。哈夫曼编码被广泛应用于文件压缩、图像压缩、音频压缩等领域。在早期的计算机存储和网络通信中,数据存储和传输的带宽是非常有限的。为了更有效地利用这些资源,必须采用来减少数据的存储和传输需求。原创 2024-12-06 10:06:57 · 674 阅读 · 0 评论 -
【哈夫曼树构造算法】
定义了表示哈夫曼树节点的类weight:用于存储节点的权重值,也就是构建哈夫曼树时依据的关键属性,比如可以表示某个字符出现的频率等。parent:记录该节点的父节点在节点列表中的索引位置,初始化为-1,表示还没有父节点,也就是该节点一开始是独立的树(只有根节点的树)。lch:存储该节点左孩子节点在节点列表中的索引位置,初始化为-1,意味着一开始没有左孩子。rch:表示该节点右孩子节点在节点列表中的索引位置,同样初始化为-1,代表开始时没有右孩子。构造函数用于创建一个新的节点对象,传入的参数。原创 2024-12-06 09:33:12 · 769 阅读 · 0 评论 -
【链表小结】
链表(Linked List)是一种动态数据结构,由一系列的节点(Node)按顺序连接而成,每个节点包含数据域和指向下一个节点的指针(或引用)。链表通过指针将节点连接成一个有序的序列。链表的基本组成部分包括和,这些概念有助于理解链表的结构和操作。原创 2024-12-05 16:06:30 · 1187 阅读 · 0 评论 -
【线性表小结】
链式存储使用链表来存储线性表的数据,每个节点包含数据和指向下一个节点的指针。插入和删除操作较为灵活,不需要移动元素,只需要调整指针即可。链表又有单链表、双链表和循环链表,不同链表对数据的操作也有不同,下篇文章详细解释,欢迎指出待优化点!顺序存储是通过数组来存储线性表的数据。可以根据下标来访问元素,但插入和删除操作会涉及到数组的移动。(即使用链表)两种方式进行实现。以下是这两种方式的基本实现和常见操作。在Java中,线性表可以通过。原创 2024-12-05 15:41:42 · 761 阅读 · 0 评论 -
【线性表链式结构实现操作】
【代码】【线性表链式结构实现操作】原创 2024-11-22 15:51:21 · 108 阅读 · 0 评论 -
【线性表顺序实现操作】
【代码】【线性表顺序实现操作】原创 2024-11-22 15:50:00 · 113 阅读 · 0 评论 -
【数据结构基本概念】
是计算机中数据组织、管理和存储的方式,是为了便于数据的高效访问和修改。原创 2024-11-20 15:12:04 · 563 阅读 · 0 评论 -
【队列特点及Java实现】
循环队列(Circular Queue)是一种优化的顺序队列,通过环形结构避免“假溢出”的问题。它将最后一个元素和第一个元素相连,形成一个环状队列,并使用队首和队尾指针管理队列。的 Java 实现,包括初始化、判空、判满、入队、出队、取队首元素等操作。顺序队列是基于数组实现的队列。链式队列是基于链表实现的队列。原创 2024-11-19 16:06:49 · 461 阅读 · 0 评论 -
【栈特点及Java实现】
栈(Stack)是一种以下是用 Java 实现和。原创 2024-11-19 15:57:51 · 376 阅读 · 0 评论 -
【B+树特点】
B+树和B树的主要区别在于数据存储的位置和查询效率。B+树通过将数据存储在叶子节点并利用链表连接叶子节点,极大地优化了范围查询和顺序扫描的效率。相比之下,B树将数据分布在整个树的节点中,虽然结构较为简单,但在处理大量数据时,查询效率不如B+树。因此,B+树被广泛应用于数据库和文件系统中,尤其是在需要频繁进行范围查询和顺序访问的应用场景中。参考视频链接:https://www.bilibili.com/video/BV1bs421u7pY?原创 2024-11-14 15:04:40 · 959 阅读 · 0 评论 -
B-树特点以及插入、删除数据过程
查找插入位置:通过树的层级结构,从根节点到叶子节点进行查找,确定插入位置。插入元素:如果目标叶子节点有空间,直接插入元素。节点分裂:如果插入导致节点超出最大容量,将节点分裂并将中间元素推送到父节点。递归分裂:如果父节点也满了,递归地进行分裂,直到找到可以容纳元素的父节点,或者根节点发生分裂,增加树的高度。插入操作保证了B树的平衡性,使得查询、插入和删除操作始终保持对数时间复杂度O(log n)。原创 2024-11-14 14:34:27 · 1584 阅读 · 0 评论 -
【索引存储方式和散列存储方式】
索引存储方式:适用于需要快速查找、范围查询和顺序访问的数据。索引通过建立层次化的索引结构(如B树、B+树、倒排索引等)来加速查询,适合大规模的复杂查询场景。散列存储方式:适用于快速查找、插入和删除操作,尤其在点查找时表现优秀。散列存储方式通过哈希函数将数据映射到固定位置,能够在常数时间内完成查找,但不适合范围查询和排序操作。原创 2024-11-13 15:30:57 · 1400 阅读 · 0 评论