- 博客(51)
- 收藏
- 关注
原创 6、莫比乌斯反演
欧拉定理乘法逆元BSGS算法拉格朗日插值莫比乌斯反演一、课程目标整除分段 …二、目标详解1、整除分段计算n/i的和,当n很大时朴素算法会超时,考虑到n/i的序列有时会连续相同,可以考虑分段加速。对于n、i,假设R = n/(n/i),则在[i, R]区间都是相同,加速如下:for(int i=1; i<=n; i=R+1) { R = n/(...
2019-08-08 07:59:22
167
原创 5、费马小定理
一、课程目标费马小定理 证明 应用二、目标详解1、费马小定理对于质数p,以及任意与p互质的正整数 a,都有a^(p-1) ≡ 1 (mod p)例子:p=2, a=3, a^(p-1) = 3 ≡ 1 (mod 2)p=3, a=4, a^(p-1) = 16 ≡ 1 (mod 3)p=5, a=2, a^(p-1) = 16 ≡ 1 (mod 5).....
2019-08-08 07:59:15
460
原创 4、同余方程组
一、课程目标同余方程组 中国剩余定理crt 扩展中国剩余定理excrt二、目标详解1、 同余方程组“有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?” –《孙子算经》问题:由多个同余方程组成,求解满足所有同余方程的x。x ≡ a1 (mod m1)x ≡ a2 (mod m2)...x ≡ an (mod m3)如果mi两两互质,则可...
2019-08-08 07:59:07
1636
原创 3、大数运算求余
一、课程目标快速幂的两种写法 求模的快速幂 快速乘 矩阵快速幂二、目标详解1、分治递归公式:a^n = a^(n%2) * a^(n/2) * a^(n/2)算法:求pow(a, n),先递归求得pow(a, n/2),及它的平方 int t = pow(a, n/2); t *= t; 如果n为偶数,则返回t,否则返回 a*t2...
2019-08-08 07:59:00
255
原创 2、同余运算
一、课程目标同余 同余方程 特性二、目标详解1、同余如果a和b除以m的余数相同,就说a和b关于模m同余,记作a ≡ b (mod m)。a ≡ b (mod m) 等价于m整除 a-b,即 m | (a-b),也即a = m*t + b。2、同余方程例如ax=y(mod m),就称为同余方程。基于同余的定义,ax = mt + y => ax - mt...
2019-08-08 07:58:51
2155
原创 对拍(windows)
一、课程目标准备工作 编译运行与重定向 结果比对 数据生成器 对拍脚本 计时模式二、目标详解1、准备工作1.1 编译工具首先需要安装gcc/g++的编译工具MinGW32,如果已经安装了devcpp的话,是自带MinGW32的。1.2 编辑器需要一个写代码的编辑器,一般用devcpp就好,当然想用别的例如记事本也可以。1.3 路径配置对拍要在命令行...
2019-08-08 07:57:23
439
原创 1、欧几里得与扩展
一、课程目标求余运算基础 欧几里地算法(gcd) 二元一次方程 扩展欧几里得算法(exgcd)二、目标详解1、求余运算基础在c++语言中,求余运算符号为%,如 10 % 3 = 1,对应地整除运算为/,如10/3 = 3。对于整数n和m,将他们表示i为 n = m*x + r,0<=r<m,则x称为商,r称为余。以上公式也可以表示为: x = n/m,...
2019-08-07 08:29:34
181
原创 3、二叉树
一、课程目标二叉树定义 二叉树存储 遍历方式二、目标详解1、二叉树定义如果每个结点的子结点的数目最多为2个,则该树称为二叉树。特点:每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。 左子树和右子树是有顺序的,次序不能任意颠倒。 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。满二叉树:所有分支结点都有两个子结点,并且所有叶结点都在最后一...
2019-08-07 08:22:56
147
原创 2、LCA
一、课程目标LCA 朴素法 倍增法二、目标详解1、LCALCA指树上两个结点的最近公共祖先,例如对于下面树的两个点J和F,其LCA为C。
2019-08-07 08:19:12
101
原创 1、树的概念
一、课程目标树的定义 树的存储二、目标详解1、树的定义树是一种非线性的数据结构,是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上、叶朝下的。父子关系:每个结点(node)有零个或多个子结点(child) 每一个非根结点有且只有一个父结点(parent) 没有父结点的结点称为根结点(ro...
2019-08-07 08:15:37
266
原创 3、完全背包
一、课程目标完全背包问题 状态转移方程 物品拆分 一维状态二、目标详解1、完全背包问题有一个容量为V的背包和N种物品,第i种物品的体积是c[i],价值是w[i]。每种物品都有无限件可用,求将哪些物品装入背包使得价值总和最大。2、状态转移方程对于第i件物品,01背包的关键在于取或不取,而完全背包就有取0件、1件、…k件(k<=v/c[i])的选择,因此状态方程...
2019-08-07 08:01:29
70
原创 2、背包优化
一、实验目标空间复杂度优化 记录路径 满背包目标详解1、复杂度以上动态规划的时间复杂度与空间复杂度均为O(N* V)。但空间复杂度可以优化到O(m),因为每一次状态转移只与上一行的值有关,我们可以:状态只用一维数组 同一行里,从后往前填写,这样前面的值还被保留(上一行的值)定义状态:设dp[j]表示把i件物品放入容量j的背包可获得的最大价值。状态转移方程为:...
2019-08-07 08:01:20
105
原创 1、01背包
一、课程目标背包问题 01背包 动态规划 过程理解 关键代码二、目标详解1、背包问题基本模型:一个容量为V的背包,在一定的限制条件下,放进最多(或最少)价值的东西。根据限制条件的不同,分为三种情况:01背包(ZeroOnePack):每种物品只有一件,即只能选择放或者不放 完全背包(CompletePack):每种物品有无限件 多重背包(MultiplePa...
2019-08-07 08:01:12
181
原创 2、二维动态规划
一、课程目标二维动态规划 例子-路径总数 例子-LCS二、目标详解1、二维动态规划动态规划入门里,状态都只有一个维度,一般为dp[k],称之为线性动态规划。当维度有两个的时候,需要用二维的状态来解决问题,例如棋盘、矩阵、路径等类别的问题。更准确的说,二维动态规划指线性动态规划的拓展,在一个平面上做动态规划。规律:当前格子的状态,往往与左边、上边、左上的格子状态有...
2019-08-06 07:55:41
3983
1
原创 1、动态规划入门
一、课程目标什么是动态规划? 动态规划怎么用? 动态规划的实现 动态规划的特征 与其它算法的关系?二、目标分析1、什么是动态规划动态规划是一种数学方法,一般应用于多决策过程,用来求最优化的问题。动态规划通过定义问题的状态以及状态之间的关系,来拆分问题,使得问题能够以递推的方式被解决。如何观察问题,定义问题的状态,从而对问题进行拆分,这是动态规划的关键之处。...
2019-08-06 07:55:34
101
原创 5、综合练习
一、课程目标栈的概念 stack的使用 stack实现搜索二、目标详解1、栈的概念栈是一种数据结构,最后入栈的数据最先被取出,这种行为称为“后进先出”,即LIFO(Last In First Out)。可以简单的理解成一个木桶,先放进去的东西沉到了底部,后放的东西在它上面,要先拿后放的东西,最后取出底部。栈的基本规则:栈顶:栈只允许对一端操作,称为栈顶。(相对的...
2019-08-06 07:55:25
92
原创 4、广度优先搜索
一、课程目标了解广度优先搜索算法的原理,能够编码使用深搜的思想来解决问题。二、目标详解广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不...
2019-08-06 07:55:18
226
原创 3、深度优先搜索
一、课程目标了解深度优先搜索算法的原理,能够编码使用深搜的思想来解决问题。二、目标详解搜索在编程遇到的问题中,有些问题我们不能够确切的找出数学模型,即找不出一种直接求解的方法,解决这一类问题,我们一般采用搜索的方法解决。搜索就是用问题的所有可能去试探,按照一定的顺序、规则,不断去试探,直到找到问题的解,试完了也没有找到解,那就是无解,试探时一定要试探完所有的情况(实际上就是穷...
2019-08-06 07:55:12
166
原创 1、搜索与回溯
一、课程目标搜索的概念 回溯的作用 算法的要素 案例 基本模型二、目标详解1、搜索的概念我们学过枚举算法:穷举所有的状态,进行判定,获得解。然而有些问题的状态比较特殊,是由多个维度组成,比如百钱买百鸡,状态是公鸡数x、母鸡数y、小鸡数z的组合,那么这些状态如何穷举呢?如果维度不多,可以用多重循环实现,当维度比较多或者个数不确定的时候,就需要用到搜索算法了。搜...
2019-08-06 07:54:57
409
原创 13、二叉树的遍历
一、课程目标了解二叉树的三序遍历方式,能够指出任意二叉树的三序遍历结果,能够根据遍历结果反推出树的结构。二、三序遍历所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次访问。在访问过程中对结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。1. 遍历方案从二叉树的递归定义可知,一棵非空的二叉树由根结...
2019-08-06 07:54:50
703
原创 12、树的存储
一、课程目标了解树的三种存储结构,能够编码实现树的存储以及访问等操作。二、目标详解说到存储结构,无外乎顺序存储以及链式存储两种。就顺序存储而言,在内存中用一段连续的存储单元依次存储线性表的数据元素,如数组、栈、队列等。对于线性数据结构来说,顺序存储是很自然的,但是对于树这种一对多的结构呢?树中某个结点的孩子可以有多个,这就意味着,无论按照何种顺序将树中所有结点存储到数组中,结...
2019-08-06 07:54:44
337
原创 11、树
一、树的定义树(tree)是包含n(n>=0)个结点的有穷集,其中:每个元素称为结点(node); 有一个特定的结点被称为根结点或树根(root); 除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree); 单个结点是一棵树,树根就是该结点本身...
2019-08-06 07:54:36
108
原创 10、图的存储
一、课程目标了解图的两种常用存储方式,能够编码实现图的存储以及访问。二、目标详解对于图G=(V,E),可以用两种标准存储方法来存储。一种为邻接表,另一种为邻接矩阵。两种方法都既可以表示无向图,又可以表示有向图。邻接表的存储方法在稀疏图中较为常用,因为较为节省空间,而邻接矩阵则相反,常用于稠密图的存储。在信奥赛中,由于构造方便,大多数题目都倾向于使用邻接矩阵来存储一张图。以下为...
2019-08-06 07:54:28
427
原创 9、图
一、图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。这是一个图,V为5个顶点, E为7条边。二、相关术语顶点(Vertex):图中的数据元素。线性表中我们把数据元素叫元素,树中将数据元素叫结点。 边:顶点之间的逻辑关系用边来表示,边集可以是空的。 无向边(Ed...
2019-08-06 07:54:20
238
原创 7、Bellman-Ford与SPFA
一、课程目标负权图 Bellman-Ford算法 SPFA算法二、目标详解1、负权图1.1 dijkstra对负权的问题图中含有负权的边,此时用dijkstra算法求不出最短路,因为贪心法则不成立。例如:假设U集合有{d[mn], d[a], d[b]}:最小值d[mn]被加入到S集合,并且用mn松弛其邻接边 假设d[x]被松弛,于是U集合变为{d[a], d...
2019-08-06 07:53:56
162
原创 6、dijkstra算法
一、课程目标单源最短路径 dijkstra算法 算法设计 模拟过程 优化算法二、目标详解1、单源最短路径给定一个图,给定起点,求该起点到其它点的最短距离,称之为单源最短路径问题。2、dijkstra算法dijkstra算法是一个求单源最短路问题的经典算法,应用前提是图中没有负权边。理解要点一--三个集合:O集合:还没有被松弛连通的顶点。方案:d[x]==...
2019-08-02 14:11:03
134
原创 5、floyd算法
一、课程目标路径 多源最短路径 floyd算法 松弛设计 模拟过程 应用要点二、目标详解1、路径路径指图的一组顶点组成的序列,按照路径的方向,相邻顶点在图上是邻接的。如果顶点和边都不重复出现,则称为简单路径(simple path)。如果起点和终点相同且没有其它重复的顶点和边,则称为环(cycle)。2、多源最短路径给定一个图,求其中任意两个点之间的最...
2019-08-02 14:08:35
241
原创 4、广度优先搜索(BFS)
一、课程目标队列 广度优先搜索 算法实现 求最短路二、目标详解1、队列队列是一种数据结构,只能从队尾加入元素,从队首弹出元素,特性就是先进入队列的元素先出队,简称FIFO(First In First Out)。c++的stl里提供了队列容器queue,如下:头文件:#include <queue> 变量:queue<int> q; 入...
2019-08-02 14:02:21
203
原创 3、深度优先搜索(DFS)
一、课程目标图的遍历 深度优先搜索(DFS) 算法实现 所有路径二、目标详解1、图的遍历图的遍历:从图的某个顶点出发,按照某种搜索方法沿着图的边访问所有顶点,每个顶点仅访问一次。遍历得到的顶点的序列,称为图遍历序列。显然不同的搜索方法会得到不同的遍历序列。有两种搜索方法:深度优先搜索(DFS:Depth First Search) 广度优先搜索(BFS:Bread...
2019-08-02 14:01:15
407
原创 2、邻接表
一、课程目标邻接表 Vector实现 指针单链表实现(可选) 链式前向星实现(可选)二、目标详解1、邻接表用邻接矩阵来表示图,需要用到二维数组,其中很多没有连接的边也都需要占位,占内存比较大,另外对图进行访问的时候也会消耗更多的循环次数。另外一种方式就是使用邻接表,只存储每个顶点连接的边(边的个数不定)。这样对于大的稀疏图就可以节约大量的内存,同时访问起来更加快速。...
2019-08-02 14:00:26
733
原创 1、图与邻接矩阵
一、课程目标什么是图 图的分类 邻接矩阵 图的输入二、目标详解1、什么是图以上就是一个图,包含5个顶点和7条边。简单的说,把点用边连起来,就叫做图。定义:G = (V, E)G(graph):表示一个图 V(Vertext):顶点(结点),非空有限集合 E(Edge):边的集合,可以为空2、图的分类2.1 无向图如果图的边没有方向,称之为无向图。...
2019-08-02 13:58:44
3178
原创 2、综合案例
一、课程目标1.逆序对及应用2.学会应用排序算法3.理解单调队列及应用4.理解二分法二、目标详解1.逆序对设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对,也称作逆序...
2019-08-02 13:43:26
95
原创 1、排序算法
一、课程目标1.了解排序算法及各自时间复杂度2.排序算法的实现二、目标详解1.相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数...
2019-08-02 13:41:44
340
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人