算法笔记
文章平均质量分 55
Remember00000
这个作者很懒,什么都没留下…
展开
-
KMP算法
KMP算法讲解原理快速字符串匹配算法PMT部分匹配表:表示到当前这个位置,最大的前缀和后缀匹配的数量进行匹配时,到了不相同的地方,只要找到前一位的PMT值,然后将模式字符串指针移到那个位置就能保证指针前面的模式串部分和原串部分是匹配的。为了方便直接调转指针位置,将PMT的值向后移一位,每次直接转移至当点位置数组指向位置即可,这个新数组为 next数组。匹配时通过这个next数组匹配。求解next数组就相当于两个相同的字符串求解next数组用动态规划的思想**设:**已经求得next[i-1原创 2022-05-07 17:39:52 · 181 阅读 · 0 评论 -
【算法笔记】最短路
最短路问题 A: 算法7-15:迪杰斯特拉最短路径算法在带权有向图G中,给定一个源点v,求从v到G中的其余各顶点的最短路径问题,叫做单源点的最短路径问题。在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次序产生最短路径的算法。掌握这种高效建图方法,以及每次都要tot=0,否则re,地杰斯特拉的模板题写法,以及使用vis标记可以达到只有最后输出有用,在过程中没用,判定条件为距离更小,而不是没有到达过(如果是就是贪心算法了,不能保证全局最优);注意无穷的写法。原创 2022-04-07 23:40:43 · 336 阅读 · 0 评论 -
算法笔记-图搜索
统计图的连通分支数思路 建图,搜索,注意这种建图方式是有向图,反例: 1 2,3 4,4 1这种不会识别出来,因此建图时需要使用有向图,在add阶段加入两个方向的路径;add时从1开始的边的标号,0用来判断结束,斗则冲突有问题int tot=0;const int maxn=1e6;int nxt[maxn]={0},head[maxn]={0},u[maxn]={0},v[maxn]={0};int vis[maxn]={0};void add(int i,int j){ tot原创 2022-03-30 20:33:11 · 187 阅读 · 0 评论 -
【算法笔记9.2】树
问题 B: 二叉树如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示原创 2022-03-28 17:14:29 · 185 阅读 · 0 评论 -
算法笔记8.2BFS宽搜
问题 C: 【宽搜入门】8数码难题思路为:将每种棋盘对应成一个整数,整数存进map表示已经出现过这种状态,对于每种状态,转化成3x3的矩阵,判断是否有下一种状态存进queue,,对于每种状态存取到达这步的步数;BFS宽搜。提升 这道题做到这我就完了,但是其实它有很多优化问题我没想到,甚至是AI大作业;无解情况存在,但题目不涉及,也考虑是题目比较简单;对于阶乘计算9!;**DBFS**双向深搜,还不理解是在干啥#include<bits/stdc++.h>// #include<原创 2022-03-23 20:18:38 · 303 阅读 · 0 评论 -
map使用结构体作为key结构体内含有数组
map使用结构体作为key结构体内含有数组问题struct作为map的key,报错解:结构体内部重定义<,==号;后续问题,结构体里面含有数组,不能按照==定义的位移确定键值,也就是数组相同,map仍然会继续插入新元素:map里面使用equal等函数,再加上数组比较复杂,最好还是自己写一个搜索判断的函数,花很多时间搜索,但是不理解map的内部机理没有用。struct作为map的key当结构体内部没有数组,只有基本类型时可用。注意,重定义运算符必须使用const,因为是map内部要求默认的s原创 2022-03-23 20:14:35 · 806 阅读 · 0 评论 -
算法笔记深搜
问题 E: 【递归入门】出栈序列统计栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两•种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。实际是一种栈操作,如图条件分析:用in、out分别表示入队队列和出队队列当in为空时,栈内的只能出去,为终止条件,序列已经确定原创 2022-03-21 00:16:52 · 945 阅读 · 0 评论 -
【算法笔记】4.3递归
4.3递归本系列为《算法笔记》刷题记录,记录自己有思考的错的地方,版子题不多解释只放代码。就是将问题分解处理,解题主要考虑两点:终止条件问题分解回溯递归过程中,使用条件判断,不满足条件时,不再继续向下递归,这种过程叫回溯。问题 D: 八皇后会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2…b原创 2022-03-12 11:30:30 · 111 阅读 · 0 评论