算法
文章平均质量分 91
aMonstere
这个作者很懒,什么都没留下…
展开
-
AC自动机——解决多模匹配问题
AC自动机什么是多模匹配问题?有多个模式串的匹配问题,就是多模匹配问题处理方法多个模式串,建立成一棵字典树和文本串的每一位对齐匹配,模拟暴力匹配算法的过程常规多模匹配从文本串中的每一次在字典树中看是否有可以匹配的当匹配成功文本串中的she时,也就意味着后续一定会匹配成功he she对应了字典树中的节点P,he对应了字典树中的节点QP和Q就是等价匹配节点,如果从P引出一条边指向Q,就可以加速匹配过程 在P下面查找节点的操作,等价于在Q下面查找节点的操作这条等价关系边,通常在A原创 2021-02-23 03:02:32 · 1009 阅读 · 0 评论 -
字符串匹配之字典树与双数组字典树
字典树:姓名:Trie曾用名:字典树 ;单词查找树作用:单词查找 ;字符串排序根节点:整本字典根节点的子节点:按照前后顺序,分别存储a.b.c.d…当该字母在本树中,没有引申出来的单词,也可能不存在该字母子节点分红白两色红色:可以与根节点独立成词白色:不可与根节点独立成词也就是红色节点的数量就是单词的数量字典树如何做字符串排序?答:将字符串插入到字典树中,然后进行深度优先遍历,得到的字符串就是排好序的时间复杂度为O(n)正式字典树插入写法#include <std原创 2021-02-22 03:08:10 · 409 阅读 · 0 评论 -
字符串匹配算法——暴力 + KMP +SUNDAY + 哈希 + SHIFT_AND
单模匹配暴力匹配只有一个模式串机型匹配模式串:待查找的字符串依次性对齐,模式串的第一位和母串的每一位开始匹配,直到发现母串中的一部分跟模式串匹配单模匹配问题,顾名思义,只有一个模式串依次对齐模式串和文本串的每一位,直到匹配成功关键:不重不漏的找到答案int brute_force(const char *s, const char *t) { for (int i = 0; s[i]; i++) { int flag = 1; for (int j原创 2021-01-30 02:17:11 · 321 阅读 · 0 评论 -
树状数组
树状数组一、前缀和数组原数组:a1,a2,a3,......,ana_1, a_2, a_3, ......,a_na1,a2,a3,......,an前缀和:s[i]=∑k=1k=iak,ai=Si−Si−1s[i] = \sum_{k =1 }^{k = i}a_k, a_i = S_i - S_{i - 1}s[i]=∑k=1k=iak,ai=Si−Si−1差分数组:X=ai−ai−1X = a_i - a_{i - 1}X=ai−ai−1X数组是a数组的差分数组,a原创 2021-01-28 21:51:44 · 135 阅读 · 0 评论 -
菜鸡提升日记——递归枚举
枚举题目来自acwing1.递归实现指数型枚举1.保证答案中升序,需要保证备选数组中数字为升序,题目为自然数1-n不用考虑排序,但是需要一个start来确定每次放入答案数组中的数字从多少开始。2.输出每一种方案,需要设立0-n个边界值(n为空集)#include<bits/stdc++.h>using namespace std;int ans[20];int vis[20];int n;void dfs(int pos,int start,int cur)//star原创 2020-09-06 02:34:08 · 180 阅读 · 0 评论 -
单调队列与单调栈
热身一、数据结构操作分析:插入操作:可以用一个栈模拟,一直往栈顶放元素删除操作:就是正常的弹栈操作左移操作:弹栈操作,可弹出的元素需要保留,可以放到第二个栈里面右移操作:讲第二个栈顶元素,移动到第一个栈里面询问操作:维护一个数组F,每次元素更新,都需要维护数组F问题分析:关键就是新造一个数据结构,结构定义 + 结构操作模拟光标的功能,做移动,右移动,插入,删除,用对顶栈来模拟实现对顶栈,用数组模拟,或者用链表模拟题目中的BUG:Query K中 K 可能大于当前位置#incl原创 2021-01-26 03:23:30 · 223 阅读 · 0 评论 -
动态规划(二)——刷题 + 优化
练习题一:切割回文给出一个字符串S,问对字符串S最少切几刀,使得分成的每一部分都是一个回文串(注意:单一字符是回文串)状态定义:dp(i):dp(i) :dp(i): 以i位置为结尾,经过最少的切割,可以出现多少回文串?状态转移:dp[i]=min(dp[j])+1∥s[j+1]−>s[i]为回文dp[i] = \min (dp[j]) + 1 \| s[j + 1] -> s[i] 为回文dp[i]=min(dp[j])+1∥s[j+1]−>s[i]为回文根据状态转原创 2021-01-25 03:22:35 · 324 阅读 · 1 评论 -
动态规划(一)
一、从递推到动规(一)引:编写程序:如果有一对小兔,每一个月都剩下一对小兔,而所生下的每一对小兔在出生后的第三个月都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子?得到了递推方程f(n)=f(n−1)+f(n−2)f(n) = f(n - 1) + f(n - 2)f(n)=f(n−1)+f(n−2)推算:第一个月 -> 一个兔子第二个月 -> 两只兔子(第一个月生的)第三个月 -> 三只兔子 (二月的两只兔子 + 一月成熟兔子生的兔子)第四个原创 2021-01-22 00:22:22 · 199 阅读 · 0 评论