随笔分类 - 算法
摘要:例题传送门 好久没写博客了,写一发。 之前学的Manacher算法拿到模板题找到那最后一个点的错误了,TMD没开long long。 Manachar算法主要是处理字符串中关于回文串的问题的,它可以在 O(n)的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串,在
阅读全文
摘要:题目传送门 树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链。 以下是几种概念: 常见的路径剖分的方法是轻重树链剖分(启发式剖分) 将树中的边分为:轻边和重边
阅读全文
摘要:题目传送门 今天看了分块,顺便把基本的莫队学习了一下。 莫队算法是一种离线算法,复杂度可以达到O((M+N)*Sqrt(N)); 对于询问区间的左端点分块,块内的右端点从小到大排列。 对区间进行偏移操作。 掌握一个思想基础:两个询问之间的状态跳转。如图,当前完成的询问的区间为[a,b],下一个询问的
阅读全文
摘要:题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。 分块修改理论复杂度为O(N/M),M为块的大小,有基本不等式得M=Sqrt(N)时较优。 分块将原数组分为M块,对M块的信
阅读全文
摘要:模板传送门 KMP的模板,但是要输出Nxt,搞得朱洪dalao的优化打不了。(题外话) KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息
阅读全文
摘要:例题传送门 Dinic算法是网络流最大流的优化算法之一,每一步对原图进行分层,然后用DFS求增广路。时间复杂度是O(n^2*m),Dinic算法最多被分为n个阶段,每个阶段包括建层次网络和寻找增广路两部分。 Dinic算法是网络流最大流的优化算法之一,每一步对原图进行分层,然后用DFS求增广路。时间
阅读全文
摘要:一、欧几里得算法(辗转相除法) 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|) int gcd(in
阅读全文
摘要:今天自习课没事干,看书自学了一下网络流中的EK算法。(求最大流) 设s为源点,t为汇点,C为容量矩阵,F为流量矩阵,f为最大流量。 1.初始化F,f 2.用BFS在残量网络中找到一条从s到t的最短增广路T,如果T不存在,算法结束。 最短增广路就是最短路径(s→t) 一边(u,v)被增广完后,在残量网
阅读全文
摘要:Tarjan,一个十分有用的东西,可以求有向图的强连通分量,复杂度达到O(V+E)。 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。 我们开一个数组DFN,记录i这
阅读全文
摘要:在生活中们有时会遇到一些有关字符串匹配的问题。 这时打暴力往往显得很愚蠢,效率低下。 所以就需要一些算法和数据结构来提高效率。 Hash Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是
阅读全文
摘要:最短路径例题 今天特地学习了Dijkstra的堆优化(主要是慕名已久)。 我们需要一个堆来记录[编号,到编号这个点的最短路径值(当然只是当前的)] 与原来的Dijkstra操作基本一致,主要有以下几点: 1.将起点放入堆中 2.开始while循环 3.取出堆顶 4.如果已经拓展过就continue
阅读全文

浙公网安备 33010602011771号