![](https://img-blog.csdnimg.cn/direct/dd9383bdbea04accbfdf572e910411d4.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
文章平均质量分 78
上传基于CS61B的数据结构代码,并且附带个人感悟
poison_Program
啥都搞不懂的程序猿
展开
-
CS61B:线性表
【代码】CS61B:线性表。原创 2024-04-25 20:04:20 · 476 阅读 · 0 评论 -
CS61B:循环队列
扩容成本: 扩容操作涉及到内存的重新分配及数据的复制,特别是当队列大小达到数组容量时,每次添加元素都可能触发扩容,这可能导致较大的性能开销。固定容量: 初始需要定义数组的大小,虽然可以动态扩容,但这是通过创建新数组并复制旧数组元素来实现的,耗费时间和空间。复杂度: 在链表的头部和尾部添加或删除元素都是常数时间的操作(O(1)),因为不需要移动其他元素。缓存不友好: 链表的节点可能在内存中不连续,导致缓存命中率降低,可能影响性能。可能的空间浪费: 如果队列的使用量远小于数组的实际分配大小,会造成空间浪费。原创 2024-04-27 22:31:22 · 1247 阅读 · 3 评论 -
多年后,再探算法和数据结构
多年来,通过深入学习和实践各种编程语言,我对数据结构和算法在程序设计中的中心地位有了新的认识。本次从汇编语言到高级编程语言的探讨,展示了无论技术如何进步,构成程序的核心—算法和数据结构—始终保持其基础和不变的角色。原创 2024-05-09 00:11:26 · 456 阅读 · 1 评论 -
CS61B:并查集
并查集(Union-Find)是一种数据结构,用于处理不相交集合(Disjoint Sets)的合并和查询操作。它非常适合解决动态连通性问题,例如在图论中判断两个节点是否属于同一个连通分量。并查集的主要操作有两个:查找(Find)和合并(Union)。并查集通常使用一个数组来实现,数组中的每个元素表示一个节点,值表示该节点的父节点。如果某个元素是根节点,则其值为负数,表示集合的大小(按大小合并)或秩(按秩合并)。并查集以其高效的操作和易于实现的特性,成为解决连通性问题的常用工具。原创 2024-05-19 00:00:25 · 424 阅读 · 0 评论 -
二分查找介绍
二分查找是一种在排序数组中查找目标值位置的搜索算法。它通过反复将搜索区间一分为二来实现,直到找到目标值或搜索区间为空。二分查找利用数组已排序的特性,将时间复杂度降低到 O(log N)。原创 2024-05-20 00:20:05 · 516 阅读 · 0 评论 -
基于链表实现的Map与二叉搜索树的Map对比
Set;总体而言,ULLMap实现简单,适用于小规模数据集,操作效率在键值对数量较少时表现尚可。然而,随着数据规模增大,其操作性能会显著下降。而BSTMap尽管实现复杂,但在大规模数据集下操作效率更高,尤其在平衡树情况下,其查找、插入和删除操作的性能明显优于ULLMap。因此,在需要处理较大数据集或对操作效率要求较高的情况下,BSTMap是更合适的选择。原创 2024-05-22 00:05:28 · 1302 阅读 · 0 评论 -
红黑树基于Java代码的剖析
红黑树通过维护额外的颜色属性和引入旋转操作,确保了树的高度始终保持在 (O(\log n)) 的级别,从而保证了高效的插入、删除和查找操作。通过上述代码剖析,可以清晰地看到红黑树是如何通过颜色调整和旋转来保持平衡的。原创 2024-05-25 00:16:25 · 547 阅读 · 0 评论 -
构造一个高效的哈希表:从基本思路到最终实现
在本篇博客中,我们从最基本的思路出发,逐步完善了一个高效的哈希表的实现。我们通过引入哈希函数解决键的类型问题,使用开放地址法解决冲突,通过取模操作减少空间浪费,并最终实现了动态更改哈希表大小以优化性能。这些优化措施使得我们的哈希表在处理不同类型的键和不同规模的数据时都能保持高效运行。希望通过本文的介绍,你对构造高效的哈希表有了更深入的理解,也能在实际应用中更好地利用哈希表这一重要的数据结构。原创 2024-06-04 00:00:00 · 420 阅读 · 0 评论 -
优先队列的实现:基于最小堆的 Java 实现
优先队列是一种抽象数据类型,其中每个元素都有一个与之相关的优先级。在删除操作中,总是删除具有最高优先级的元素(对于最小堆来说是最小值)。优先队列的典型应用包括任务调度、图算法(如 Dijkstra 算法)等。原创 2024-06-08 00:00:00 · 1016 阅读 · 0 评论 -
高效Trie实现:子节点的存储数据结构:数据索引字符映射,哈希表以及二叉搜索树
Trie(前缀树)是一种高效的字符串数据结构,广泛用于实现字典和搜索引擎中的自动补全功能。本文将详细探讨三种不同的Trie实现方法:基于数据索引字符映射的Trie、基于哈希表的Trie和基于二叉搜索树(BST)的Trie,并比较它们的优缺点和性能。原创 2024-06-11 00:00:00 · 1089 阅读 · 0 评论 -
最短路径与最小生成树:Dijkstra、Prim与Kruskal算法详解
为了完整性,我们需要定义一个Graph类,以支持上述算法的实现。i ++) {} } }i ++) {} } }i++) {@Override通过对Dijkstra、Prim和Kruskal算法的介绍和代码实现,我们可以更好地理解这三种经典算法在图论中的应用。每种算法都有其适用场景和优劣性,选择合适的算法可以提高解决问题的效率。希望本文能为你在学习和应用图算法时提供帮助。原创 2024-06-13 08:39:01 · 1309 阅读 · 0 评论 -
基础排序算法详解与对比分析
排序算法是计算机科学中最基础和重要的算法之一。本文将详细介绍几种经典的排序算法,包括选择排序、插入排序、希尔排序、堆排序和归并排序,并进行代码实现和对比分析。原创 2024-06-15 10:56:28 · 739 阅读 · 0 评论 -
基数排序详解:LSD和MSD的实现与比较
基数排序是一种基于“位”的排序算法,通过将数据按位进行多次排序来实现最终的排序效果。它特别适用于整数和字符串的排序。基数排序有两种主要的变种:LSD和MSD,它们的主要区别在于排序的方向。通过将计数排序抽象出来,我们简化了LSD和MSD基数排序的实现。这样不仅提高了代码的复用性和可读性,也使得修改和扩展算法变得更加容易。无论是从最低有效位开始排序的LSD基数排序,还是从最高有效位开始排序的MSD基数排序,都可以利用同一个计数排序模块来实现其核心功能。原创 2024-06-20 20:52:31 · 445 阅读 · 0 评论 -
使用Java实现哈夫曼编码
哈夫曼编码是一种经典的无损数据压缩算法,它通过赋予出现频率较高的字符较短的编码,出现频率较低的字符较长的编码,从而实现压缩效果。这篇博客将详细讲解如何使用Java实现哈夫曼编码,包括哈夫曼编码的原理、具体实现步骤以及完整的代码示例。首先定义一个内部类Node,用于表示哈夫曼树的节点。每个节点包含字符、频率、左子节点和右子节点。实现接口用于在优先队列中排序。// 字符// 频率// 左右子节点// 判断是否为叶子节点= null));// 根据频率比较节点,用于优先队列。原创 2024-06-21 22:09:33 · 635 阅读 · 0 评论