恋上数据结构与算法
文章平均质量分 79
系统构建数据结构与算法的知识体系
沉梦听雨.
大家好,我是沉梦听雨。一个专注于分享Java知识以及日常工作点点滴滴的程序员。我的目标是通过分享我的经验和知识,帮助更多的人理解和掌握Java编程。如果你从我的内容中获得了帮助,还请为我点个免费的赞。这对我来说意义重大,也是我持续更新内容的动力。GitHub Pages:https://cmty256.github.io/
展开
-
数据结构学前须知
算法 + 数据结构 = 程序。原创 2023-11-06 09:45:45 · 32 阅读 · 0 评论 -
【恋上数据结构】前缀树 Tire 学习笔记
Trie 也叫做字典树、前缀树(Prefix Tree)、单词查找树。Trie 搜索字符串的效率主要跟字符串的长度有关。假设使用 Trie 存储catdogdoggydoescastadd六个单词,结果如下所示Trie 的优点:搜索前缀的效率主要跟前缀的长度有关Trie 的缺点:需要耗费大量的内存(一个字符一个节点),因此还有待改进更多 Trie 相关的数据结构和算法。原创 2023-12-05 09:28:45 · 316 阅读 · 0 评论 -
【恋上数据结构】哈夫曼树学习笔记
哈夫曼编码,又称为霍夫曼编码,假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。可以转成 ASCII 编码 (651000101) ,但是有点冗长,如果希望编码更短呢?可以先约定好字符串中的 5 个字母对应的二进制,如下所示如果使用哈夫曼编码,可以压缩至 41 个二进制位,约为原来长度的 68.3%原创 2023-12-04 15:04:28 · 159 阅读 · 0 评论 -
【恋上数据结构】优先级队列学习笔记
根据优先队列的特点,很容易想到: 可以直接利用二叉堆作为优先队列的底层实现。操作系统的多任务调度。原创 2023-12-04 15:01:44 · 241 阅读 · 0 评论 -
【恋上数据结构】二叉堆学习笔记
一般来说,如果我们要删除某个元素的话,我们通常会拿到最后一个元素先覆盖它的位置,然后再把最后一个元素删掉,相当于同学们直接将 43 的值覆盖掉 0 这个位置的值,要再把这个值清空。总结起来,要将空间复杂度降低到 O(1),需要在原始数组上进行操作,但这可能会对原始数组造成修改,并可能会有限制和权衡。总结起来,要将空间复杂度降低到 O(1),需要在原始数组上进行操作,但这可能会对原始数组造成修改,并可能会有限制和权衡。在当前的实现中,二叉堆的空间复杂度是 O(n),其中 n 是元素的数量。原创 2023-11-30 11:50:43 · 252 阅读 · 0 评论 -
哈希表(附部分源码解析)
如何计算自定义对象的哈希值呢?假设现在有一个对象 person。把 person 当作是字符串,把 person 当作字符串,然后这每一个哈希值当作是每一个字符。1、哈希值太大,整型溢出怎么办?不用做任何处理,只要最后返回的是一个 int 类型的值就行。2、如果不重写hashCode()会怎么样?⭐️自定义的对象,如果不重写哈希值的话,那么它最终生成的哈希值会和这个对象的【内存地址】直接挂钩的。原创 2023-11-21 11:29:32 · 611 阅读 · 0 评论 -
复杂度分析
算法是用于解决特定问题的一系列的执行步骤。比如计算 a + b 的和以及 1 到 n 的和。原创 2023-11-02 16:41:57 · 41 阅读 · 0 评论 -
【恋上数据结构】动态数组学习笔记
数据结构是计算机存储、组织数据的方式。包含以下几种结构:线性结构树形结构图形结构在实际应用中,根据使用场景来选择最合适的数据结构。原创 2023-11-02 16:47:28 · 66 阅读 · 0 评论 -
【恋上数据结构】链表学习笔记
链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的。链表应该包含两样东西:size 和 first。size:代表你将来存储的多少个元素,相当于你有多少个节点,多少个 NODE。first:指向你的第一个元素,也就是头节点,第 0 个位置的节点。抽象类不对外公开,并且是无法被new创建的。抽象类可以编写一些公共代码(抽取类结构),而接口里面不能。而且抽象类实现接口类时可以不用全部接口方法都实现。当做父类,ArrayList和LinkList都可以继承它。具体代码实现/**原创 2023-11-06 10:03:14 · 56 阅读 · 0 评论 -
栈的实现及应用
是一种特殊的线性表,只能在一端进行操作添加push入栈移除pop出栈。原创 2023-11-06 10:07:20 · 40 阅读 · 0 评论 -
队列(Queue)
队列是一种特殊的线性表,只能在头尾两端进行操作队尾添加enQueue入队队头移除deQueue出队。原创 2023-11-16 20:44:42 · 62 阅读 · 1 评论 -
二叉树(Binary Tree)
节点的度(degree):子树的个数树的度:所有节点度中的最大值叶子节点(leaf):度为 0 的节点层数(level):根节点在第 1 层,根节点的子节点在第 2 层,以此类推节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数树的深度:所有节点深度中的最大值树的高度:所有节点高度中的最大值树的深度 等于 树的高度有序树树中任意节点的子节点之间有顺序关系无序树森林由 m(m >= 0) 棵互不相交的树组成的集合真二叉树:满原创 2023-11-16 20:46:37 · 172 阅读 · 1 评论 -
二叉搜索树(Binary Search Tree)
假设现在有这么一个需求:在 n 个动态的整数中搜索某个整数?(查看其是否存在)针对这个需求,有没有更好的方案?原创 2023-11-16 20:56:07 · 304 阅读 · 1 评论 -
AVL自平衡树
添加可能会导致所有祖先节点都失衡只要让高度最低的失衡节点恢复平衡,整棵树就恢复平衡【仅需 O(1) 次调整】删除可能会导致父节点或祖先节点失衡(只有 1 个节点会失衡)恢复平衡后,可能会导致更高层的祖先节点失衡【最多需要 O(logn) 次调整】平均时间复杂度- 和高度有关搜索: O(logn)添加: O(logn),仅需 O(1) 次的旋转操作删除: O(logn),最多需要 O(logn) 次的旋转操作。练习题110. 平衡二叉树 - 力扣(LeetCode)原创 2023-11-16 21:05:53 · 58 阅读 · 1 评论 -
B树-多路搜索树
B树 是一种平衡的搜索树,多用于文件系统、数据库的实现特点。原创 2023-11-16 21:12:24 · 397 阅读 · 0 评论 -
Set集合
List(列表):列表是一种有序的数据结构,其中的元素可以重复,并且可以通过索引访问和修改。列表通常用于按照插入顺序存储数据,可以进行元素的添加、删除和修改等操作。Set(集合):集合是一种无序的数据结构,不允许重复元素。集合通常用于存储唯一的元素,可以执行集合运算(如并集、交集、差集)以及判断元素的存在性。Queue(队列):队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,它按照元素的插入顺序进行操作。队列通常用于模拟排队或任务调度等场景,支持元素的入队和出队操作。原创 2023-11-16 21:14:02 · 30 阅读 · 0 评论 -
Map映射
Map 在有些编程语言中也叫做(dictionary,比如 Python、Objective-C、Swift 等)原创 2023-11-16 21:15:05 · 191 阅读 · 0 评论