- 博客(42)
- 收藏
- 关注
原创 算法设计与分析——贪心算法
在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种方式就是贪心算法贪心算法不是从整体上考虑问题,它所作出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。如果一个问题可以用几种方式同时解决,贪心是最好的选择之一。例题一:活动安排问题struct actio...
2020-04-20 17:31:12
808
原创 算法设计与分析——动态规划
动态规划算法通常用于求解具有最优性质的问题。基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题中得到原问题的解。(适合用于动态规划求解的问题,经分解得到的子问题往往不是相互独立的。若用分治方法解决,则得到的子问题的数目太多,某些子问题会被重复计算)若我们保存已解决的子问题答案,在需要的时候再找出以求得的答案,可以避免大量重复计算,节省时间。动态规划有效性依赖于问题本身的两...
2020-04-20 15:32:18
191
原创 算法设计与分析——分治算法
任何能用计算机求解的问题所需要的计算时间都与其规模你有关,问题规模越少,越容易直接求解,解题所需的计算时间也越少。分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,各个解决,分而治之。如果原问题可以分割成k个子问题,且子问题都可以解决,并可利用这些子问题的解求出原问题的解,那么分治法就是可行的,有分治法产生子问题往往是原问题的较小模式,这就为使用递归技术提供了方便,递归...
2020-04-20 11:13:33
1080
原创 算法设计与分析——递归
递归是一种技术手段,并不严格算是一种算法,是指程序直接间接调用自身的编程技巧。递归需要有边界条件,递归前进段和递归返回段。(1)当边界条件不满足时,递归前进;(2)当边界条件满足时,递归返回。PS:在使用递归策略时,必须有一个明确的递归结束条件,成为递归出口,否则将无限进行下去递归的缺点:*递归算法解体的运行效率低。在递归调用过程中,系统为每一层的返回点、局部变量等开辟了堆栈来存储。...
2020-04-18 17:30:05
270
原创 算法设计与分析——递推算法
算法特点:一个问题的求解需要一系列的计算,在已知条件和所求问题中总存在某些相互关联的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),就能够简单化复杂问题,将其拆分成若干步重复简单的运算,发挥计算机擅长重复处理的特点。递推算法的首要问题是得到相邻数据项之间的关系(即递推关系),避开了求通项公式的麻烦,可以将递推算法看成一种特殊的迭代算法。例题一:#includeusing ...
2020-04-16 18:26:18
775
原创 数据结构——图论
(一)图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。若顶点vi和vj之间的边没有方向,则称这条边为无向边,表示为(vi,vj)。如果图的任意两个顶点之间的边都是无...
2019-12-02 22:20:33
345
原创 数据结构——树(补充)
一:内容补充(一)森林转化森林转换为二叉树⑴ 将森林中的每棵树转换成二叉树;⑵ 从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时所得到的二叉树就是由森林转换得到的二叉树。二叉树转换为树或森林⑴ 加线——若某结点x是其双亲y的左孩子,则把结点x的右孩子、右孩子的右孩子、……,都与结点y用线连起来;⑵ 去线——删去原二叉树中所有...
2019-12-02 20:15:17
170
原创 数据结构——树
一:树的逻辑结构(一)定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。Ps:所有的节点之内只能最多有一个入度,及以上一节点只能有一条线链接。(二)树的基本...
2019-12-01 23:47:13
117
原创 数据结构——字符串和数组
字符串是多个字符形成的有序序列,同时,字符串存在一定的逻辑关系:1)子串:串中任意个连续的字符组成的子序列。2)主串:包含子串的串。3)子串的位置:子串的第一个字符在主串中的序号。...
2019-11-30 22:02:59
306
原创 数据结构——栈和队列
继线性表后我们学习的是栈和队列,栈就是一种操作方式,只能对栈顶进行操作,例如添加和删除,而队列则是对队首和队尾都能进行操作,只是队首插入,队尾删除。对于栈来说,不论是插入还是删除分别要进行判断是否为满还是空,可以用普通的线性表来操作,也可以用链表,当然链表只需要再删除时判断是否为空,来进行相应的操作。对于队列来说,同样可以使用同样可以使用线性表和链表来操作但要注意相应的条件。栈和队列是对链表...
2019-11-04 09:42:52
70
原创 数据结构——线性表
我们现如今通过使用类的方法来实现线性表,线性表是零个或多个具有相同类型数据元素的有限序列,一般的线性表是由一个数据成员与一个指针来构成。线性表可以分成几种特殊的表第一种是顺序表即数据中存在某种顺序的关系其特点是用一连串地址依次储存数据元素,由于我们使用类来进行线性表的操控,因此就用构造函数来实现线性表的构建,插入操作要先判断是否顺序表满,删除操作要判断是否空...
2019-11-04 09:02:28
116
原创 数据结构——模板
本学期,我们开始了数据结构这门课的学习。这门课对我们来说很重要,很核心,是重要的算法的学习。模板是对具有相同特性的函数或类的再抽象,模板是一种参数化的多态性工具。所谓参数化多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。模板在我理解来说就是将用一个代码,储存下来,需要解决问...
2019-10-27 18:16:09
180
原创 期末学习总结
知识点什么的重要的内容之前的博客中也都有所提及,在这里也就不提了。这篇博客代表的是又一个学期的结束,当然并不想写这种博客,尤其是这一篇,因为这一篇代表着的是我们愉快的大一生涯已经结束,迎接我们的是更苦闷的大二生活,专业课更多,选修课更多,我们在各个学科上花费的时间也就更多,因此,还是好好怀念一下大一的生活吧。大一下学期相比较于...
2019-06-22 20:37:22
418
原创 继承,组合知识点总结
我们在学习完基本上学习完成类的基本内容,基本的类的使用方式,接下来学习的就是关于类的一些其他的小应用。一.知识点(1)组合将一个类的对象作为另一个类的成员,被称作组合或包含;成员对象是组合对象的一部分,随着组合对象的创建而创建,随着组合对象的撤销而撤销;成员对象不作为独立元素对外部展现。(2)继承在已有类的基础上继承得到新类型,这个新类型自动拥有已有类的特性,并可以修改继承到的特性或者...
2019-06-21 22:04:46
160
原创 图论算法总结(三)
最短路径算法一)Floyed-Warshall算法 时间:O(N3)初始化:点u、v如果有边相连,则dis[u][v]=w[u][v]。 如果不相连则dis[u][v]=0x7fffffffFor (k = 1; k <= n; k++)For (i = 1; i <= n; i++)For (j = 1; j <= n; j++)If (dis[i][j] ...
2019-05-25 21:40:27
228
原创 图论算法总结(二)
讲完了图论,说实话,没听懂,我也只能捡着我听懂的部分写一下。并查集是一种用于分离集合操作的抽象数据类型。它所处理的是“集合”之间的关系,即动态地维护和处理集合元素之间复杂的关系,当给出两个元素的一个无序对(a,b)时,需要快速“合并”a和b分别所在的集合,这其间需要反复“查找”某元素所在的集合。“并”、“查”和“集”三字由此而来。在这种数据类型中,n个不同的元素被分...
2019-05-22 22:55:27
415
原创 图论算法学习总结
点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。有向图:图的边有方向,只能按箭头方向从一点到另一点。无向图:图的边没有方向,可以双向。结点的度:无向图中与结点相连的边的数目,称为结点的度。结点的入度:在有向图中,以这个结点为终点的有向边的数目。结点的出度:在有向图中,以这个结点为起点的有向边的数...
2019-05-18 22:41:33
379
原创 ACM学习总结
ACM的课程也已经快到结束的状态了,也有人去参加省赛,就我个人而言谈一下这些吧,ACM毕竟是一个竞赛,是有成绩的,像取得好成绩就必须要能对不能说所有题,起码也要有印象,该怎么解题,看着参赛的几支队伍,有的没有取得好的成绩,心里还是很忐忑的,可能有毅力学下来,最后就混个铜奖甚至联铜奖都混不上真的很害怕,但至少还知道害怕什么,能够去弥补,去学习,所有竞赛所关于的都是对知识点的把握程度,要回钻研,有毅力...
2019-05-16 00:08:55
94
原创 数据结构学习总结
新学的数据结构老师已经开始讲授,开始的两节课的内容就是之前学的stl的相关内容,在之后就是,树及二叉树。(1)每个元素称为结点(node);(2)有一个特定的结点,称为根结点或树根(root);(3)除根结点外,其余结点能分成m(m>=0)个互不相交的有限集合T0,T1,T2,……Tm-1。其中的每个子集又都是一棵树,这些集合称为这棵树的子树。树的基础概念前面的已经说过,这次就只说一...
2019-05-11 22:29:20
424
原创 学习总结
#include<iostream>#include<vector>#include<algorithm>using namespace std;class date{ string name; int phone; public: friend class run; date(string na,int ph) { name=na; phone=ph;
2019-05-04 23:32:55
69
原创 三分法内容整理
类似二分的定义Left和Rightmid = (Left + Right) / 2midmid = (mid + Right) / 2;如果mid靠近极值点,则Right = midmid;否则(即midmid靠近极值点),则Left = mid;用简单的话来说就是无数次的找中点极值点在中点的左面就将中点当成右面的点,反之亦然,三分法就是在二分法上变换来的一种解题形式,会了二分法其实对...
2019-04-27 22:02:48
177
原创 二分法学习总结
二分法上个学期我们已经学过了,所以这里我就只是简单说一下吧,二分法的优点是时间的缩短,一般的搜索都是以二重循环来成立的,时间就是n的平方而二分法将时间简化到nlog2n,这就大大的减少了运行的时间。因为内容也不多,所以这里就简单的谈一下我这段时间的心得。这段时间所学习到的内容比较多,比如搜索,递归等,学到的东西比较的冗杂,需要好好的整理一下,然后就是做题,这两天有点懒,做的题很少,趁着这两天赶紧...
2019-04-24 23:20:09
472
原创 搜索知识点
现如今,我们所学习到的知识点就是搜索,搜索是递归函数的延伸·广度搜索:从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则。生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。——在路径的寻找...
2019-04-20 22:43:56
199
原创 递归函数学习总结
把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,最小问题可以直接解决。递归的关键在于找出递归定义和递归终止条件。递归定义:使问题向边界条件转化的规则。递归定义必须能使问题越来越简单。递归终止条件:也就是所描述问题的最简单情况,它本身不再使用递归的定义。在我理解,所谓的递归算法和dp想法是一样的,都是将规模缩小,从而求出解,递归不同的是求出最...
2019-04-17 23:15:40
259
原创 类的知识点总结
前一段时间我们学习了结构体这个知识点,这个学期也被提醒了,类和对象是最主要的知识点,也是比较抽象的,比较难以理解的,相对于结构体来说,结构体就是开放性的,而对于类来说,我们能够对类内容进行保密,从而达到我们想要的保密效果。类最重要的就是对类的封装,即类内的内容有访问的限制,从而达到保密的效果,因此,累内的数据成员默认为私有类型,不能随便阅读,而结构体则是共有类型,能在任何情况下被读取。结构体:...
2019-04-14 15:03:46
320
原创 区间DP知识点整理
区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值,区间DP实际上就是经典DP的扩充内容,能从分割区间的思路上去解决问题。一般区间DP实现代码::memset(dp, 0x3f, sizeof(dp));//将dp区间初始化;for (int i = 1; i <= n; i++) //区间长度为1的初始化; dp[i]...
2019-04-13 18:37:43
219
原创 背包和区间DP
背包问题也分很多比如最经典的01背包问题,分组背包,完全背包。所有的学习的背包问题都是从01背包问题上发展而来的,比如01背包的经典问题就是有限的空间中获得最大的利润,那么分组背包就是所有的有N件物品,告诉你这N件物品的重量以及价值,将这些物品划分为K组,每组中的物品互相冲突,最多选一件,求解将哪些物品装入背包可使这些物品的费用综合不超过背包的容量,完全背包就是有N 件物品和一个容量为的背包。每...
2019-04-10 22:15:36
163
原创 ACM学习总结
DP题结束,对DP真的很头疼,不懂只能套模板的去做题,做出来一个往后面就套这一种动态转移方程,做题也是疯狂的WA,但就是不知道错到哪里,很苦恼。最长上升子序列,最大连续序列和,最大子矩阵和,最大m段子段和,背包问题,没思路,看别人的也只是大体上了解,没有很深入地了解。到现在,学习0—1背包问题,多重背包问题等等。总之,DP题都不是很了解对于背包问题也是有点难以接受,不是很会,只能一步步来吧,先套用...
2019-04-03 22:42:06
71
原创 经典DP分析
经过这几天的练习真的感觉DP很难,做题根本没有做贪心时候的感觉,就感觉很干,没有思路,一些很简单的题也做不出来,就简单的罗列一下DP知识点吧动态规划是解决多阶段决策问题的一种方法。多阶段决策问题:如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效...
2019-03-30 23:46:42
934
原创 经典DP学习总结(体验)
贪心算法学完了,我们也开始了DP的学习,当然在我感觉现如今学习的两种算法都是帮助我们去解决问题的方法,就是直接性的公式套用的解题思路。就例如DP中的数塔问题,利用dp转化成动态表达方程就很好的解决,不用再一个个的情况列出来在排序这样的解决问题。DP要实现的就是将复杂问题简化,在我们不能直接将问题求解的时候,我们通常会采用分步求解,在我们学习过的只是贪心和DP都可以实现这种想法,不同的是,贪心算法...
2019-03-27 22:09:36
649
原创 面向对象(4,5章)学习总结
这学期开始,我们就开始了更深层次的学习,学习的就是程序设计面向对象,相比于上一个学期学习的内容,这个学期所学习的知识点无疑是更加的难懂,也更加的多,很多知识点都很零碎,想要学好这个学期的内容不花大的力气是不行的,第四章主要学习的就是指针,的五章呢就是函数,函数虽然上个学期我们学习过了,但是很简单,很皮毛,指针的内容也是一样的。...
2019-03-24 17:19:23
144
原创 学习感悟
贪心题虽然出的不多,但是花时间考虑,中间浪费的时间就比较多,这两天做的题也就比较少,也总结不出什么关于贪心的内容了,动态规划因为还没讲,自己看了看课件,也是有点云里雾里的感觉,但我感觉的就是动态规划跟贪心算法一样都是一种解题的思想,虽然不是很透彻吧,等老师讲过后再对动态规划进行整理吧。这次水一点,主要谈一下我这段时间学习的体验吧,开始的时候老师说所有的课后时间都用来学习ACM的时候我真的以为是一...
2019-03-23 21:56:39
134
原创 贪心算法题目总结
经过这段时间的贪心算法的习题的练习,我开始对贪心有点感觉了,贪心的习题大部分是贪心和其他的内容其他的联系起来,用贪心的方法来解决其他知识的内容。第一类最经典的问题当然还是空间分配的问题,要在有限的空间中存放价值最高的东西,所求的就是性价比,依据性价比的高低来得到我们想要的价值最大的问题,再难一点的问题就是空间的拆分,就是在价值最大的基础上还要把空间装满,我们要做的就是将装不满的这一部分在基础上选...
2019-03-20 22:15:42
205
原创 贪心算法练习题FatMouse
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean. The warehouse has N rooms. The i-th room contains J[i] pounds of J...
2019-03-16 23:42:06
708
原创 贪心算法学习感悟
经过这几天的学习,贪心算法的习题也新鲜出炉了,就我这两天看到的练习题和训练题来说一下我的心得吧,这两天也比较颓,没有做太多的题,只是在复习讲过的例题,在努力地看懂。大体上贪心算法我所遇到的的题也就是背包问题的拓展和延伸,贪心算法毕竟只是一种算法,只是一种解题的公式,我们所要做的就是将问题读懂再将其利用公式解出来,贪心算法就是给我们提供了一个大体的框架,我们要讲其他的内容和知识将其填充完整。新的...
2019-03-16 23:27:45
848
原创 MOO解题报告
Farmer John has received a noise complaint from his neighbor, Farmer Bob, stating that his cows are making too much noise.FJ’s N cows (1 <= N <= 10,000) all graze at various locations on a long...
2019-03-16 19:37:42
326
原创 贪心算法学习总结
在学习完STL之后,我们就已经开始了贪心算法的学习,算法在我看来主要就是一种解题思路,能够帮我们更好的解决生活中的我们遇到的问题,解决我们遇到的各种问题,不只是现在学习的贪心算法,还有很多的其他的算法,比如:递归算法,递推算法等。贪心算法主要的内容在我看来就是将复杂的问题转化为一步一步的小问题,再将这些简化后的问题分别的求出解,再将这些解整合得出最优解,贪心算法不是从整体上考虑问题,它所做出的选...
2019-03-13 22:03:38
759
原创 ACM学习总结
ACM是一个对我们计算机专业是一个含金量很高的比赛,每一个对编程有一定兴趣的人来说一定不会放过这个很好的学习机会,虽然说,我错过了寒假中的学习机会,但开学后,机会总还是有的。我们第一个章节主要学习STL,就是标准模板库,通过合理的运用STL我们一是可以节省大量的步骤,从而节省程序运行的时间,二是可以实现我们很多不便实现的功能得以实现。 第一个就是Stack,即栈,这种数据结构就象是一个...
2019-03-09 20:34:21
127
原创 学期末C语言总结
学期末C语言总结经过一个学期的学习,我也初步的了解到了我的核心课程–C语言。对于我来说新事物学习肯定是困难的,但在这困难中,我得到了我可以接受的收获。一、顺序结构这一个板块是最基本,也是最基本的板块,课程的学习就是从最基本的开始,因此,我们最先开始接触的这个顺序结构模块就是我们最好的敲门砖。顺序结构就是输入、中间的数据的处理还有输出。比如“hello world”的这个程序省略掉输入这个过...
2019-01-05 08:32:29
249
原创 数组知识总结
数组知识点总结一.知识点(1)一维数组<1>储存大量数据并用一种类型的变量代表这相同性质的数据,简化因单一变量来代替单一的数据,优化程序,例如cin>>a1>>a2…>>a10;可用for(i=1;i<=10;i++)cin>>a[i];这样就大大减少冗长的变量输入过程。<2>定义合理的一维数组时,定义中...
2018-12-23 17:01:32
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人