![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法教学
钱晓峰
君子务本,本立道生
展开
-
NOIP基础算法与经典问题01 一维前缀和
一维前缀和维护是一种基础的小算法,该算法用我们所熟知的数列求和方式优化我们的某些查询操作,是一种动态规划的思想。这里为介绍一维前缀和维护问题,我们来思考这个最简单的问题:问题描述: 已知n个数的数列a,有m次询问,每次询问给定l,r两个数,求 al到 ar 内所有数的和。注意l到r的区间包含 al 和 ar 两个数。 输入数据: 第一行n和m,接下来一行有n个数,表示数列a,接下来有m行转载 2017-11-03 10:54:38 · 503 阅读 · 0 评论 -
解题报告 Noip2016提高组 组合数问题
题目描述组合数表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计算组合数的一般公式:其中n! = 1 × 2 × · · · × n小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足是k的倍数。输转载 2017-11-03 14:04:06 · 306 阅读 · 0 评论 -
最近公共祖先 LCA 倍增算法
最近公共祖先 LCA 倍增算法倍增算法可以在线求树上两个点的LCA,时间复杂度为nlogn预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u]init()求出树上每个节点u的2^i祖先p[u][i]求最近公共祖先,根据两个节点的的深度,如不同,向上调整深度大的节点,使得两个节点在同一层上,如果正好是祖先结束,否则,将连个节点同时上移,查询最近公共祖先。void dfs(in转载 2017-10-26 23:34:43 · 199 阅读 · 0 评论 -
Tarjan 算法——求解有向图强连通分量
一.算法简介Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度。我们定义:如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。例如:在上图中,{1 , 2转载 2017-11-05 09:56:30 · 554 阅读 · 0 评论 -
DAG之最短路
DAG是学习动态规划的基础,很多问题都可以直接转化为DAG上的最长路、最短路或路径计数问题。 两个经典的DAG模型,嵌套矩形和硬币问题,今天先写第一个嵌套矩形问题。 一、嵌套矩形 第一个DAG模型:矩形嵌套问题 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。 矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当 a < c , b < d 或者 b < c , a < d (转载 2017-12-03 17:52:26 · 595 阅读 · 0 评论 -
欧几里得算法和唯一分解定理(数论)
1.欧几里得算法 2.唯一分解定理转载 2017-12-24 13:26:09 · 380 阅读 · 0 评论 -
快速幂取模算法详解
1.大数模幂运算的缺陷:快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5^1003这个过程 缺点1:在我们在之后计算指数的过程中,计算的数字不都拿得增大,非常的占用我们的计算资源(主要是时间,还有空间) 缺点2:我们计算的中间过程数字大的恐怖,我们现有的计算机是没有转载 2017-12-24 14:31:40 · 687 阅读 · 0 评论