随笔分类 -  算法学习笔记

摘要:译名为“回文树”,是一种专门处理回文串的数据结构,类似于马拉车,但更为强大。是由两颗分别存储偶数回文串树和存储奇数回文串树组成,每个节点代表母串的回文串,两树之间中用fail指针连接。 阅读全文
posted @ 2019-07-26 17:10 WAKBGAN 阅读(162) 评论(0) 推荐(0)
摘要:ac自动机学习博客 本来以为是很高级的算法 其实理解以后并不难 只是在字典树的基础上用fail数组标记一下回朔的位置 加速查找 就可以实现多模式串的匹配查找 模版如下: 阅读全文
posted @ 2019-05-07 21:13 WAKBGAN 阅读(138) 评论(0) 推荐(0)
摘要:点分治 讲解 点分治是一种树上分治思想 可以用更高的效率解决树上路径问题 以poj 1741 tree 为例子 阅读全文
posted @ 2019-05-03 17:20 WAKBGAN 阅读(165) 评论(0) 推荐(0)
摘要:强推这两个博客写的太好辣 尤其是第一个 浅谈斜率优化 斜率优化学习笔记 谢谢两位dalao的博客 阅读全文
posted @ 2019-05-01 12:18 WAKBGAN 阅读(111) 评论(0) 推荐(0)
摘要:不定期扩展! 阅读全文
posted @ 2019-04-17 21:19 WAKBGAN 阅读(260) 评论(0) 推荐(0)
摘要:有关于四边形不等式的优化 https://blog.csdn.net/noiau/article/details/72514812 这篇博客有描述的足够清楚,我觉得自己肯定写不了这么好的博客所以放在这里供自己学习吧! 感觉主要的难点 是边界的处理 和 对四边形是否可用的判断 这篇博客会长时间跟新吧, 阅读全文
posted @ 2019-04-16 00:27 WAKBGAN 阅读(100) 评论(0) 推荐(0)
摘要:当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法: 设c是b的逆元,则有b*c≡1(mod m); 则(a/b)%m = (a/b)*1%m = (a/b)*b*c%m = a*c(mod m); 即a/b的模等于a*b的逆元的模; 逆元就是这样应用的; 所以逆 阅读全文
posted @ 2019-04-07 16:21 WAKBGAN 阅读(560) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/grandyang/p/4475985.html 思路是学习的是上面博客的想法,思路很清晰 优化的方法和exkmp有异曲同工的地方 博客里的内容我在这里就不重复累赘的叙述了,浪费时间 我们需要只要关键数组p[]表示位置为i的字符串的半径,并且我们需要记 阅读全文
posted @ 2019-03-17 19:29 WAKBGAN 阅读(226) 评论(0) 推荐(0)
摘要:其实用处不大 acm卡常没什么意思 原理就是getchar()很快 阅读全文
posted @ 2019-03-12 17:24 WAKBGAN 阅读(300) 评论(0) 推荐(0)
摘要:最小表示法是求与某个字符串循环同构的所有字符串中,字典序最小的串是哪个。比如说一个字符串jdrakioi,它长为8,也就是说最多有八种循环同构的方法。jdrakioi、drakioij、rakioijd、akioijdr、kioijdra、ioijdrak、oijdraki、ijdrakio。这几个 阅读全文
posted @ 2019-03-12 14:22 WAKBGAN 阅读(850) 评论(0) 推荐(0)
摘要:数组的版本并不怎么直观,因为在数组中实现的树没有“层”的概念。代替的是节点的“编号”,通过这个编号可以向“下一层”去找节点,也可以通过编号获得字符串的一些其他信息。 阅读全文
posted @ 2019-03-03 18:46 WAKBGAN 阅读(539) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/dyx404514/article/details/41831947 这篇博客讲的很清楚 求next数组: 求extend数组 阅读全文
posted @ 2019-02-23 00:28 WAKBGAN 阅读(138) 评论(0) 推荐(0)
摘要:每一个数据结构老师必讲的算法,这里我就不再重复累赘的叙述了。 KMP主要分为两步,求next数组和求f数组,对于next数组 我们主要需要知道以下引理: 若j0是next[i]的一个候选项,即j0<i且A[i-j0+1~i]=A[1~j0],则小于j0的最大的next[i]的候选项是next[j0] 阅读全文
posted @ 2019-02-18 22:40 WAKBGAN 阅读(166) 评论(0) 推荐(0)
摘要:众所周知,从20 ,21,...,2k-1这k个2的整数次幂中选出若干相加,可以表示出0~2k-1之前的任意整数 所以我可以把Ci个物品分解成p+2个 即若干个2的幂次方为系数的体积(对下面的这些体积进行0/1背包) 20*Vi+...+2p*Vi+Ri*Vi 阅读全文
posted @ 2019-02-16 23:22 WAKBGAN 阅读(1055) 评论(1) 推荐(0)
摘要:完美背包问题的模型如下: 给定N个物品,其中第i种物品的体积为Vi,价值为Wi,并且有无数个。有一个容积为M的背包,要求选择若干个物品放入背包,使得物品总体积不超过M的前提下,物品的价值总和最大。 我们可以像我们之前讨论0/1背包一样的考虑传统的二维dp方法https://www.cnblogs.c 阅读全文
posted @ 2019-02-16 14:54 WAKBGAN 阅读(172) 评论(0) 推荐(0)
摘要:0/1背包的问题模型如下: 给定N个物品,其中第i个物品的体积为Vi ,价值为Wi 。有一容积为M的背包,要选择一些物品放入背包,使物品体积不超过M的前提下,物品的价值总和最大。 dp[i][j]表示从前i个物品中选出了总体积为j的物品放入背包,物品的最大价值。即我们很容易得出解决的代码: 根据上面 阅读全文
posted @ 2019-02-16 14:45 WAKBGAN 阅读(204) 评论(0) 推荐(0)
摘要:尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。之所以需要掌握这个技巧,是因为尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以尺取法是一种高效的枚举区间的方法,一般用于 阅读全文
posted @ 2019-02-15 23:45 WAKBGAN 阅读(200) 评论(0) 推荐(0)
摘要:ST算法 在RMQ(区间最值问题)问题中,我了解到一个叫ST的算法,实质是二进制的倍增。 ST算法能在O(nlogn)的时间预处理后,用O(1)的时间在线回答区间最值。 f[i][j]表示从i位起的2^j个数中的最大(最小)数,即[i,i+2^j-1]中的最大(最小)值,从其定义中可以看出来。 下面 阅读全文
posted @ 2019-02-13 19:40 WAKBGAN 阅读(1320) 评论(0) 推荐(2)
摘要:链式前向星 图的存储一般有两种:邻接矩阵、邻接表(邻接表包括一种东西叫前向星)。 若图是稀疏图,边很少,开二维数组a[][]很浪费; 若点很多(如10000个点)a[10000][10000]又会爆.只能用前向星做. 前向星的效率不是很高,优化后为链式前向星,直接介绍链式前向星。 (一)链式前向星 阅读全文
posted @ 2019-02-13 00:43 WAKBGAN 阅读(1316) 评论(0) 推荐(0)