随笔分类 -  初级算法学习

摘要:SPFA 队列优化的Bellman-Ford 由Bellman-Ford算法实现带有负权边的单源最短路,时间复杂度是O(VE),也就是边数乘顶点数。但是根据Bellman-Ford的状态转移方程$$dist[i] = min(dist[i] , last[k] + w[k -> i])$$可知,当且 阅读全文
posted @ 2024-01-01 15:49 凪风sama 阅读(40) 评论(0) 推荐(0)
摘要:Bellman-Ford算法 对于Dijkstra算法,不妨给出这样一个例子 graph LR A((A)) -->|1| C((C)) A -->|2|D((D)) D -->|-4| C 根据Dijkstra算法的流程,选取A为源点。更新与A邻接的顶点,有C和D。选取已更新顶点中距离A的最小值, 阅读全文
posted @ 2024-01-01 12:07 凪风sama 阅读(191) 评论(0) 推荐(0)
摘要:Dijkstra算法求单源最短路 Dijkstra算法应用于求一个给定图的单个源点到其他各顶点的最短路。其中应用Dijkstra算法的图应满足如下条件 图中没有负权边 有向或者无向图都可以 图中若有自环或者重边也可以(需要自己先筛选一下) Dijkstra算法的核心就是从源点开始对各个顶点进行松弛操 阅读全文
posted @ 2023-12-28 22:58 凪风sama 阅读(41) 评论(0) 推荐(0)
摘要:图的广度优先遍历 广度优先遍历,就是在遍历时优先考虑遍历的广度,不像深度优先那样一条路径遍历到底,而是一层一层的遍历。 由于广度优先是一层一层节点的遍历,在图的边权值都为1的情况下,若我们要求出节点a到节点b的最短路,就可以以a为源点(source)进行广搜,当a第一次搜到b时,其路径一定最短。因为 阅读全文
posted @ 2023-12-21 21:07 凪风sama 阅读(49) 评论(0) 推荐(0)
摘要:图的深度优先遍历 深度优先,即对于一个图或者树来说,在遍历时优先考虑图或者树的单一路径的深度。示意图如下 即深度优先搜索的核心就是对一个路径一直向下搜索,当搜索到头时就回溯到前一状态再寻找别的路 深搜问题一般有两种情况,一种是搜索时元素只能用有限次,这需要我们定义一个全局标记数组来对已经使用的数字进 阅读全文
posted @ 2023-12-21 20:37 凪风sama 阅读(47) 评论(0) 推荐(0)
摘要:哈希表 哈希表是一种通过映射来快速查找的数据结构。其通过键值对(key-value)来存储。一个数据通过哈希函数的运算来生成一个属于他自己的键值,尔后将其与键值绑定。当我们想查找这个数据时,就可以直接通过键来访问对应的值,时间复杂度近似为O(1)。 哈希表适用于这样一种场景,当数据范围很大但是数据量 阅读全文
posted @ 2023-12-15 20:03 凪风sama 阅读(367) 评论(0) 推荐(0)
摘要:并查集 并查集是一种采用树形结构存储的集合,可以高效的查找两个元素是否在一个集合当中以及合并两个集合。这里的树形结构并非仅指二叉树,而是一个节点可以有多个孩子。 对于一个并查集的节点,它可以有两个元素,一个存储该节点的数据,另一个用来指向其父节点。当然当我们所存储的元素为1-n的连续整数时,数组下标 阅读全文
posted @ 2023-12-14 22:09 凪风sama 阅读(50) 评论(0) 推荐(0)
摘要:堆的性质 堆可以认为是一种条件优先的队列,相较于普通的队列,堆每次出队时的元素为整个队列中满足某种极端条件的元素,如最大值(大顶堆),最小值(小顶堆)。 堆的存储结构为一棵完全二叉树,其满足这样一个性质。对于每个节点,其左右子树上的元素均小于(大于)该节点上的元素。这样就可以保证根节点上的元素为整棵 阅读全文
posted @ 2023-12-13 22:46 凪风sama 阅读(43) 评论(0) 推荐(0)
摘要:Trie树(字典树) Trie树,是使用树形结构来存储字符串的一种方式,由于使用了树形结构,大大加快了字符串的存储以及多次查询的速度。 Trie树一般用于多字符串存储 , 以及查询一个字符串的出现次数时使用,或者查询以某段字符为前缀的字符串也可。 关于trie树的构造以及树形图像,请看这篇博客 Tr 阅读全文
posted @ 2023-12-12 22:27 凪风sama 阅读(93) 评论(0) 推荐(0)
摘要:KMP算法实现 KMP串匹配主要分为两个步骤,即获得match数组(或者说next数组),然后应用match数组来进行串匹配的简化 获取match数组 KMP的精髓就在于使用match数组使得i指针不需回退,使得暴力的m*n的时间复杂度变为m+n的时间复杂度,其中的m指的就是求match数组的复杂度 阅读全文
posted @ 2023-12-12 19:34 凪风sama 阅读(42) 评论(0) 推荐(0)
摘要:无 阅读全文
posted @ 2023-11-18 08:49 凪风sama 阅读(9) 评论(0) 推荐(0)
摘要:P1164 小A点菜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 阅读全文
posted @ 2023-11-09 17:54 凪风sama 阅读(12) 评论(0) 推荐(0)
摘要:P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 阅读全文
posted @ 2023-11-08 20:42 凪风sama 阅读(26) 评论(0) 推荐(0)
摘要:洛谷P3046 海底高铁 -差分统计经过区间次数 题目贴在这里P3406 海底高铁 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 分析 本题题干很长,但是题意理解很简单。就是给定n个节点,每次仅能在相邻的两个节点之间移动,且任意两个节点之间的高铁费用也不一样。 依据题意,假设从3 阅读全文
posted @ 2023-11-08 15:19 凪风sama 阅读(93) 评论(0) 推荐(0)
摘要:AcWing笔记 -- 区间合并 前言 给定多个区间,如[1, 8] , [7 , 12] , [15, 18], [18 , 25]。可以看出,这些区间之间是有交集的,比如[1,8]和[7,12]以及[15,18],[18,25]。这两对区间可以合并,变为[1, 12]以及[15 , 25]。区间 阅读全文
posted @ 2023-11-06 19:33 凪风sama 阅读(130) 评论(0) 推荐(0)
摘要:AcWing笔记 -- 离散化 前言 所谓离散化,是将给定的有序序列通过二分查找,将其对应的值映射到其对应的序号的过程。如给定一个数组元素[5, 10, 55, 96, 1055464, 546467979],显然这是一个给定长度的有序数组。对于这样一个元素确定的有序数组,离散化之后,5映射为1也就 阅读全文
posted @ 2023-11-06 19:02 凪风sama 阅读(119) 评论(0) 推荐(0)
摘要:AcWing笔记 - 差分 前言 求一个数组的差分,实际上是求前缀和的逆运算。 如给定数组A[N],我们称使得A[i] = B[1] + B[2] + ..... + B[i]的B数组称为A数组的差分 显然A数组即为B数组的前缀和。 关于前缀和,可以看这篇前缀和 - 凪风sama - 博客园 (cn 阅读全文
posted @ 2023-11-05 20:52 凪风sama 阅读(70) 评论(0) 推荐(0)
摘要:AcWing笔记——前缀和 前言 数组的前缀和,代表着一个数组前N个数的和。主要用于优化这样一种场景: 当题目要求进行求出一个数组从下标 \(i\) 到下标 \(j\) 之间的元素的和,且会多次进行这种操作时,我们可以使用前缀和的方法来优化求和的过程。 时间复杂度对比: 若使用for循环遍历整个数组 阅读全文
posted @ 2023-11-05 19:30 凪风sama 阅读(63) 评论(0) 推荐(0)
摘要:Acwing 800.数组元素的目标和 给定升序的有序数组A(长度为n),B(长度为m)以及目标值x,求出满足\(A[i] + B[j] = x\)的数对\((i,j)\),题目保证仅有 唯一解 输入样例: 4 5 6 1 2 4 7 3 4 6 8 9 输出样例: 1 1 双指针来做 定义指针i, 阅读全文
posted @ 2023-10-18 15:39 凪风sama 阅读(37) 评论(0) 推荐(0)