- 博客(8)
- 收藏
- 关注
原创 2021-01-31 ACM训练笔记
Day10:最小生成树(Minimum Spanning Tree, MST)入门 常用的两种最小生成树算法:克鲁斯卡尔(Kruskal)算法、普利姆(Prim)算法。 零、什么是最小生成树: 假定有一个含n个顶点的边带权的无向图,其最小生成树具有如下特征: 1、是无向图的子图; 2、包含无向图的全部n个顶点,具有n-1条边(没有回路); 3、最小生成树包含的所有边的权重和是满足前两条特征的所有子图(这种子图称为生成树)中最小的。 一、Kruskal算法: 1、基本思想:
2021-01-31 22:32:12
120
转载 2021-01-27 ACM训练笔记
Day7:DP算法入门DP是Dynamic Programming(动态规划)的简称。 一、动态规划三要素:阶段,状态,决策 如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。 阶段:假设要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,
2021-01-28 22:24:26
112
原创 2021-01-26 ACM训练笔记
Day6:贪心算法 一、基本思路: 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。 贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步
2021-01-26 21:11:52
180
原创 2021-01-25 ACM训练笔记
Day5:线段树与树状数组 线段树: 一、线段树的用途: 举例:假设有一个数字序列,我们需要对其中的一段区间内的所有元素求和,同时,不同次求和操作之间可能会更改序列中某些元素的值。 一种容易想到的方法是利用循环遍历求和操作所涉及的区间,每个元素逐个相加。显然,这种做法的时间复杂度是O(N)。但如果使用线段树,我们可以将求序列任意区间元素和以及修改某一元素值的时间复杂度由原本的O(N)、O(1)同时变为O(logN)。 事实上,满足“区间结合律”的区间操作或者可以通过转化满足“区间结合律
2021-01-25 22:32:34
114
原创 2021-01-21 ACM训练笔记
Day2:并查集基础零、简介:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。所谓并查集算法就是对不相交集合进行如下两种操作:(1)检索某元素属于哪个集合;(2)合并两个集合。一、一种基础的并查集实现思路:1、定义一个整型数组保存节点之间的父子关系,数组下标即为节点编号,所保存的数据即为该节点对应的父节点编号。2、初始化:遍历数组,将所有节点的父节点设为它本身,此时,所有的树都仅包含一个节点。(也可将所有节点的父节点
2021-01-21 16:07:30
120
原创 2021-01-20 ACM训练笔记
Day1:基础知识 & STL基础知识:1、C++中的“万能”头文件 <bits\stdc++.h>2、算法复杂度:1.空间复杂度:可简单理解为程序所需内存空间越大,其空间复杂度越高。2.时间复杂度:用函数T(n)表示当问题规模(需要处理的数据量)为n时,算法中的基本操作需要执行的次数;引入其同量级函数f(n)(即n趋于无穷时,有T(n) / f(n) = C, 其中C为任意非零常数),记作T(n) = O(f(n)); O(f(n))即称为算法的“渐进时间复杂度”,“简称为时
2021-01-20 17:41:52
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人