- 博客(33)
- 收藏
- 关注
原创 算法学习笔记【图论-邻接表-单源最短路】
对于一个有向图邻接矩阵邻接表对于一个无向图,我们一般将无向边看作两条方向相反的有向边,从而采用与有向图一样的储存方式。因此,我们解决无向图是按照有向图的方式进行解决。长度为nnn的表头数组 head 记录了从每个节点出发的第一条边在ver和edge数组中的储存位置,长度为m的边集数组ver和edge记录了每条边的终点和边权,长度为m的数组模拟了链表指针,表示从相同节点出发的下一条边在ver和edge数组中的储存位置。邻接表的空间时间复杂度为OnmO(n+m)Onm。
2023-08-14 15:50:41
121
原创 算法笔记【并查集】
并查集:是一个可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。详细的说,并查集包括如下两个基本操作。find:查询一个元素属于哪一个集合Merge:把两个集合合并成一个大集合需要定义集合的表示方法:在并查集中,我们采用“代表元”法,即每个集合选择一个固定的元素,作为整个集合的“代表”。维护一个数组fff,用fxf[x]fx保存元素xxx所在集合的“代表”。这种方法可以快速查询元素的归属集合,但在合并时需要修改大量元素的fff值,效率很低。
2023-08-11 15:31:39
153
1
原创 P1928 外星密码 (递归)
有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 XX 会压缩为 [DX] 的形式(D 是一个整数且 1≤D≤99),比如说字符串 CBCBCBCB 就压缩为 [4CB] 或者[2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]] 则是三重的。
2023-07-24 15:49:45
190
原创 算法学习笔记【树状数组】
树状数组(Binary Index Tree, BIT)是很多竞赛队员心中最简洁优美的数据结构之一。单点修改:更新指定点的数据区间查询:查询指定区间内的数据的和当然,树状数组的作用远不止这些,这里只讨论基本的数据结构。但是树状数组的操作比较局限,虽然代码比线段树少,但却没有线段树进行的操作多,我也写过一个线段树的博客,有兴趣的可以了解一下线段树学习笔记洛谷:P3374 【模板】树状数组 1。
2023-07-14 18:49:16
60
1
原创 算法学习笔记【线段树】
线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 O(logn) 的区间修改,还可以同时支持多种操作(加、乘),更具通用性。线段树就是一棵二叉平衡树,根节点代表某一段区间和,越往下区间越小,直到区间为的长度为1的时候结束(叶子节点)。洛谷:P3372 【模板】线段树 1。
2023-07-14 00:57:14
100
1
原创 dijkstra算法+迷宫探索例题(牛客)
Dijkstra 算法是求一个图中一个点到其他所有点的最短路径的算法,是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度 O(目前我了解的dijkstra算法可以解决两类问题,一种就是该题这样的,还有一种就是邻接矩阵。每次从 「未求出最短路径的点」中取出距离距离起点最小路径的点,以这个点为桥梁刷新「未求出最短路径的点」的距离模板代码:求1到n点的距离int n,m,k;int djs[N];// 存储 1到 N这两个点之间的最短距离。
2023-07-13 16:13:42
311
1
原创 AcWing: 139. 回文字串的最大长度 hash和manacher算法
题解写的很详细,为什么这个做,怎么做,为什么能想到这个,都写的很清楚,一看就会。
2023-07-10 23:09:40
162
1
原创 双指针的深度理解 缩减搜索空间
同样的思路,我们来看只动 i 的情况,按照上一个计算当我们计算到了第二阶段,sum = A[1] + A[5] ,如果sum < target, 那么当我们移动 j 的时候,因为 sum = A[1]+A[5], 那么sum < A[1] + A[4]、sum < A[1] + A[3] ........ 所以无论怎么移动 j 都无法得到结果。所以,只能移动 i ,那么我们就将 i 进行加一。当我们遇到双指针的时候,有些简单的我们可能会写,但一遇到难点的却又无从下手,那是因为我们没有理解双指针的性质。
2023-07-08 21:01:48
74
1
原创 AcWing: 138.兔子与兔子 和 字符串hash的介绍
该题用到的算法是哈希;简单来说就是把任意输入通过特定方式(hash函数) 处理后 生成一个值。这个值等同于存放数据的地址,这个地址里面再把输入的数据进行存储。这个hash函数又叫散列函数,会有一些常用的构造散列函数的方法,但是处理结果值可能相同,那就叫冲突,冲突也有常用的冲突常用的冲突解决方法。
2023-07-06 18:22:26
101
1
原创 Acwing: 146.序列 二叉堆算法
该题运用的算法是二叉堆,堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小)。当根节点保存堆中最大值时,称为大根堆;反之,则称为小根堆。二叉堆(Binary Heap)是最简单、常用的堆,是一棵符合堆的性质的完全二叉树。它可以实现 O(logn) 地插入或删除某个值,并且 O(1) 地查询最大(或最小)值。
2023-07-04 19:28:35
53
原创 迷宫问题(广度优先搜索BFS与最短路径)
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。一个5 × 5的二维数组,表示一个迷宫。左上角到右下角的最短路径,格式如样例所示。
2023-02-12 13:54:54
270
1
原创 仙岛求药 c++ bfs,初学者
少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由 M×N 个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。1) '@':少年李逍遥所在的位置;3) '#':有怪物的方格;输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。
2023-02-11 20:06:26
375
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人