![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 75
从基础数据结构到算法,详细讲解,单篇博客阅读量最高达15万
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
个人网站:http://www.potba.cn/
展开
-
一致性哈希
如上图所示,如果我们添加或删除服务器,那么客户端通过哈希所得到的的映射的服务器结点全部会发生变化,就有可能造成大量的请求无法命中,导致缓存数据重新加载。在分布式缓存服务器中,经常需要对服务结点进行添加和删除操作,我们希望的是服务结点的添加和删除操作尽量减少数据到结点之间的映射关系的更新。大量的客户端都要通过同一个服务器去干活,资源分配不均衡。为了解决问题,就引入了。原创 2023-01-23 10:15:00 · 119 阅读 · 0 评论 -
聊聊红黑树,B/B+树和键树
对于一个M阶B树具有以下特性:M阶就是分支的个数。原创 2023-01-18 20:12:00 · 1916 阅读 · 0 评论 -
二分查找的模板
用二分去找目标值的左边界和右边界的问题,当然我们可以去先普通二分找到目标值,再在这个目标值的位置开始左右去线性探测找左右边界,但是当目标值重复太多,你这么写二分就不是二分了,不就是On线性去找。左闭右开来写,注意的就是当中间值大于目标值的时候,right可不是mid-1,而是mid,因为右边是开的。这篇博客的二分用的都是左闭右闭的区间,对于二分来说还是我还是习惯这样写。所以这里写的都是纯二分的思路,还是用左闭右闭去写,好好体会代码逻辑。,我分开写去分别表示左边界和右边界。最传统的二分查找,用左闭右闭写。原创 2022-11-10 15:44:03 · 548 阅读 · 0 评论 -
Union-Find并查集的模板
昨天刷到有关并查集的题684,685,之前对于并查集只是听过,刷这俩题的时候查了资料好好学习了一下,有关并查集的概念理论这里就不多赘述了。贴一版自己写的并查集的代码模板,(已经路径压缩,优化过的),加上注释,以后方便看代码去理解。原创 2022-12-09 16:40:45 · 134 阅读 · 0 评论 -
(AVL)平衡二叉树
还是照旧,本篇主要讲一下代码实现,AVL相关的定义什么的这里不多赘述。AVL树就是为了解决bst树出现了“线性”的问题,而发明的。什么是线性的就是一棵bst树全都只有左子树或者全都只有右子树,能想象来吧。AVL树是一类特殊的二叉排序树,.为了保证相对平衡,每次插入元素都会做相应的旋转上面说了为了让avl树能保持平衡,每次插入节点后不平衡了就需要调整,旋转。这样的话就衍生出来了avl的四种旋转方式,四种旋转方式搞懂了,avl的创建就没问题了下面说说四种调整方式。原创 2022-12-03 12:02:43 · 550 阅读 · 1 评论 -
01背包问题总结
本篇博客是看了卡哥的动态规划章节之后,总结了一下模板和一些问题,其实去年也写过01背包的文章,今年就当重新复习,更加深入的总结了一下,顺便带上用一维数组(滚动数组)去解决这个问题的思路和写法。之前的文章链接本篇纯属方便自己日后回过头来看,要想详细了解的可以去看看卡哥的讲解。太顶了!原创 2022-11-18 22:08:10 · 151 阅读 · 4 评论 -
回溯算法:排列树(全排列)
那我们是不是先选取元素1,进入下一层递归去找剩下23的顺序,那么23是一种,交换2和3得到32也是一种。我们根据上面的结果来一步一步去说明一下,首先123,132都是1打头,后面23来回变化;整个算法步骤画出来就是一个树形结构,需要我们深度遍历,层向思考。我们如何去枚举出来他的各种情况呢,其实就是递归和回溯的过程了。我们得出来的结果无非就是各个元素打头,后面依次去选择排列 ,排列树就是给你个序列,如123,得出他的全排列,如下。123是不是就是1和1去交换,后面不变。我们就拿上面这个123为例子;原创 2022-11-09 20:15:24 · 1646 阅读 · 1 评论 -
最小生成树:MST
3)具体做法:首先构造一个只含 n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。在一个网中(带权图),用n-1条边将n个顶点连接起来,并且这n-1条边的总和是最小的。2)基本思想:按照权值从小到大的顺序选择 n-1条边,并保证这 n-1条边不构成回路。1)克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。用Prim算法来写,图是用邻接矩阵创的这里就写算法代码,图相关其他的在这。还有一种算法是克鲁斯卡尔Kruskal。原创 2022-10-20 22:27:00 · 252 阅读 · 1 评论 -
数据结构:图的遍历
这节遍历是基于上节的图结构图的遍历:从图的某个顶点出发,依次访问图中所有的顶点,每个顶点被访问一次且仅访问一次。防止多次访问某一个顶点的思路:设置辅助数组visited[n],用来标记每个被访问的顶点,初始化状态为visited[n]=0;如果顶点被访问到,则修改辅助数组的值 :visited[i]=1。原创 2022-10-15 14:41:04 · 630 阅读 · 0 评论 -
数据结构:图
线性 元素 空表树 结点 空树图 顶点图Graph--由顶点Vertex的有穷非空集合和顶点之间的边Edge组成 G(V,E)无向边:顶点和顶点之间的边无方向 a到b (a,b) (b,a)有向边(弧):边有方向 a->b 不能写成无向图:图中的边都没有方向---无向完全图 n*(n-1)/2有向图:图中的弧都有方向 ---有向完全图 n*(n-1)权值:边或弧上的数字网:带权的图度入度出度。原创 2022-10-13 21:24:46 · 398 阅读 · 0 评论 -
(BST) 二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树、二叉搜索树。它或者是一棵空树;其高度与树中结点个数n成对数关系,检索的时间开销为O(logn)。但是很有可能检索的时间将变成线性的情况。原创 2022-10-04 09:41:06 · 975 阅读 · 0 评论 -
(已知中后序、先中序遍历)恢复二叉树
我们以下图的二叉树作为示例来演示二叉树的恢复根据前序和中序 或者后序和中序 才能复原二叉树,要恢复二叉树必须知道中序序列,只是知道前序和后序,不能恢复二叉树,因为不知道中序序列无法获知根节点的左右子树位置。首先创建结点和树,以下代码不做过多赘述,如果不清楚可以转入。原创 2022-09-29 21:24:26 · 659 阅读 · 0 评论 -
二叉树的创建和基本操作(详解)
本文主要讲解递归实现二叉树的代码,对于树,二叉树的性质概念不多赘述我们以'#'代表空结点(为已有结点下的左右空孩子),方便创建二叉树,我们以下图的二叉树作为讲解。原创 2022-09-27 10:54:30 · 21643 阅读 · 1 评论 -
动态规划和贪心算法小结
(动态规划)彻底搞懂0-1背包动态规划:动态规划应用于子问题重合的情况,不同的子问题具有相同的子子问题。动态规划算法将每个子问题求解一次,将其解保存在一个表格中,需要时进行调用。刻画一个最优解的结构特征。 递归的定义最优解的值。 计算最优解的值,有自顶向下和自底向上的方法,通常采用自底向上的方法。动态规划算法的基本要素:最优子结构:问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问.原创 2022-04-04 14:30:00 · 314 阅读 · 0 评论 -
(动态规划)彻底搞懂0-1背包
问题描述:有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?问题分析:背包问题可以通过贪心、动态规划等多种算法解决实现。本文章从动态规划的角度求解0/1背包问题。动态规划原理:是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法方法。0/1背包问题本质上是寻找全局最优解的问题,在尽量消耗小的背包容量的前提下,获得更多的价值。问题举例:有一个小偷他有一个容量为8的背包物体的体积和价值如下原创 2021-12-04 21:19:24 · 3254 阅读 · 3 评论 -
万字总结八大排序算法(图文详解)
文章目录 1.冒泡排序 2.选择排序 3.插入排序 4.归并排序 5.快速排序一、冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。每一趟排序后的效果都是讲没有沉下去的元素给沉下去。主要思路:1.比较相邻的元素。如果第一个比第二个大,...原创 2021-11-26 22:18:13 · 6980 阅读 · 1 评论 -
(数据结构)AOE网求关键路径
AOE网是以边表示活动的有向无环网,在AOE网中,具有最大路径长度的路径称为关键路径,关键路径表示完成工程的最短工期。关键路径是指在AOE网中从源点到汇点路径最长的路径。这里的路径长度是指路径上各个活动持续时间之和。在AOE网中,有些活动是可以并行执行的,关键路径其实就是完成工程的最短时间所经过的路径。关键路径上的活动称为关键活动。(关键路径可能不止一条)首先我们需要明白以下四个概念属性:Ve[i]:从源点到顶点vi的最长路径长度,称为事件vi的最早发生时间,记作ve(i)。求解ve(i)可以从原创 2022-03-29 14:30:49 · 6677 阅读 · 3 评论 -
课程设计(飞机订票系统) 超全
搭建思路图:操作使用链表实现,编译器使用vs2019成员框架搭建:用户进入操作界面,选择添加机票信息,包括(飞机航班号,出发地,目的地,起飞时间,降落时间,飞机票价,当日折扣,机票总数)进入订票系统,输入起飞地,目的地,调用查询函数会打印机票信息到屏幕,若没有则告知,如果有,订票人开始订票。输入(姓名,身份证号,性别,订购航班,购票数量)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<std原创 2022-03-17 18:50:10 · 11670 阅读 · 24 评论 -
堆排序详细图解(通俗易懂)
什么是堆堆是一种叫做完全二叉树的数据结构,可以分为大根堆,小根堆,而堆排序就是基于这种结构而产生的一种程序算法。堆的分类大根堆:每个节点的值都大于或者等于他的左右孩子节点的值小根堆:每个结点的值都小于或等于其左孩子和右孩子结点的值 两种结构映射到数组为:大根堆:小根堆://父-->子:i--->左孩子:2*i+1, 右孩子:2*i+2;//子-->父:i--->(i-1)*2;(i为下标元素)排序思想1.首先将待排序的数...原创 2022-02-17 16:17:01 · 231252 阅读 · 51 评论 -
数据结构-单链表基本操作带图完整详解
1.什么是链表链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的。2.为什么要使用链表在未学习链表时,我们常用的存储数据的方式无非就是数组。使用数组存储数据的好处就是查询快,但是它的弊端也很明显:1.使用前需声明数组的长度,一旦声明长度就不能更改2.插入和删除操作需要移动大量的数组元素,效率慢3. 只能存储一种类型的数据顺序表就是在计算机中内存以数组的形式保存的线性表,因此这些弊端同理而链表则可以实现以上这些数组所不具备的功原创 2022-01-09 16:54:21 · 7089 阅读 · 0 评论