![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Data Structure
文章平均质量分 82
Common data structure in algorithm competition.
南判
这个作者很懒,什么都没留下…
展开
-
浅析AC自动机
前置知识KMP算法字典树Trie其实会了也不一定懂,但不会一定不懂简介AC自动机是在以字典树为基础的数据结构下,结合 KMP \;KMP\;KMP算法的思想所建立的一种更为高级的数据结构说不说这句话其实没区别,常用于多模式串的匹配,通过引入一个 fail \;fail\;fail指针来减少匹配的回溯次数,更高效的进行匹配。实现首先最根本的就是先要由多个模式串建立起字典树,然后...原创 2020-03-21 21:23:10 · 132 阅读 · 0 评论 -
初探回文树/回文自动机
概述回文树(Palindromic TreePalindromic\ TreePalindromic Tree,又称回文自动机)是一种用于存储字符串所有回文子串的数据结构,通过对这些回文子串建立回文树,从而高效便捷地解决一系列设计回文串的问题。前置姿势字典树AC自动机实现由于本人太懒,所有图片来源于网络先来明确回文树与普通字典树的区别所在:和字典树不同的第...原创 2020-04-05 21:20:37 · 220 阅读 · 0 评论 -
浅析后缀数组
引入在多模式匹配时,之前提到的AC自动机能够以很高的效率进行匹配,但是匹配的前提是要知道所有的模式串后建立自动机,再和文本串进行匹配,所以利用自动机的前提是必须知道所有模式串,而在例如搜索引擎中,模式串是未知的,所以这时候就需要对文本串进行处理,从而有了后缀数组。原理首先显而易见模式串一定是文本串某个后缀的前缀,也可能就是这个后缀(这里假设模式串是可以匹配到的)。所以对一个文本串,可以将其分...原创 2020-03-29 16:21:16 · 159 阅读 · 0 评论 -
浅析二叉堆
原理堆是一颗完全二叉树,其中堆顶一定是“最大”或“最小”的,这里的“最大”“最小”是相对于优先级而言,并不是简单的数值大小。堆一般分为小根堆和大根堆,即对于任一非根节点,它的优先级都大于或小于堆顶。其中,C++的STL中的优先队列就是二叉堆的应用。堆的操作1.插入对于堆的插入,实现原理就是不断与其父结点进行比较,如果不满足大根堆或小根堆的性质,则进行交换,由于堆是完全二叉树,所以满足关系...原创 2020-03-02 09:26:14 · 146 阅读 · 0 评论 -
浅谈单调队列
介绍单调队列,顾名思义,就是具有单调递增或者单调递减性质的队列。而单调队列可以解决“滑动窗口”的问题——滑动窗口即对一段长度为n的序列,对于每个连续的长度为k的子串,求得该字串的最小值或最大值,在线性时间内完成整个过程。另外,单调队列对解决动态规划问题也提供了有力的优化。双端队列实现:typedef struct{ int index; //记录入队时间 int x; //记录数...原创 2020-02-17 20:52:13 · 115 阅读 · 0 评论 -
浅析字典树
什么是字典树字典树是一种利用树形结构来存储字符串的数据结构。利用树形结构一对多的特点,每个元素都可以有多个子元素,因此在字符串比较过程中,只需要判断最后一个元素的祖先链是否相等,时间复杂度为O(n)O\left ( n \right)O(n)。typedef struct{ int node[26]; //此处只考虑小写字母 bool mark;}trie;trie t[maxn]...原创 2020-02-17 20:14:22 · 409 阅读 · 0 评论 -
浅析二叉查找树
什么是二叉查找树所谓二叉查找树,就是严格任一左子树小于根,右子树大于根的二叉树,平均情况在O(log n)内查找数据元素。参考博客#include<bits/stdc++.h>using namespace std;const int maxn = 9e2 + 16;const int INF = 0x7fffffff;int pos;typedef struct Bi...原创 2020-02-07 12:19:09 · 151 阅读 · 0 评论