摘要:
[TOC] 一、关于DFS 1. 什么是DFS 深度优先搜索算法,又称DFS(Depth First Search)。DFS算法是一种搜索算法,而搜索算法实质上是一种枚举,即借助计算机的高性能来有目的地枚举一个问题的部分情况或这个问题的所有情况,进而求出问题的解的一种方法。 2. DFS的搜索方式 阅读全文
摘要:
[TOC] 一、关于拓扑排序 1. 定义 对于任意一个DAG图(Directed Acyclic Graph,有向无环图),如果一个序列a由该图所有节点组成,并且对于任意一条边$(u,v)$,u在序列中的位置均在v的位置之前,我们称这样的序列为该图的拓扑序(Topological Order),求拓 阅读全文
摘要:
[TOC] 一、图的深度优先遍历 图的深度优先遍历,就是在遍历到一个点$x$时任取一条边继续遍历,直到回溯到$x$,再考虑走其他的边。 图的深度优先遍历会访问每个点,每条边各一次(无向图正反边各访问一次),故时间复杂度为$O(N+M)$。 利用图的深度优先遍历可以统计图或树上的各种信息。 具体实现: 阅读全文
摘要:
[TOC] 一、关于康托展开 1.什么是康托展开 求出给定一个由1~n个整数组成的任意排列在1~n的全排列中的位置。 解决这样问题的算法叫康托展开。 例如: $n=4$,序列a={$1,3,4,2$},那么a在1~4中的全排列位置为第4个。 2.康托展开实现原理 要知道序列a排在第几位,我们就需要知 阅读全文
摘要:
##一、关于二分法 二分法是一种很普通却又很重要的算法。二分法能为我们解题时提供很大的帮助。 ###1. 使用前提 二分法的适用条件是序列具有二分性,也就是单调性。当序列具有二分性,这时我们不断枚举区间中点才能判断这个值是否题设条件。 当题目中出现诸如最大值的最小,最小值的最大的问题时,答案具有二分 阅读全文
摘要:
[TOC] 一、关于二进制状态压缩 1.定义 二进制状态压缩,是指将一个长度为$m$的$bool$类型数组用一个二进制下有$m$位的整数表示并存储的方法。 2.应用范围 二进制状态压缩是 ,`宽度优先搜索状态压缩优化`的重要基础。 二、二进制状态压缩的操作 我们在构建程序时一定要注意: 1. 在$m 阅读全文
摘要:
题目链接: "P1449 后缀表达式" 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。 如:3 (5–2)+7对应的后缀表达式为:3.5.2. 7.+@。’@’为表达式的结 阅读全文
摘要:
[TOC] 一、关于Huffman树 Huffman树(哈夫曼树)可以解决下述问题: 一颗$n$个叶节点的$k$叉树,第$i$个叶节点的权值为$w_i$,现在欲求$\sum w_i\times l_i$的最小值,其中$l_i$表示第$i$个叶子节点到根结点的距离。 二、具体实现 为了保证$\sum 阅读全文
摘要:
一、关于读入优化 不得不说,读入优化在大规模读入的时候有很大的优势。 这种情况下,读入优化可以节省大约 。 读入优化按字符读入,之后转化为十进制。 二、模板 模板A: int read(){ int x=0,flag=1;char ch=getchar(); while(!isdigit(ch)){ 阅读全文
摘要:
[TOC] 一、定义 快速幂是一种能在$O(logN)$的时间复杂度内计算出$a^b$的一种算法。 快速幂是常用的一种算法。 二、实现原理 实际上,$a^b$是b个a的连乘式,我们可以使用朴素算法在O(N)的时间内处理完毕。面对较小数据,我们还可以使用$pow(a,b)$来计算。一旦当数据范围过大或 阅读全文
摘要:
[TOC] 一、质因数分解的基本定理 $\forall N \in (1,\infty)$都能唯一分解成有限个质数的乘积,可写作: $$N=P_1^{c_1}P_2^{c_2}...P_m^{c_m}$$ 其中$c_i$为正整数,$P_i$都是质数,且满足$P_1\lt P_2\lt ...\lt 阅读全文
摘要:
[TOC] 一、素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题)。 二、埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法,一般叫做埃氏筛。埃氏筛的思想是: $\forall x\in Z$的倍数$2x,3x, 阅读全文
摘要:
[TOC] 一、实现原理 我们以前都是怎么判断素数的呢: 试除法: 若一个正整数N为合数,则存在一个能整除N的数k,其中$2\leqslant k \leqslant \sqrt N$。 具体实施如下: int qpow(int a,int b,int mod){//快速幂 int res=1; w 阅读全文
摘要:
[TOC] 一、树状数组简介 这部分内容只是对树状数组的简单复习,如果您不熟悉树状数组,可以自行百度或参考其他关于树状数组的博客。 树状数组(Binary Index Tree,BIT)是一种使用数组来模拟"树"的数据结构。树状数组的核心是 。 我们在对较大范围的连续线性范围统计时,我们通常按2的整 阅读全文
摘要:
[TOC] 一、前言 单调栈的基本应用2是 "单调栈的基本应用1" 的延伸。应用2主要解决的是二维平面的一些问题。 二、基本应用2 虽然已经应用到二维平面,但是单调栈的思想并没有变化 更多应用的是延伸的位置。本质是 的左/右第一个大于 的元素位置 借助单调栈处理问题的思想在于 及时排除不可能的选项, 阅读全文