- 博客(29)
- 收藏
- 关注
原创 ACM课程心得
线段树定义:线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度...
2019-06-01 23:02:49
127
原创 ACM课程心得
树状数组树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询)。这种数据结构(算法)并没有C++和J...
2019-05-29 19:56:59
131
原创 ACM课程心得
并查集并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛...
2019-05-25 21:38:59
118
原创 ACM课程心得
Floyed通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后...
2019-05-22 19:55:16
95
原创 ACM课程心得
图形数据结构主要研究形状和图形数据元素之间的关系,它主要谈论几何形体在计算机内部的表示以及期间进行运算的基本方法。“算法+数据结构=程序”来说明数据结构在程序设计中所占的重要位置。图形数据结构与一般数据结构不同,它必须要反映数据所对应元素之间的几何关系和拓扑关系。对数据结构的要求:(1)具有尽可能完善的形状及图形描述能力;(2)具有对图形及形状信息进行各种基本操作的能力;(3)具有较小的...
2019-05-18 22:17:35
164
原创 ACM课程心得
堆堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆是非线性数据结构,相当于一维数组,有两个直接后继。堆的定义如下:n个元素的序列{k1,k2...
2019-05-15 19:33:58
87
原创 ACM课程心得
二叉树在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若...
2019-05-11 21:59:54
1029
1
原创 ACM课程心得
数据结构大二上的时候我就上过数据结构课程,可以说我的数据结构基础还是很扎实的接下来还是介绍一下数据结构的基本知识栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元...
2019-05-08 19:34:38
68
原创 ACM课程心得
单调队列单调队列:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。。单调队列的常用操作如下:(1)插入:若新元素从队尾插入后会破坏单调性,则删除队尾元素,直到插入后不再破坏单调性为止,再将其插入单调队列。(2)获取最优(最大、最小)值:访问首尾元素。朴素算法这是一个区间求极值问题。先枚举起始元素ax,然后求ax到ax+k-1的最大(小)值...
2019-05-04 18:59:42
79
原创 ACM课程心得
在一个程序中,对一个数乘,除以2的次方倍使用移位运算符可提高程序运行效率。宏定义在大型程序中可以有效提高运行效率。(typedef long long LL)三分法当需要求某凸性或凹形函数的极值,通过函数本身表达式并不容易求解时,就可以用三分法不断逼近求解。类似...
2019-04-29 22:36:30
88
原创 ACM课程心得
这星期自学了C++模板模板在一般情况下,程序设计时就会确定参与运算的所有对象的类型,让编译器在程序运行之前进行类型检查并分配内存,以提高程序的可靠性和运行效率。1.带类属参数的函数称为函数模板。2.带类属参数的类称为类模板。模板的类属参数由调用它的实际参数的具体数据类型替换,由编译器生成一段真正可以运行的代码。这个过程称为实例化。模板说明的一般形式:template<typena...
2019-04-26 11:44:28
73
原创 ACM课程心得
二分查找算法定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。时间复杂度:O(logn),优于直接顺序查找O(n)二分法在ACM中更多查找一个最优解,而非仅仅查找一个数常见扩展:对于某些问题,如果答案具有特定范围,并且验证答案是否成立的函数具有单调性。则可以在范围内对答案进行二分验证,从而快速确定答案。重要模型1...
2019-04-24 17:52:48
89
原创 ACM课程心得
C++学习1.过程化程序设计中,程序的基本单位是函数在面向对象程序设计中,程序的基本单位是类返回类型 类名::函数名(参数表)C++为成员函数提供一个称为this的隐含指针参数void Tclass::print(){ cout<< this->x<<","<<this ->y<endl; }静态成员函数入口地址:...
2019-04-20 22:03:24
99
原创 ACM课程心得
搜索搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。状态:对问题往某一个时刻进展情况的数学描述,或者是数学抽象。状态转移:动态规划中本阶段的状态往往是上一阶段状态和上一阶段决策的结果,在尽可能短的时间内找到最优化问题的全局最优解或近似最优解。两种方法:1.广度优先搜索(BFS)2.深度优先搜索(DFS)1.广度优先搜索简单...
2019-04-17 09:25:29
151
原创 ACM课程心得
区间DP区间DP主要是把一个大区间拆分成一个小区间,先求小区间的最优值,然后合并起来求大区间的最优值。第一种模型核心代码:dp[i][j] = min(dp[i][k] + dp[k+1][j]) + sum[j] - sum i-1第二种模型:根据匹配信息把区间划为[i+1,k+1]和[k+1 , j]例如:DP方程:dp[i][j] = min(dp[i][j],dp[i+1][...
2019-04-10 20:10:50
212
原创 ACM课程心得
这节课主要介绍了各种背包问题,我有如下总结:一:01背包题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使 价值总和最大。基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。状态转移方程:f[i][v] = max{f[i-1][v],f[i-1][v-c[i]]+w[i]}空间优化:for...
2019-04-03 20:22:44
63
原创 ACM课程心得
动态规划中, dx[] = {-1,0,1,0}, dy[] = {0,1,0,-1}表示上下左右四个方向。宏定义:宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。#ifndef ON...
2019-03-30 18:20:59
99
原创 ACM课程心得
课程上介绍到了记忆化搜索:1.记忆化搜索的实质是动态规划,效率也和动态规划接近,形式是搜索,简单直观,代码也容易编写,不需要进行什么拓扑排序了。可以归纳为:记忆化搜索=搜索的形式+动态规划的思想在数塔例题中的应用:在求Max(2,1),Max(2,2)的时候两次调用函数Max(3,2),也就是说,函数Max(3,2)被重复计算了两次,有很多结点都被重复计算了多次,程序时效显然就会大打折扣了...
2019-03-27 21:33:09
100
原创 ACM课程心得
今天 课堂上讲到动态规划。动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。对于我们敲代码的人来说,光解释名词没什么意思,下...
2019-03-24 17:37:02
157
1
原创 ACM解题心得
不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前.死亡骑士:“我要买道具!”地精商人:“我们这里有三种道具,血瓶150块一个,魔法药200块一个,无敌药水350块一个.”死亡骑士:“好的,给我一个血瓶.”说完他掏出那张N元的大钞递给地精商人.地精商人:“我忘了提醒你了,我们这里没有找客...
2019-03-24 17:04:04
312
原创 ACM课程心得
ios::sync_with_stdio(false)在C++中的输入和输出有两种方式,一种是scanf和printf,另一种是cin和cout,这两种方法看似,实则相差很大一. 首先,scanf与printf使用的头文件是stdio.hcin与cout的头文件是 iostream二. 两者在效率上相差很大,cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率...
2019-03-20 19:45:21
112
原创 ACM课程心得
今天,参加了广东工业大学的程序比赛。题目不能说很难,比我们平时oj上的题简单不少。但是,程序题就是这样,当你真正实践的时候,你会觉得不知如何下手。我做完第一题花费了近2h。我自认为完成得非常正确,但是屡次提交出错,我并不明白为什么。接下来努力方向:1.继续完成oj上的题2.准备计算机二级python考试...
2019-03-16 17:14:15
114
原创 ACM课程心得及编程中遇到的问题
学习计算机之路不易 更何况本专业是遥感的我 因为我大一在水土学院 没有接受系统C语言、C++语言的训练 所以,在ACM课上能够对程序题听个大概 但是真正上手实践总有不少问题。比如,在codeblock安装上,环境配置出了些问题;最近在自学python过程中,如何将py文件打包成exe遇到问题,后来发现是安装pycharm是环境配置出错了。。唉 路漫漫...
2019-03-09 12:57:15
185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人