海贼——数据结构下 + 算法下
文章平均质量分 92
学习笔记
aMonstere
这个作者很懒,什么都没留下…
展开
-
AC自动机——解决多模匹配问题
AC自动机什么是多模匹配问题?有多个模式串的匹配问题,就是多模匹配问题处理方法多个模式串,建立成一棵字典树和文本串的每一位对齐匹配,模拟暴力匹配算法的过程常规多模匹配从文本串中的每一次在字典树中看是否有可以匹配的当匹配成功文本串中的she时,也就意味着后续一定会匹配成功he she对应了字典树中的节点P,he对应了字典树中的节点QP和Q就是等价匹配节点,如果从P引出一条边指向Q,就可以加速匹配过程 在P下面查找节点的操作,等价于在Q下面查找节点的操作这条等价关系边,通常在A原创 2021-02-23 03:02:32 · 987 阅读 · 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 · 314 阅读 · 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 · 126 阅读 · 0 评论 -
单调队列与单调栈
热身一、数据结构操作分析:插入操作:可以用一个栈模拟,一直往栈顶放元素删除操作:就是正常的弹栈操作左移操作:弹栈操作,可弹出的元素需要保留,可以放到第二个栈里面右移操作:讲第二个栈顶元素,移动到第一个栈里面询问操作:维护一个数组F,每次元素更新,都需要维护数组F问题分析:关键就是新造一个数据结构,结构定义 + 结构操作模拟光标的功能,做移动,右移动,插入,删除,用对顶栈来模拟实现对顶栈,用数组模拟,或者用链表模拟题目中的BUG:Query K中 K 可能大于当前位置#incl原创 2021-01-26 03:23:30 · 218 阅读 · 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 · 306 阅读 · 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 · 191 阅读 · 0 评论 -
线段树
线段树线段树:解决区间的修改以及查询,用来维护一维序列的一种高级数据结构支持的操作:奇性函数的区间修改与查询修改:Modify(值,位置) 查询:Query(区间的起始点,区间的终止点)线段树中的关键词:完全二叉树:线段树程序实现时候的实际存储结构区 间: 线段树中每个节点所维护的范围向 上 更 新:用两个子节点的信息更新本节点的信息下 沉 标 记:将本节点的懒惰标记更新给两个子节点口 诀:下沉发生在递归之前,向上发生在递归之后一、问题原创 2021-01-20 04:13:21 · 178 阅读 · 0 评论 -
霍夫曼树与霍夫曼编码
霍夫曼树以及哈夫曼编码一、什么是哈夫曼树与哈夫曼编码编码是什么答:在ASCII 编码中‘a’ = 97 = (01100001)2(01100001)_2(01100001)2‘0’ = 48 = (00110000)2(00110000)_2(00110000)2注意:任何信息,在计算机中,都是二进制存储的ASCII编码规则下的信息:“aa00” = 0110 0001、01100001、00110000、00110000信息的价值在于流通,从一台计算机 传输到 另外一台计算机原创 2021-01-18 22:29:20 · 936 阅读 · 0 评论 -
手撕红黑树
从0到1手撕红黑树红黑树:一种自平衡的二叉查找树一、性质 (平衡条件) (很重要)节点非黑即红根节点是黑色叶子节点(NIL)是黑色红色节点连接的两个子节点均为黑色 -> (红色节点与红色节点不可以相连)从根节点到所有叶子节点的路径上,黑色节点的数量相同小推论:性质4+性质5 => 最长边节点数量:最短边节点数量 = 2 :1某种程度上来说,红黑树也是靠控制树高来控制平衡的节点定义typedef struct Node { int key; int co原创 2021-01-15 02:16:17 · 574 阅读 · 0 评论