![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法详解
文章平均质量分 75
熙言丶
这个作者很懒,什么都没留下…
展开
-
浅谈BSGS算法
引入BSGS算法,原名Baby Steps Giant Steps,又名大小步算法,拔山盖世算法,北上广深算法——by SLYZoier,数论基本算法之一。问题题解讨论转自 大佬博客【bsgs模板代码】map<ll,ll> vis;ll bsgs(ll a,ll b,ll p)//求解x,a^x%p=b%p{ vis.clear()...原创 2018-08-11 08:55:50 · 247 阅读 · 0 评论 -
浅谈Spfa
一、前言1、什么是spfa在很多的博客和百科里都有介绍比Dj算法更强大,比ford更省时间,这里就不多说了;2、为什么他能处理带负权的在每次碰到更优的解时,将下一个节点再次入队列,会按照路径顺次的优化之前的。而Dj算法后面的最优是建立在当前的,只能做加法,即使有更小的也不能回头了;3、什么是负环、怎样判断负环?所谓负环,不是带有负权的回路都是,而是回路的权值和为负数的才叫负环。判断...原创 2018-07-27 16:08:50 · 790 阅读 · 0 评论 -
浅谈链式前向星
我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置. 那么对于下图: ...原创 2018-07-27 09:58:02 · 221 阅读 · 0 评论 -
浅谈KMP(模板)
S 表示原字符串,T 表示目标串(模式串),我们要在S 中搜索T。令 S[0..m-1] = abcabcabdabba, T[0..n-1] = abcabd。1,Naive 算法字符串匹配的naive 算法时O(n^2) 的:2,Naive 算法的问题与进化naive 算法的最大问题是,当一轮匹配过后,模式串T 又从头开始,实际上这回造成很多不必要的比较。我们看下面的情况:...原创 2018-09-18 16:36:57 · 167 阅读 · 0 评论 -
浅谈欧拉函数
前言欧拉函数听起来很高大上,但其实非常简单,也是NOIP里的一个基础知识,希望大家看完我的博客能有所理解。数论是数学的一个分支,它只讨论正整数的性质,所以以下都是针对正整数进行研究的。什么是欧拉函数欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。如何计算欧拉函数通式: φ(x)=∏i=1n(1−1pi)φ(x)=\prod_{i=1}^n{(1-\...原创 2018-11-29 22:37:27 · 163 阅读 · 0 评论 -
浅谈状压DP
以下博客来自大佬,我只是大佬的搬运工总述状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍有了状态,DP就比较容易了举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态:设n = 9;有二进制数 100011011(...原创 2018-12-01 21:27:23 · 388 阅读 · 0 评论 -
整除分块(数论分块)
转自大佬一个有♂趣的问题:求∑i=1N⌊Ni⌋,N≤1012\sum_{i=1}^N⌊\frac{N}i⌋ ,N≤10^{12}∑i=1N⌊iN⌋,N≤1012显然不能直接做废话经过一番冷静推理暴力打表 ,我们发现以下性质:1.⌊Ni⌋⌊Ni⌋⌊Ni⌋最多只有2N2\sqrt{N}2N种取值证明:对于i≤Ni≤\sqrt{N}i≤N, 只有 N\sqrt{N}N 种,对于 i...原创 2018-12-05 20:36:07 · 1437 阅读 · 1 评论 -
浅谈记忆化搜索
记忆化的本质是: 先记录,后返回(记住:一定要记录,否则就是普通的递归); 查阅记录,如果记录中有,则直接返回。下面通过几个简单的例子来深入了解一下1.斐波那契非记忆化#include <bits/stdc++.h>#define ms(a,b) memset(a,b,sizeof(a))typedef long long ll;using namespa...原创 2018-12-03 20:11:34 · 1153 阅读 · 1 评论 -
浅谈尺取法
博客来源尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得...原创 2018-12-10 15:44:46 · 226 阅读 · 0 评论 -
浅谈单调队列
单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。队列是一种先进先出(FIFO First In First Out)的数据结构,它类似于下面这幅图:队列的进出方式类似于平时我们排队打饭,来排队的人从队尾进入,打完饭的人从队头弹出。队列的在程序中储存的方式有很多,OI中最为常用的是使用头指针head和尾指针tail进行存储头指针指...原创 2018-08-05 10:12:22 · 23383 阅读 · 9 评论 -
浅谈数位DP
基础篇 数位dp一般应用于: 求出在给定区间[A,B]内,符合条件P(i)的数i的个数. 条件P(i)一般与数的大小无关,而与 数的组成 有关.数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是...原创 2018-08-06 10:54:48 · 204 阅读 · 0 评论 -
浅谈莫队算法
我们首先来看一道例题:Description 有n个数字,给出k,以及m个查询。 每次查询的格式是L,r,求L~r(左右包含)这个区间内数字的出现次数刚好是k的数字种数。 范围:n<=30000,k<=n,m<=30000,1<=L<r<=n,数列中元素大小<=n。 输入n,k,m,然后n个元素,然后m行查询,对...原创 2018-08-08 10:13:43 · 239 阅读 · 0 评论 -
浅谈网络流
一.网络流:流&网络&割1.网络流问题(NetWork Flow Problem):给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 下面给出一个通俗点的解释(下文基本避开形式化的证明 基本都用此类描述叙述)好比你家是汇 自来水厂(有需要的...原创 2018-08-15 16:16:31 · 273 阅读 · 0 评论 -
浅谈最大权闭合子图
闭合图:对于一个有向图G,存在点集合V,任取点u属于V,u的出边的另一个点也属于V,则为闭合图。理解:任取一起点,终点必定是无出度的点。最大权闭合子图:当每个点有一个权值w(有正有负),点权和最大的闭合图为最大权闭合子图。如图:最大权闭合子图为点集{3,4,5},最大权为7+0-3=4。求解方法:网络流。建立超级源点s,超级汇点t。所有点权为正数的点i,建边 s-&...原创 2018-08-15 21:05:06 · 314 阅读 · 0 评论 -
浅谈最小费用最大流
最大流的网络,可看作为辅送一般货物的运输网络,此时,最大流问题仅表明运输网络运输货物的能力,但没有考虑运送货物的费用。在实际问题中,运送同样数量货物的运输方案可能有多个,因此从中找一个输出费用最小的的方案是一个很重要的问题,这就是最小代价流所要讨论的内容。最小费用最大流问题的模型给定网络N=(V,E,c,w,s,t),每一弧(vi,vj)属于E上,除了已给容量cij外,还给了一个单位流量的费...原创 2018-08-18 10:18:24 · 353 阅读 · 0 评论 -
浅谈LCA(倍增)
LCA是啥呢 在一棵树当中 lca表示的是两个节点最近公共祖先, 大家看这课树哈节点5 ,3的lca就是1,13和11的LCA就是6。节点8,12的lca就是8,那么我们如何通过被增来实现LCA呢。首先请大家认真看下面的分析。depth[x],表示x节点的深度。大家看下这个数组 grand[x][i] ,这个数组表示标号为x节点向上跳2^i步的节点。例如grand[5][0]=2...原创 2018-08-16 12:04:31 · 417 阅读 · 0 评论 -
浅谈并查集
来看一个实例杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如...翻译 2018-01-30 08:55:00 · 144 阅读 · 1 评论 -
字典树(模板)
字典树:很强大的数据结构,实现多个字符串的查找、对其个数的纪录以及对其子串的查询。这里讲下建树过程: 准备:MAX 记录总节点数目char str[1010][50];//输入的字符串集 int ch[MAX][30];//字典树的实现 int word[MAX];//记录当前节点下有多少个单词 int val[MAX];//标记单词节点 int sz;//节点数 初始...原创 2018-10-03 22:23:11 · 203 阅读 · 0 评论 -
素数判定的一些讨论(Miller-Rabin算法)
一类问题: 判定一个整数n(n>1)是否为素数。算法一:直接根据素数的定义枚举从到,如果n%i==0n为合数。时间复杂度:O(n)int is_prime(int n){ int i; for(i = 2; i < n; i++) if(n % i == 0) return 0; return 1;}算法二:发现若...原创 2018-11-13 17:35:48 · 833 阅读 · 2 评论 -
浅谈二分图匹配(匈牙利)
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:设G=(V, E)是一个无向图。如果顶点集V可分割为两个互不相交的子集X和Y (图0),并且图中每条边连接的两个顶点...原创 2018-08-27 20:39:38 · 295 阅读 · 0 评论 -
浅谈STL
string常用的部分函数begin 得到指向字符串开头的Iterator end 得到指向字符串结尾的Iterator rbegin 得到指向反向字符串开头的Iterator rend 得到指向反向字符串结尾的Iterator size 得到字符串的大小 length ...原创 2018-12-21 11:43:13 · 199 阅读 · 0 评论