随笔分类 - ACM基础
1
摘要:并查集 概念: 并查集是一种用于分离集合操作的抽象数据类型。它所处理的是集合之间的关系,即动态地维护和处理元素之间的复杂关系。 当给出两个元素的一个无序对(a,b)时,需要快速“合并”a和b分别所在的集合,这其间需要反复“查找”某元素所在的集合。“并”、“查”和“集”三字由此而来。 在这种数据类型中
阅读全文
摘要:图的基本概念: 点用边连起来就叫做图,实际上:图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。 图分为有向图与无向图两种: 有向图:图的边有方向,只能按箭头方向从一点到另一点。 无向图:图的边没有方向,可以双向。 结点的度:无向图中与结点相连
阅读全文
摘要:堆及其应用 堆结构是一种数组对象,它可以被视为一棵完全二叉树。(如果一棵深度为K二叉树,1至k-1层的结点都是满的,即满足2i-1,只有最下面的一层的结点数小于2i-1,并且最下面一层的结点都集中在该层最左边的若干位置,则此二叉树称为完全二叉树。) 树中每个结点与数组中存放该结点中值的那个元素相对应
阅读全文
摘要:树与二叉树学习小结 对于数据结构的内容,这里不再对栈与队列进行说明。我们先来说一下树与二叉树的内容(概念性的东西有点多): 树的有关概念: 一棵树是由n(n>0)个元素组成的有限集合,其中: (1)每个元素称为结点(node); (2)有一个特定的结点,称为根结点或树根(root); (3)除根结点
阅读全文
摘要:单调队列学习小结 单调队列::队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。 单调队列的常用操作如下: (1)插入:若新元素从队尾插入后会破坏单调性,则删除队尾元素,直到插入后不再破坏单调性为止,再将其插入单调队列。(这样队列整体始终保持单调,不单调的
阅读全文
摘要:二分查找算法: 二分查找算法就是从单调有序的集合中从两端不断查找元素,然后不断缩小范围直至查到该元素或缩至最小无解的过程。 时间复杂度:O (logn),优于直接顺序查找O(n) 例: //x:待查找的元素, n:数组集合大小, num数组单调递增 int low=0,high=n,mid,res
阅读全文
摘要:位运算符: 位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。 1.与运算符 与运算符用符号“&”表示,其使用规律如下: 两个操
阅读全文
摘要:搜索分为广度搜索与深度搜索,不同的题目有不同的解决方法,有的题目两种方法都适用,但是总有一种相对简单,有的时候我们对于使用的方法是可知的,有的时候却是未知的。 看了看例题但仍然不会做,最近事情也好多,好没有精力去投入,要加油啊! 下面是广搜与深搜的模板框架: 广度优先搜索: While Not Qu
阅读全文
摘要:递归与搜索部分知识点小结 递归算法 程序直接或间接调用自身的编程技巧称为递归算法。 直接或间接调用自身的函数称为递归函数。 递归函数通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。(一步步缩小,缩到最小问题可以直接解决) 递归的关键: 问题转化与递归终止: 问题转化:找出问
阅读全文
摘要:对于区间DP这类问题,关键还是在于思考,将问题看出用区间DP的思路解决后再一步步将大区间化小,变成一个个小区间后进行实现。 上次提到的区间DP模板,是三重循环,现在我们进行优化(在寻找区间最佳位置时耗费了大量时间)(我们可以在枚举分割点的时候将这个点保存下来) 用s[i][j]表示区间[i,j]中的
阅读全文
摘要:区间DP 区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值。 一般区间DP实现代码: memset(dp, 0x3f, sizeof(dp)); for (int i = 1; i <= n; i++) //区间长度为1的初始化 dp[i][i] = 0;
阅读全文
摘要:背包问题知识总结 背包问题在不同的资料中可能分为不同的类别,在学习背包问题时,我们将背包分为以下几类:01背包,完全背包,多重背包,分组背包。 先一个一个说起: 一、01背包: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 这是
阅读全文
摘要:这几天看动态规划的题目,发现难点还是在于状态转移方程,真的想不出。。。 或者说有的题目大体思路有了,状态方程懂了,但是具体到代码实现上又很难下手(就是那种只明白思路无法用代码实现的感觉。。。) 看着同学们做了好多,自己却不太会做,唉。。。 或许是自己做过的题目和接触到的题目太少了,又把课件从头到尾看
阅读全文
摘要:动态规划部分知识点总结 动态规划与贪心算法之间的关系: 关于动态规划,很多东西都与贪心算法类似,都是解决多决策问题的一种方法。(多阶段决策问题:一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。 多阶段决策问题,就是要在可以选择的那些策略中间,选取一
阅读全文
摘要:贪心算法部分题目总结: 一:背包问题 背包问题与最优装载问题十分类似,都是取优先级别级别最高或较高的变量进行处理,其中分为两种类型:变量(货物)可拆分/不可拆分两类;对于这两类类型,可以先将其性价比一一算出,先装性价比较高的,然后依次降低,直到背包装满货物,需要注意的一点就是比较,在快装满时比较出是
阅读全文
摘要:贪心算法 概念:简单来说,贪心算法就是贪心,在求解的时候步步贪心,步步求得最优解,直至结束时求得想要的最优解。因此贪心算法起初考虑的并非整体,而是局部的最优解。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。 因为我们使用贪心算法,每次都得到其子问题的最优解,所以这里引入最优子结构
阅读全文
摘要:关于学习STL部分学到的零碎知识点: 关于STL的部分在前面已经提到,现在主要写一下关于在学习STL时的部分零碎知识点: 万能头文件:#include<bits/stdc++.h> C++中的.和::和->的区别: 1、A.B则A为对象或者结构体; 2、A->B则A为指针,->是成员提取,A->B是
阅读全文
摘要:STL中set与map的使用 这次写的是STL中set与map的相关知识点以及优先队列的部分补充内容以及重载运算符的使用。 首先介绍一下set与multiset: set 和 multiset会根据特定的排序准则(set容器内部由红黑树实现,插入删除查找的效率都非常高,而且是自动排序、去重),自动将
阅读全文
摘要:STL简单应用: STL中的部分简单应i用包括栈(stack)、队列(queue)、其中队列还有特殊的优先队列(priority_queue);还有vector-动态数组、其次还有sort排序以及生成排序等多种排序方法,其中包括upper_bound和lower_bound的寻址排序法方便返回特定元
阅读全文
摘要:今天看了一些关于STL的内容,但是并没有太多看懂。。。 有很多东西还是不了解,只是了解了一些大面上的知识点: 下面是通过一些博客及文件整理了一些关于STL的部分知识: STL体现的是泛型编程的核心思想:独立数据结构和算法。 STL主要由几个核心部件组成,即迭代器、容器、算法、函数对象、适配器。 容器
阅读全文
1

浙公网安备 33010602011771号