摘要:简介字符串的处理几乎无处不在,常用的字符串算法有KMP、扩展KMP、Trie树、AC自动机、Manacher、哈希、SA、SAM等。Knuth-Morris-Pratt 算法给你两个字符串AB,询问B串是否是A串的子串(A串是否包含B串)。可以枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假...
阅读全文
随笔分类 - 算法整理
摘要:简介字符串的处理几乎无处不在,常用的字符串算法有KMP、扩展KMP、Trie树、AC自动机、Manacher、哈希、SA、SAM等。Knuth-Morris-Pratt 算法给你两个字符串AB,询问B串是否是A串的子串(A串是否包含B串)。可以枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假...
阅读全文
摘要:计算几何计算几何是一门兴起于二十世纪七十年代末的计算机科学的一个分支,主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。计算几何问题的输入一般是关于一组几何对象的描述,如一组点、一组线段,或者一个多边形的按逆时针顺...
阅读全文
摘要:爬山算法爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。爬山算法一般存在以下问题:局部最大高地:也称为平顶,搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低。山脊:搜索可能会在山脊的两面来回震荡,前进步伐很小。解决方...
阅读全文
摘要:动态树动态树问题, 即要求我们维护一个由若干棵子结点无序的有根树组成的森林。要求这个数据结构支持对树的分割、合并,对某个点到它的根的路径的某些操作,以及对某个点的子树进行的某些操作。在这里我们考虑一个简化的动态树问题,它只包含对树的形态的操作和对某个点到根的路径的操作:维护一个数据结构,支持以下操作...
阅读全文
摘要:什么是后缀数组后缀树(Suffix tree)是一种数据结构,能快速解决很多关于字符串的问题,缺点是算法复杂难懂且容易出错。而后缀数组、后缀自动机、后缀仙人掌都是后缀树的替代品。后缀数组 Suffix Array 是一个一维数组,它将字符串S的n个后缀从小到大排序后把排好序的后缀的开头位置顺次放入数...
阅读全文
摘要:*在学习后缀自动机之前需要熟练掌握WA自动机、RE自动机与TLE自动机*什么是后缀自动机后缀自动机 Suffix Automaton (SAM) 是一个用 O(n) 的复杂度构造,能够接受一个字符串所有后缀的自动机。它最早在陈立杰的 2012 年 noi 冬令营讲稿中提到。在2013年的一场多校联合...
阅读全文
摘要:什么是数位 DP在信息学竞赛中,有一类难度不大但异常麻烦的问题——数位计数问题,这类问题的主要特点是询问的答案和一段连续的数的各个数位相关,并且需要对时间效率有一定要求。由于解决这类问题往往意味着巨大的代码量,而众多的特殊情况又意味着出现错误的巨大可能性,因此很少有人愿意解决此类问题,但只要掌握好的...
阅读全文
摘要:RMQ(Range Minimum/Maximum Query)问题是求区间最值问题。对于长度为 n 的数组 A,进行若干次查询,对于区间 [L,R] 返回数组A中下标在 [L,R] 中的最小(大)值。可以用线段树来解决这个问题,预处理的复杂度是 O(nlogn),查询的复杂度是 O(logn)。更...
阅读全文
摘要:计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。计数排序的基本思想就是对于每一个输入元素x,确定出小于x的元素个数。有了这一信息就可以把x直接放到它在最终输出数组中的位置上。例如,如果有17个元素小于x...
阅读全文
摘要:什么是主席树可持久化数据结构(Persistent data structure)就是利用函数式编程的思想使其支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗。因此可持久化线段树也叫函数式线段树又叫主席树。可持久化数据结构在算法执行的过程中,会发现在更新一个动态集合时,需要维护其...
阅读全文
摘要:什么是树链剖分树链剖分并不是一个复杂的算法或者数据结构,它能把一棵树拆成链。树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。给定一棵树,将它划分成若干条互不相交的路径,满足:从节点 u->v 最多经过 logn 条路径以及 logn 条不在路径上的边。树链剖分后,我们就可以利用其它的数据结构...
阅读全文
摘要:基本概念LCA:树上的最近公共祖先,对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。RMQ:区间最小值查询问题。对于长度为n的数列A,回答若干询问RMQ(A,i,j),返回数列A中下标在[i,j]里的最小值下标。朴素LCA算法求出...
阅读全文
摘要:树的直径树的直径(Diameter)是指树上的最长简单路。直径的求法:两遍搜索 (BFS or DFS)任选一点w为起点,对树进行搜索,找出离w最远的点u。以u为起点,再进行搜索,找出离u最远的点v。则u到v的路径长度即为树的直径。简单证明:如果w在直径上,那么u一定是直径的一个端点。反证:若u不是...
阅读全文
摘要:什么是哈希表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。哈希表作为一种高效的数据结构,有着广泛的应用。如果哈希函...
阅读全文
摘要:问题定义什么是插头DP在一个n*m的棋盘上(n与m很小),求:有多少种不同的回路数用1条回路经过所有点的方案数用1条回路经过部分点的方案数1条路径上的权值和最大的这一类问题,通常可以用插头DP来解决。这类问题通常很明显,但代码量大又容易出错,有时TLE有时MLE。什么是基于状态压缩的动态规划基于状态...
阅读全文
|