算法
算法笔记
qq_31267769
人生处处是捷径,不绕远儿就是捷径。
展开
-
RMQ算法
RMQ算法(Range Minimum/Maximum Query),即区间最值查询,是一种在线算法。补充:所谓在线算法就是每次输入可立刻处理一个结果,对比离线算法,离线算法是要知道所有的输入之后才开始处理结果,例如选择排序和插入排序,选择排序是一种离线算法,排序之前要知道所有的待排序元素,而插入排序就不必知道,所以插入排序是一种在线算法。RMQ算法一般用比较长的时间预处理,预处理时间复杂...原创 2019-08-20 10:02:53 · 329 阅读 · 0 评论 -
划分树总结
一、理解划分树,字面意思是将一列数按照一定规则划分出来形成一个树形的数据结构,而树形的数据结构特点就是查询快,时间复杂度在log级。二、通俗定义划分树就是将n个数按一定顺序,逐层划分,形成一个树状结构,但不改变每个数之间的相对位置。例如:将一列数按照从小到大的顺序划分,小的一半进入当前节点的左子节点,大的一半进入当前节点的右子节点,但在每个节点内每个数相对原序列的位置不变。...原创 2019-08-16 21:56:02 · 221 阅读 · 0 评论 -
【kuangbin专题】Manacher
[kuangbin专题] ManacherA - Palindrome这道题是一道板子题,就是求最长回文串长度,直接构造mp数组然后遍历一遍数组就可以了,或者构造mp数组时直接记录最大值然后返回也可以。#include<iostream>#include<stdio.h>#include<algorithm>#include<cs...原创 2019-07-18 14:26:36 · 145 阅读 · 0 评论 -
Manacher算法总结
Manacher 算法是一个计算最大回文串长度的算法。普通算法是针对每一个字符为中心向两边扩散找了,因此复杂度是O(n2)。manacher算法时间复杂度是O(n),利用回文串左右对称的性质进行计算回文串长度。设置一个数组保存每个字符为中心的最大回文串长度,最后只要遍历数组就可以得到最大回文串长度。首先,manacher算法把奇数串和偶数串看作一种情况,为了统一字符串的奇数还是偶数,在原串中添...原创 2019-07-15 21:22:11 · 108 阅读 · 0 评论 -
扩展欧几里得算法
首先引入贝祖定理:即如果a、b是整数,那么任意一定存在整数x、y使得ax+by为gcd(a,b)的倍数,且一定存在整数x,y使得ax+by=gcd(a,b)。它的一个重要推论是:a,b互质的充要条件是存在整数x,y使ax+by=1.如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍,这样可以来判断一个这样的式子有没有整数解。例如,6x+15y = 8,两边同时除以gc...原创 2019-10-16 15:23:37 · 271 阅读 · 0 评论 -
Eratosthenes筛法
Eratosthenes筛法是一种素数筛,时间复杂度nlogn。主要思想就是,对于小于n的素数p,删除2p,3p,4p……筛法的代码可以写成:memset(vis,0,sizeof(vis));for(int i=2;i<=M;i++) for(int j=i*2;j<=n;j+=i) vis[j] = 1;虽然这样已经很快了,但是还是可以进一步优化。...原创 2019-10-10 18:20:13 · 809 阅读 · 0 评论 -
欧几里得算法和唯一分解定理
gcd算法我们通常利用gcd算法来计算两个数的最大公约数。gcd求法有很多种,通常我们利用辗转相除法,辗转相除法又称欧几里得算法。其计算原理依赖于下面的定理:定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。即:gcd(a,b) = gcd(b,a mod b)在此有两点需要说明一下:a>b b>a mod b因此我们可以简单的得到如...原创 2019-10-09 15:39:54 · 440 阅读 · 0 评论 -
素数筛
素数素数筛一般可以用做预处理。1.素数筛选:判断小于maxn的数是不是素数这个板子用于判断一个小于maxn的数是不是素数,打一个表存脚标是否为素数的情况。#include<iostream>#include<cstring>using namespace std;const int maxn = 1000010;bool notprime[max...原创 2019-06-16 17:06:17 · 142 阅读 · 0 评论 -
KMP模板以及入门题型总结
KMP模板kmp算法的主要作用在于对next数组的运用,所以这里只给出next数组的模板性质1:对于每一个长度len的子串,该子串的最小循环节为len-next[len]性质2:kmp的next不断向前递归的过程可以保证对于每一个当前前缀,都有一段后缀与之对应#include<iostream>#include<cstring>#define m...原创 2019-07-03 17:30:16 · 175 阅读 · 0 评论 -
KMP
KMP Substring SearchKMP was used to find whether string"A" is including in another string "B", we always namethe first string "A" "pattern" and the second string "B" "text".Generally speaking, w...原创 2019-05-15 14:19:19 · 148 阅读 · 0 评论 -
快速幂和矩阵快速幂
快速幂快速幂的核心思想是分治思想,底数每次自乘,这样求一个数的n次方只要logn次就可以算完,当n足够大的时候就可以减少很多的次数。基本思想是这个但是还涉及一个指数为奇数的情况。直接贴上代码了。这个代码比直接递归或者递推那么分治都好,乘的次数更少,而且没有用%来判断奇数偶数,而是用了位运算,这样涉及到计算机底层计算二进制更快。#include<iostream>usi...原创 2019-05-14 16:49:53 · 142 阅读 · 0 评论 -
算法竞赛位运算应用
开头先说一道2018河北省省赛的题。神殿icebound通过勤工俭学,攒了一小笔钱,于是他决定出国旅游。这天,icebound走进了一个神秘的神殿。神殿由八位守护者守卫,总共由64个门组成,每一道门后都有一个迷宫,迷宫的大小均为100×100。icebound在迷宫中总共耗时T小时,消耗食物K公斤。历经千辛万苦之后,icebound终于穿越了迷宫,到达了神殿的中心。神殿的中心有一个宝箱。...原创 2019-05-08 22:07:13 · 266 阅读 · 0 评论 -
前缀和总结
引例:给定n个数:a1~an,询问区间[l,p]中所有数al~ap的和是多少,如果按照最简单的做法每一次都遍历一下从l到p的元素求和,这道题的复杂度会到达O(m*n),基本就tle了,但是如果用前缀和预处理一下就可以得到一个O(n+m)的一个比较优的算法。前缀和顾名思义就是把前i个数加起来,这样O(n)可以得到全部的前缀和,求区间[l,p]中所有数al~ap的和只需要Sp-Sl-1就好了。...原创 2019-05-06 18:53:11 · 226 阅读 · 0 评论 -
并查集入门题集
畅通工程某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?INPUT 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行...原创 2019-05-05 13:16:54 · 349 阅读 · 1 评论 -
并查集总结
并查集原题:杭电hdu1232畅通工程 例题:首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不...原创 2019-03-26 17:44:53 · 151 阅读 · 0 评论 -
分治算法总结
分治算法动态规划与分治的区别是动态规划子问题有重叠而分治子问题相互独立分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。(来自度娘)一、概念分而治之,将问题划分为更小的问题,直到最后子问题可以简单到直接求解,再将子问题合并为原问题...原创 2019-03-26 17:42:31 · 1072 阅读 · 0 评论 -
K - 迷宫问题 POJ - 3984
K - 迷宫问题POJ - 3984迷宫问题定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找...原创 2019-04-01 20:49:50 · 254 阅读 · 0 评论 -
[kuangbin带你飞] 专题一简单搜索
专题一——简单搜索BFS和DFSBFS可以理解为按层搜索,即从根节开始搜索,首先遍历距离根节点为1的节点接着遍历距离根节点为2.3...的节点,以此类推。例如上图:bfs为1 2 5 3 4 6;BFS目前我得理解是首先遍历根节点,利用队列先进先出的性质将与根节点邻接的节点依次入队,遍历完当前节点后将当前节点弹出队列,while循环当队不为空就一直遍历、入队、遍历、入队。想...原创 2019-03-24 22:36:01 · 250 阅读 · 1 评论 -
[kuangbin带你飞]非常可乐和Find a way
N - Find a wayHDU - 2612Find a wayPass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good frie...原创 2019-03-30 21:41:36 · 140 阅读 · 0 评论 -
E - Find The Multiple POJ - 1426
E - Find The MultiplePOJ - 1426Find The MultipleGiven a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. ...原创 2019-03-31 19:49:51 · 188 阅读 · 0 评论