- 博客(11)
- 收藏
- 关注
原创 kmp,manacher,扩展kmp算法总结
考虑到如果有一个位置不符合就从头再来,难免出现浪费,会不会可能出现无需重复比较的情况,那么如果目标子串匹配失败位置的前缀字符串的前缀和后缀有一个最长的匹配长度,首先既然可以来到这个位置,说明前面的字符串肯定完全匹配,那么此时把子串的前缀和母串的后缀对齐再继续比较下一个位置就可以省去了大量比较的时间,其实这就是kmp的本质,但是出现了几个问题,第一,为什么这样跳过一些位置就一定没有错过答案呢,第二,我怎么统计相同的前缀后缀呢,这个过程也并不简单呀,更何况我要统计每个位置的前缀字符串的最长前缀后缀匹配长度。
2024-10-19 13:09:02
760
原创 区间dp总结
同样是巧妙的转移,首先因为n,k的值不同有可能导致最终不可能合并成一堆,当我们确定了可以合并成功后,因为不同的合并顺序会影响最后的结果,所以我们如果枚举分割点的意义就应该是,把左侧右侧分别结算完后,加上把左右侧一起合并的成本,另外需要注意的是,我们枚举分割点的时候,左侧结算完成,可能剩下几个也可能不剩下,右侧也同样,所以只有当整体区间满足可以合并到只剩下一个的条件时,才有意义去讨论左右侧一起合并,并且,分割点并不是全部都合适,如果左右侧的子区间都不会。,每一次操作你都可以在字符串的任意位置插入任意字符。
2024-08-11 13:29:47
791
原创 dijkstra算法
所谓dijkstra算法就是解决从原点到所有点的最短距离(边有权值)问题的算法之一,注意dijkstra算法只适用于边的权值非负的情况。模板:1,暴力版本。
2024-04-18 17:08:23
1072
1
原创 最小生成树
p算法需要用到堆结构,还需要一个set结构用来查询那些点已经去过,首先加入头节点的所有边,此后从堆里弹出一个最小的边,查看这条边去往的节点是否已经去过,如果去过就放弃这条边,继续弹出下一条边,直到找到了去往一个没去过的节点的边,把这条边作为答案的一部分,然后加入去往的后续节点的所有边,再重复上述步骤,在循环过程中,一旦出现堆为空或者边的数量达到n-1,就结束循环,最后如果边的数量不足就说明无法连通,否则得到答案。懒了...过段时间来补。k算法是写起来最简单也是最常用的最小生成树算法,其简单的算法逻辑如下。
2024-04-02 12:46:24
301
1
原创 并查集总结
这道题题意其实总结下来就是有多少个相似字符串的集合,而可以在一个集合里的标准就是集合中有相似的就行,那么来到一个字符串,他能不能进行合并必须遍历所有的字符串,因为虽然他可能和某些字符串属于同一集合,但其二者本身不相似,如果相似就合并为一个集合,那么如何统计集合个数呢,我们可以维护一个变量cnt,每合并一个集合cnt就减一,因为合并就代表集合的数量减少了一份,但是我在做的时候遗漏了如果两个元素本就属于同一集合的情况,所以要加上判断,其余看代码。如果这两个字符串本身是相等的,那它们也是相似的。
2024-03-31 22:41:00
891
1
原创 拓扑排序总结
这篇文章总结图论算法中较基础的拓扑排序问题,所谓拓扑排序就是在有向无环图中,一种保证可以从底到顶(沿着箭头方向)遍历所有节点的一种顺序,可以由此解决很多问题。首先讲一讲拓扑排序的模板,思路就是在建图的时候同时维护一个入读表,也就是有多少箭头指向该节点,当一个节点的入度是零的时候也就说明当前节点属于最底层的节点,需要被输出,而每输出一个节点,我们就把该节点指向的所有节点入度-1,动态更新入度表,直到所有节点都输出,也就是所有节点的入读都变成零。
2024-03-30 00:33:50
651
原创 建图及图的基础遍历
链式前向星是一种只用三或四个一维数组就可以存储一个图,可以极大的节省空间,第一个一维数组是head数组,下标代表起点的编号然后值就代表去往的第一个边的编号,注意我们在读入图的时候还需要一个变量来表示当前的边的编号,每处理完一个边就cnt++即可,第二个数组next的下标代表边的编号,而值代表下一个去往的边,所谓下一个意思就是,对于一个起点的点,他有多个可以去往的点,也就有多个这样的边,那么我们把这些边作为同一起点边的这种特性而链接起来。本篇将简单的总结常见的三种建图的方式,邻接矩阵,邻接表,链式前向星。
2024-03-26 20:44:46
257
1
原创 背包dp模板总结
那么最大价值依赖哪些位置呢,首先肯定依赖i-1,j的位置,因为不选这个位置所以对容量没有任何影响,其次要注意的是我们的要求是不超过j的最大价值,所以要对于所有满足条件的容量j都需要更新,那么代码的递推思路自然就是,首先当前位置等于i-1,j位置的值,就是如果不选的位置,对于i这一层j从零开始到最末尾,只要大于当前物品体积的j位置都要更新为i-1,j,以及(i-1,j-v[i])+w[i],的最大值,因为这些位置选了当前位置的值的时候,从w[i]到v其实都没有超标(假设只考虑这个位置),具体看代码。
2024-03-22 01:06:12
677
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人