
数据结构与算法(Java)
文章平均质量分 94
Java代码实现的数据结构与算法相关文章
new Random()
一名正在学习Java后端开发的在校生,记录学习过程,分享学习心得和资源推荐。
展开
-
【图】最小生成数—Kruskal算法
最小生成树(Minimum Spanning Tree,简称 MST)是指在一个连通的无向图中,找到一个包含所有顶点的树,并且边的权值之和最小。连通图:是指图中任意两个顶点之间都存在路径的图。连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树 就不再连通;反之,在其中引入任何一条新边,都会形成一条回路。原创 2024-04-03 18:15:47 · 806 阅读 · 0 评论 -
【图】不读概念,用过程轻松理解并实现拓扑排序
实现拓扑排序:借助队列,来一次BFS即可。1.初始化:把所有入度为0的顶点加入到队列中。2.当队列不为空时: (1)拿出队头元素,加入到最终结果中。 (2)删除与该元素相连的边。 (3)判断:删除边指向的顶点,此时入度是否为0,如果为0,加入到队列中。原创 2024-03-30 14:22:21 · 1091 阅读 · 0 评论 -
【图(2)】:图的广度优先遍历和深度优先遍历
给定一个图G和其中任意一个顶点v0,从v0出发,沿着图中各边访问图中的所有顶点,且每个顶点仅被遍历一次。综上,只要对二叉树的各种遍历非常熟悉(这里主要是层序遍历),然后刷过一些层序遍历、递归回溯的算法,图的广度优先遍历就非常简单了。在二叉树中,我们对树的最多的操作就是各种遍历,而二叉树的前、中、后序遍历都是深度优先遍历,层序遍历就是广度优先遍历。原创 2024-03-11 22:40:39 · 1224 阅读 · 0 评论 -
【图(1)】:用邻接矩阵和邻接表实现图
图(Graph)是由节点(Node)和边(Edge)组成的数据结构。图可以用来表示对象之间的关系,其中节点表示对象,边表示对象之间的连接或关联。图的基本概念包括以下几个要素:节点:也称为顶点(Vertex),表示图中的对象。节点可以具有属性或标签,用于描述对象的特征。原创 2024-03-11 21:25:58 · 1864 阅读 · 0 评论 -
【深入理解LRU Cache】:缓存算法的经典之作
LRU Cache(Least Recently Used的缩写,即最近最少使用,它是一种Cache的替换算法。看Cache替换算法这篇文章)是一种常见的缓存淘汰算法。用于在有限的缓存空间中管理数据对象。LRU Cache 的核心思想是基于时间局部性原理,即最近被访问的数据在未来可能会被再次访问。原创 2024-03-07 18:39:30 · 7964 阅读 · 1 评论 -
【并查集】一种简单而强大高效的数据结构
并查集(Disjoint Set)是一种用来管理元素分组和查找元素所属组别的数据结构。它主要支持两种操作:查找(Find)和合并(Union)。在并查集中,每个元素都被分配一个代表元素(也可以称为根节点),该代表元素用来表示所属的组别。初始时,每个元素都是其自身的代表元素,即根节点。当需要进行合并操作时,实际上是将两个组别的根节点连接在一起,从而将这两个组别合并为一个组别。而查找操作则是通过不断向上查找代表元素,直到找到根节点为止,以确定元素所属的组别。原创 2024-03-05 16:42:08 · 1012 阅读 · 0 评论 -
【布隆过滤器(Bloom Filter)】数据结构:高效判断元素是否存在
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。原创 2024-03-02 20:31:59 · 1273 阅读 · 0 评论 -
【位图(Bitmap)】数据结构:高效存储与处理大量数据
位图是一种数据结构,是用每一位来存放某种状态,适用于海量数据,整数,数据无重复的场景。通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。原创 2024-03-01 21:49:12 · 2398 阅读 · 1 评论 -
【HashMap的底层数据结构——哈希表】
虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为哈希表的插入/删除/查找时间复杂度是O(1)。HashMap和HashSet即Java中利用哈希表实现的Map和Set。Java中使用的是哈希桶方式解决冲突的。Java会在链表长度大于一定阈值后(链表长度大于8,数组长度大于等于64),将链表转变为搜索树(红黑树)。原创 2024-02-10 22:04:22 · 997 阅读 · 1 评论 -
【二叉搜索(排序)树】——一种高效查找的数据结构(清晰图解)
二叉搜索树(Binary Search Tree,BST)又称二叉排序树,是一种常见的数据结构,它具有以下特点:每个节点最多有两个子节点,分别称为左子节点和右子节点。对于树中的任意节点,其左子树上所有节点的值都小于它的值,而右子树上所有节点的值都大于它的值。即它的左右子树也分别为二叉搜索树。中序遍历二叉搜索树可以得到一个升序排列的序列。由于以上特性,二叉搜索树常被用于实现动态集合的数据结构,其中查找、插入和删除操作的平均时间复杂度为 O(log n),其中 n 为树中节点的数量。原创 2024-02-07 18:40:42 · 1016 阅读 · 1 评论 -
【常见排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序
如图是对基于比较排序算法的归纳,还有非基于比较的排序如计数排序、基数排序和桶排序。这里主要介绍前五种(插入、希尔、选择、堆排序、冒泡)排序比较简单的排序。原创 2024-01-23 20:25:12 · 919 阅读 · 1 评论 -
【基于分治的两大重点排序算法】快速排序、归并排序;特定场景效率极高的排序——计数排序
上一篇博客中介绍了基于比较的排序中的前五种排序 –常见排序算法这次主要介绍两大最常考和也是最重要的排序——快速排序和归并排序。除了这两个排序外,还要介绍一个非基于比较的,好理解的,又在特定场景有奇效的计数排序。能通过LeetCode912排序数组。原创 2024-01-25 17:36:10 · 923 阅读 · 0 评论 -
【AVL树(平衡二叉搜索树)】——一种高效平衡的二叉搜索树
AVL树是一颗二叉搜索树,并且是一种自平衡二叉搜索树,它得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis。AVL树通过在每个节点上维护一个平衡因子(Balance Factor)来保持树的平衡,确保树的高度始终保持在一个较小的范围内,从而保证了在最坏情况下的时间复杂度为O(log n),其中n是树中节点的数量。二、AVL树的性质平衡性质:AVL树是一种高度平衡的二叉搜索树,即任何节点的两棵子树的高度差都不超过1。原创 2024-02-18 22:27:23 · 730 阅读 · 0 评论 -
【优先级队列(堆)】
队列是一种先进先出(FIFO)的数据结构,优先级队列(Priority Queue)是一种特殊的队列数据结构,其中每个元素都有一个与之关联的优先级。在优先级队列中,元素按照优先级的顺序进行排列,具有较高优先级的元素会被先出队。原创 2024-01-21 14:15:31 · 936 阅读 · 1 评论 -
【双列集合:Map集合及其实现类HashMap、TreeMap详解】
Map集合是一个接口,是一种用于存储键值对(key-value)映射关系的数据结构。键(key)在Map里面是唯一的,但是值(value)可以重复,一个key对应一个value。以下是Map集合和其常见的实现类关系图,也是本篇博客的主要内容。Map集合中包含了其所有实现类通用的方法和三种遍历方式。原创 2023-11-04 23:34:16 · 302 阅读 · 3 评论