![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 50
四面八方来
keep learning
展开
-
堆和树的区别
堆具有特定的性质,最常见的是 “最小堆” 和 “最大堆”。在最小堆中,父节点的值小于或等于其子节点的值,而在最大堆中,父节点的值大于或等于其子节点的值。“堆” 这个术语在计算机科学中指的是一种特定类型的数据结构,它满足一些特定的性质,主要用于实现优先队列和相关算法。虽然堆通常以树的形式呈现,但它们与通常的树结构有一些重要的区别,因此被单独命名为 “堆” 而不是 “树”。因此,虽然堆在某种程度上可以看作是一种特殊的树结构,但它们的重点和应用领域有所不同,因此被单独命名为 “堆”。原创 2023-09-18 14:00:24 · 180 阅读 · 0 评论 -
算法通关村第5关【黄金】| LRU设计与实现
LRU(最近最少使用)是一种缓存淘汰策略,用于在缓存容量有限时,选择最近最少使用的缓存项进行淘汰,以便为新的数据留出空间。LRU 算法的基本思想是,当缓存已满并且需要插入新数据时,会将最久未被访问的数据从缓存中删除。双向链表用来记录缓存中数据项的访问顺序,最近被访问的数据项放在链表的头部,最久未被访问的数据项放在链表的尾部。LRU 算法的优点是可以有效地利用缓存空间,保持缓存中数据的热度。然而,实际实现中需要考虑查找、插入、删除操作的效率,以及处理哈希冲突等问题。LRU 算法的实现方式可以是通过维护。原创 2023-08-23 11:47:30 · 201 阅读 · 0 评论 -
算法通关村第5关【青铜】| Hash和队列的特征
哈希也称为散列,通过算法变成固定长度的输出值,存入对应的位置例如这个算法为取模算法,index=number 模 7存入1到15。原创 2023-08-21 18:19:00 · 279 阅读 · 0 评论 -
2016年考研数据结构算法题(递归+非递归)
已知由n(n>=2)个正整数构成的集合A ,将其划分成两个不相交的子集A1和A2,元素个数分别为n1和n2,A1和A2中元素之和分别为S1和S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。要求:1)给出算法的基本设计思想。2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。3)说明你所设计算法的平均时间复杂度和空间复杂度。原创 2022-10-19 23:20:35 · 392 阅读 · 0 评论 -
B-树(插入删除)代码+逻辑
如果只有子树是t-1相邻的兄弟至少t个,则将x的一个关键字下移到子树中,将相邻的兄弟中的一个关键字上移到x中,相应的孩子指针也上移,使得x新增加一个关键字(直接返回不需要递归)删除关键字C,前一个孩子为AB,后一个孩子为DE(此处假设F已经被删掉了),均小于t=3,合并关键字C和结点DE到结点AB中,此时C在叶子结点中,直接删除。删除关键字C,其前一个孩子为AB,小于t=3,后一个孩子DEF不小于3,关键字C的直接后继为D,删除D,然后将C替换为D。当数据量很大时,内存不够,找磁盘。原创 2022-10-05 18:23:26 · 457 阅读 · 0 评论 -
关键路径(逻辑加代码)
关键路径,AOE网,ETE,ETV,LTE,LTV原创 2022-09-12 00:40:58 · 164 阅读 · 0 评论 -
拓扑排序(含代码)
所有的⼯程或者某种流程都可以分为若⼲个⼩的⼯程或者阶段,我们称这些⼩的⼯程或阶段为“活动”。比如把大象装进冰箱,第一步打开冰箱,第二步把大象装进去,第三部关上冰箱门。这三步中的每一步便是一个活动在⼀个表示⼯程的有向图中,⽤顶点表示活动,⽤弧表示活动之间的优先关系的有向图称为顶点表示活动的⽹(Activity On Vertex Network),简称AOV⽹。原创 2022-09-06 18:45:00 · 1596 阅读 · 0 评论 -
最短路径(迪杰斯特拉、弗洛伊德含代码)
基本思想就是递归的产生矩阵A0 A1...An,矩阵Ak[i][j]表示从顶点i到顶点j以不大于下标k的顶点为途径点的最短路径长度,An-1就是最终结果。假设图G{V,E},集合S为已经求出的当前距离顶点V0最短的顶点的集合,那么V-S就是待计算的顶点集合,定义数组d[]中保存顶点到各顶点的当前最短路径。单源最短路径的迪杰斯特拉算法需要辅助数组d[],同样多源最短路径弗洛伊德算法也需要辅助二维数组D[][]对于⽆向图⽽⾔,最短路径就是从源点V0到终点Vn所包含的边最少的路径。任意两个顶点之间的最短路径。原创 2022-09-02 13:11:25 · 494 阅读 · 0 评论 -
最小生成树(kruskal,prim)
一个连通图的最小连通子图(再去掉一条边就不是连通的),一般针对于带权图,即在原图当中边的权值最小的一棵生成树。Kruskal算法(贪心)从局部最优到整体最优,不断选择当前最优的。从边出发先把所有的边按降序排列从小到大添加,遇到环跳过(采用并查集判断)。Prim算法。普⾥姆算法在找最⼩⽣成树时,将顶点分为两类,⼀类是在查找的过程中已经包含在⽣成树中的顶点,剩下的为不在集合里的。选初始结点,将它移到集合里找出与集合里顶点相连接的权值最小的顶点,将其加入集合。重复步骤2...原创 2022-08-30 22:02:55 · 147 阅读 · 0 评论 -
深度优先搜索、广度优先搜索DFS/BFS(含代码)
优点不需要保存搜素中的状态,空间优化。适合搜索全部的解缺点因为递归,时间慢。如果不给递归限制深度,很容易超出时间限制。缺点要保持搜素中的状态,大量判重优点适合用来找最优解(最短路径)原创 2022-08-21 11:57:41 · 293 阅读 · 0 评论 -
平衡二叉树详解(逻辑加代码)
目的:提高查找效率判断平衡:任意一个结点的左子树和右子树的高度差不能超过绝对值1平衡因子:1,0,-1如何平衡:旋转 左旋1. 失衡结点的右孩子代替结点的位置2. 右孩子的左子树变成失衡结点的右子树3. 该失衡结点变成它右孩子的左子树右旋1. 失衡结点的左孩子代替它的位置2. 失衡结点的左孩子的右子树变成失衡结点的左子树3. 失衡结点变成左孩子的右子树插入情况分析: 如果插入的结点在失衡结点的左孩子的左子树上面,只进行一次右旋 当插入的结点在失衡结点的左孩子的右子树上面(如果...原创 2022-08-09 19:37:06 · 286 阅读 · 0 评论 -
双端队列的链表表示详解(含逻辑与代码)
双端队列的链表表示,详细介绍逻辑,有图有代码原创 2022-07-25 14:02:14 · 326 阅读 · 1 评论 -
递归与尾递归
递归的基本准则,被调用的函数都会创建一个副本,并且为各自的调用者服务,不受其他任何函数的影响。当一个大的问题能够分解成一个个小的问题的时候就想到递归。尾递归是什么,汉诺塔问题递归步骤...原创 2022-07-26 21:09:52 · 713 阅读 · 0 评论 -
并查集详解
并查集,详细代码原创 2022-07-28 23:05:54 · 155 阅读 · 0 评论