- 博客(17)
- 收藏
- 关注
原创 ACM算法笔记(十)深度优先搜索与宽度优先搜索
深度优先搜索属于图算法的一种,英文缩写为DFS即DepthFirstSearch.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次宽搜相比较于深搜,更倾向于“多面地毯式搜索”。...
2022-07-14 21:52:24
684
原创 算法笔记(九)前缀和与差分
前缀和:前缀和可以理解为某个序列前n项的和,不限于一维还是二维。对于一个数列an,前i项的前缀和Si = a1 + a2 + a3 + ... + ai差分:差分可以理解为前缀和的逆运算,对于一个序列an,对于任意相邻的两项ai和a(i+1),二者之差即|ai-a(i+1)|即为此数列在i处的差分。......
2022-07-11 23:08:14
269
2
原创 ACM算法笔记(六)递归和深度优先搜索
程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。简单来说,递归就是自己.
2022-02-06 17:38:43
1138
原创 ACM算法笔记(五)贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。贪心算法的局部最优解:在当前子结构中,方案1是最优的解,通过方案1可以得到此子结构的最优化的解,此结构称为最优子结构。由部分最优推到全体最优。ps:贪心算法得到的解不一定是最优的解(这里就体现了贪心算法和动态规划的区别咯,以后会说)。通俗地讲,贪心算法,就是在小部分小结构中构造一个最优化.
2022-01-07 16:09:55
1269
原创 ACM算法笔记(三)【位运算详细解析】位运算实现快速幂和64位整数乘法
导语:大家都知道计算机的所有的运行操作和程序最终都是根据二进制来实现的,在我们写算法程序的时候,在编译器内部,也是将我们的程序转化为二进制序列,进行程序操作的。而位运算就是基于二进制的程序运算操作,相比于正常的运算操作,位运算不仅速度快、效率高,而且在算法设计中,还可以简化时间复杂度和空间复杂度,本篇给出位运算的两个常见的应用,通过位运算来大幅度简化时间复杂度和空间复杂度。一、位运算基本操作与运算 &或运算 |异或运算 ^非运算(求补) ~右.
2021-05-23 11:15:46
661
原创 ACM算法笔记(四)并查集
并查集一个很友好 的数据结构(bushi)并查集:(union-find sets)是一种简单的用途广泛的集合.并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数、最小公共祖先、带限制的作业排序,还有最完美的应用:实现Kruskar算法求最小生成树(以后会学到)。并查集的两种基本操作:(1)合并;(2)查询;解释:对并查集概念的理解说白了就是一种合并集合的一个“算法思想”和结构方法,这是说并查集是一种方法,一个思路,也是一种数
2021-05-16 23:05:25
392
原创 ACM算法笔记(八)背包问题_多重背包
问题描述:现在给你一个容量为V的背包,有N个物品,其中第i件物品的重量为wi,价值为vi,第i件物品一共有si件,问在有限的容量内,最多可以拿到多少价值的物品。题目分析:仔细一看,多重背包问题和完全背包问题的差距就在物品的个数上,完全背包问题是同一类物品有无数件,但多重背包不让着你,多重背包给你规定了最多件数。仔细看看还挺有意思,01背包是要么0件要么1件,多重背包是要么可以选0~si件,而完全背包则是可以选0~∞件。那我们拓展一下思维,这是规定了同类物品最多能拿的个数,要是规定了第i.
2021-04-02 17:36:59
576
原创 ACM算法笔记(八)背包问题_完全背包
问题描述:现在给你一个容量为V的背包,有N个物品,其中第i件物品的重量为wi,价值为vi,每件物品可以拿无数次,问在有限的容量内,最多可以拿到多少价值的物品。题目分析:完全背包问题和01背包好相似诶,不过貌似又不是那么一样,对于完全背包问题的每一个物品不是两种状态了,而是k+1种状态:不拿或者拿1件或者拿2件或者....刚开始看到完全背包的问题描述的时候,笔者脑海中还是蛮开心的,这不就是贪心吗?那我直接求性价比,用现在的包裹全部装性价比最高的,然后用剩下的装性价比第二高的...以此类推不就行
2021-04-02 17:32:37
234
原创 ACM算法笔记(八)背包问题_01背包
问题描述:现在给你一个容量为V的背包,有N个物品,其中第i件物品的重量为wi,价值为vi,每件物品只可以拿一次,问在有限的容量内,最多可以拿到多少价值的物品。问题分析:对于每一个物品,都有两种策略:拿或不拿。读到这里,是不是脑海中有一个清晰的想法?DFS!确实,这不就是我们常见的dfs问题吗,分别枚举拿和不拿两个状态即可。于是写下了如此代码...#include<iostream>#include<cstdio>#include<cstring>.
2021-04-02 17:20:56
388
原创 ACM算法笔记(二)【史上最全】快速排序(STL库函数)
######快速排序对于c++党来说是极大的福利,因为是C++(c with stl)呀!######快速排序的时间复杂度O(nlogn),在排序算法中还算是比较快的一种。对于一些题目中,需要用到排序的,基本上直接STL大法就OK咯~先上一段代码:#include<iostream>#include<algorithm>using namespace std;const int MAXN=1e+3;bool cmp(int c,int b){ return c
2021-04-02 17:08:34
1560
1
原创 ACM算法笔记(一)模拟算法【详细解析】
Tips:什么是模拟算法?模拟算法有没有什么严格的定义呢?模拟算法到底用来做什么呢?笔者:无论是noip还是icpc又或是各个网站的训练赛、模拟赛,总是脱离不了“模拟题”,所谓的模拟题,运用的“模拟算法”,其实并没有什么完全准确的定义。模拟算法,用一句老话说,就是“照着葫芦画瓢”;官方化的诠释则是:根据题目表述进行筛选提取关键要素,按需求书写代码解决实际问题。(还是老话好理解吧哈哈哈哈)模拟算法一般都是一些很基础的题目,一些神犇眼中,模拟题就是所谓的“水题”,不太需要动脑子,只要按照题目要求来就好。
2021-03-11 21:42:56
11977
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人