自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创

定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。 图中可以没有边但必须有点。分为有向图,无向图,还有混合图;无向图:图的任意两个顶点之间的边都是无向边有向图:图的任意两个顶点之间的边都是有向边完全图无向完全图:任意两点之间都存在边的图有向完全图:任意两点之间都存在方向相反的两条...

2019-12-03 00:06:24 124

原创 Floyd求最短路径

Floyd求最短路径相比于Dijkstra算法来说,Floyd算法真的是容易理解多了,仅仅需要邻接矩阵,还有一个三重循环即可,但是比Dijkstra算法的复杂度要高,各有各的优点,自己选择即可。实现代码如下:#include<iostream>#include<cstring>const int Maxsize=100;const int Max=1000000...

2019-12-02 23:57:07 137

原创 树和二叉树

二叉树定义二叉树是n(n≥0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。特点:每个节点最多有两棵子树;二叉树是有序的,其次序不能任意颠倒特殊二叉树斜树1.所有节点都只有左子树的二叉树称为左斜树;2.所有节点都只有右子树的二叉树称为右斜树;3.左斜树和右斜树统称为斜树。4.在斜树中,每一层只...

2019-12-02 23:40:29 112

原创 dijkstra算法

算法思想1.以各点到初始点的距离为最近距离(即直接与初始点相连的边的权),如果不直接相连的距离则为无穷。2.选取这些边最短的,并判断该边的head与其他的点是否相连,如果相连之后的距离小于目前的最小距离,就更新初始点到各点的最小距离。(此时选出的最短的这条边的权就是他的head到初始点的最近距离,这时已经不需要判定该head距离初始点的最近距离,为其做上标记)3.不断重复2操作知道所有的点都...

2019-12-02 23:31:10 110

原创 数据结构笔记-栈和队列

栈和队列区别:栈是先进后出,二队列是先进先出。栈和队列也是采用链式存储和数组后缀表达式先将数字都插入进栈中,一个运算符,推出栈顶的两个元素,在将运算结果推入栈中,如此往复得到最终的结果。注意输入不能用cin,要用getline(cin,a)cin输入空格于回车时,停止输入,而getline是整行输入,输入回车停止,还要用到switch,‘数字’-‘0’得出的结果只能是个位数,如果是十位...

2019-10-28 09:36:18 156

原创 数据结构的笔记-线性表

线性表的顺序存储结构数组,对于我们都不陌生,相对于链式存储来说,就简单多了,就不多说了。线性表的链式存储结构我们一般用到的都是带头结点的。链式存储首先就要考虑结点的定义,着永远是链式存储的前提template <typename T>struct Node {   T data;   Node<T> *next; }; 有了这个前提,才能为...

2019-10-28 08:53:48 101

原创 单链表

#includeusing namespace std;struct Node{int data;Node *next;};class LinkList{public:LinkList(int a[],int sum);LinkList();~LinkList();void PrintList();void Delete1();void Delete2();priv...

2019-10-11 09:13:42 143 1

原创 类的封装、继承和多态

类:将数据和实现操作的函数放在一起,是对一类问题的抽象。类的三大特性一、封装性封装:函数的封装是一种形式,隐藏对象的属性和实现细节(函数内部),仅仅对外提高函数的接口和对象进行交互。类的访问限定符可以协助其完成封装类的三种访问限制符:public、private、protected。public允许类外访问private、protected不允许类外进行访问。protected的限...

2019-06-19 17:51:43 244

原创 软件开发心得

接触面向对象程序设计半年了,我有很多感想和体会,下面我与大家一起分享一下我的学习心得。首先,我觉得我自己最明显的转变就是思想的转变,我们不再是消费者和使用者,我们现在是创造者,我们要做的东西不是单纯为自己做的,而是为了满足别人的需求,说的简单点,我们以前就像一只完全没有约束的小鸟,现在我们被囚禁在一个小空间里,我们想要自由翱翔,可又害怕笼子太小,怕自己刚刚飞起来又别迫降落,为了能够自由翱翔,我们...

2019-06-19 11:52:29 578

原创 最短路径的长度

一、求出最短路径的长度  以下没有特别说明的话,dis[u][v]表示从u到v最短路径长度,w[u][v]表示连接u,v的边的长度。1.Floyed-Warshall算法 O(N3)  简称Floyed(弗洛伊德)算法,是最简单的最短路径算法,可以计算图中任意两点间的最短路径。Floyed的时间复杂度是O (N3),适用于出现负边权的情况...

2019-05-22 23:08:05 2942

原创 图论算法

完全图:一个n 阶的完全无向图含有n*(n-1)/2 条边;一个n 阶的完全有向图含有n*(n-1)条边;稠密图:一个边数接近完全图的图。    稀疏图:一个边数远远少于完全图的图。    强连通分量:有向图中任意两点都连通的最大子图。右图中,1-2-5构成一个强连通分量。特殊地,单个点也算一个强连通分量,所以右图有三个强连通分量:1-2-5,4,3深度优先与广度优先遍历  从图中某一...

2019-05-18 22:35:41 127

原创 图论算法

一、什么是图?  很简单,点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。结点的度:无向图中与结点相连的边的数目,称为结点的度。结点的入度:在有向图中,以这个结点为终点的有向边的数目。结点的出度:在有向图中,以这个结点为起点的有向边的数目。权值:边的“费用”,可以形象地理解为边的长度。连通:如...

2019-05-15 22:47:24 433

原创 图论算法

一、什么是图?  很简单,点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。二、图的一些定义和概念(a)有向图:图的边有方向,只能按箭头方向从一点到另一点。(a)就是一个有向图。(b)无向图:图的边没有方向,可以双向。(b)就是一个无向图。结点的度:无向图中与结点相连的边的数目,称为结点的度。结...

2019-05-15 22:13:22 320

原创 数据结构

队列是限定在一端进行插入,另一端进行删除特殊线性表。队列的删除和插入分别称为出队和入队。允许出队的一端称为队头,允许入队的一端称为队尾。 由于总是先入队的元素先出队(先排队的人先买完东西),这种表也称为先进先出(FIFO)表。队列可以用数组Q[m+1]来存储,数组的上界m即是队列所容许的最大容量。在队列的运算中需设两个指针:head:队头指针,指向实际队头元素的前一个位置tail:队尾指针...

2019-05-11 21:44:20 73

原创 数据结构

遍历二叉树㈠先序遍历的操作定义如下:若二叉树为空,则空操作,否则 ①访问根结点 ②先序遍历左子树 ③先序遍历右子树 void preorder(tree bt) //先序遍历根结点为bt的二叉树的递归算法 { if(bt) { cout << bt->data; ...

2019-05-11 20:45:13 80

原创 数据结构二

二叉树的性质1.在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。2.深度为k的二叉树至多有2^k –1个结点(k>=1)。特别:一棵深度为k且有2k–1个结点的二叉树称为满二叉树。可以对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,从左到右,由此引出完全二叉树的定义,深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点...

2019-05-09 20:06:03 89

原创 数据结构

栈栈是只能在某一端插入和删除的特殊线性表。进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP<0时为下溢。栈指针在运算中永远指向栈顶。1、进栈(PUSH...

2019-05-04 23:28:18 119

原创 二分查找算法

简单定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。时间复杂度:O (logn),优于直接顺序查找O(n)查找连续函数的写法待查找的值,Caculate():所要查找的函数,在这里单调递增需保证查找的值在区间范围内double low=“区间下界”,high=“区间上界”,mid;while(high - low...

2019-05-04 22:59:05 118

原创 二分查找算法

简单定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。时间复杂度:O (logn),优于直接顺序查找O(n)查找连续函数的写法//x:待查找的值,Caculate():所要查找的函数,在这里单调递增//需保证查找的值在区间范围内double low=“区间下界”,high=“区间上界”,mid;while(high...

2019-04-27 21:59:43 1185 2

原创 搜索

2019-04-24 22:47:54 83

原创 搜索

深度优先搜索基本思想:从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。广度优先搜索基本思想:从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一...

2019-04-20 22:37:17 64

原创 搜索

搜索的定义:搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。状态及状态转移状态(state)是对问题在某一时刻进展情况的数学描述,或者是数学抽象。每一个状态都会是答案的一个“可能的”解。状态的转移就是问题从一个状态转移到另一个状态,这样就可以进行搜索的一步步延伸,最后要得到的解也是其中的一个状态。广度优先搜索(BFS)  基本思想:从...

2019-04-17 22:21:50 93

原创 类和对象

一.类其实是对一类问题的解决,而对象就是这一类问题的特例,就像类是我们人的大体轮廓,而对象是我们身体的具体特征,通过这具体的特征将人分别开来。二.类,就像胶囊,外面一层函数操作(成员函数),加上里面的数据(数据成员),两者构成的整体才叫类,我们前面学的结构体struct,我们只是将相应的数据构成一个相连的整体,而没有操作,所以并不能称之为类,只有加上相应的操作(成员函数)才能称之为类。注意:成...

2019-04-14 20:06:53 62

原创 递归算法

程序直接或间接调用自身的编程技巧称为递归算法 (Recursion)。直接或间接调用自身的函数称为递归函数它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归的基本思想问题分解:把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,最小问题可以直接解决。递归的关键在于找出递归定义和递归终止条件。递归定义:使问题向边界...

2019-04-13 21:32:38 158

原创 区间DP

第一种模型石子合并一条直线上有N堆石子,现在要将所有石子合并成一堆,每次只能合并相邻的两堆,合并花费为新合成的一堆石子的数量,求最小的花费。1堆,花费为02堆,花费为sum[2]3堆,花费为min(a[1] + a[2], a[2] + a[3]) + sum[3]如果我们有n堆,合并的最后一次操作一定是从两堆合并成一堆.规定dp[i][j]为合并第i堆到第j堆的最小花费 DP方程为...

2019-04-10 21:37:23 80

原创 背包问题

完全背包问题题目 有 N种物品和一个容量为 V的背包,每种物品都有无限件可用。 第 i 种物品的费 用是 c[i] ,价值是 w[i] 。求解将哪些物品装入背包可使这些物品的费用总和不 超过背包容量,且价值总和最大。基本思路 这个问题非常类似于 01 背包问题 ,所不同的是每种物品有无限件。也就是从每 种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取 0 件、取 1 件、取 2 件...

2019-04-07 16:51:52 108

原创 背包问题

01背包问题 前提:这是最基本的背包问题,每个物品最多只能放一次题目 有 N件物品和一个容量为 V的背包。第 i 件物品的重量是 c[i] ,价值是 w[i] 。 求解将哪些物品装入背包可使价值总和最大。基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态: 即 f[i][v] 表示前 i 件物品恰放入一个容量为 v 的背包可以 获得的最大价...

2019-04-03 21:11:34 99

原创 贪心算法 A

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-04-03 15:18:10 150

原创 DP A题

都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝...

2019-04-02 21:02:22 246

原创 DP

动态规划的常用两种形式(1)递归型优点:直观,容易编写缺点:可能会因递归层数太深导致爆栈,函数调用带来额外时间开销。无法使用滚动数组节省空间。总体来说,比递推型慢。(2)递推型效率高,有可能使用滚动数组节省空间动规解题的一般思路1.将原问题分解为子问题   把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。  子问题的解一...

2019-03-30 22:44:06 59

原创 动态规划

一般思路1.将原问题分解为子问题   把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。  子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。2. 确定状态   在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个“状态”对应于一个或多个子问题,所谓某个“状态”下的“值”,就是这个“状态”所...

2019-03-27 21:37:32 103

原创 C++阶段总结

auto类型说明符用auto声明变量的类型,由编译器去自动分析表达式的类型,推断出变量的实际类型。在auto变量定义时必须有初始值。auto a; //错误:没有初始值auto r = 1, pi = 3.14; //错误:r和pi推断出的类型不一致注意:auto没有初始化一定错误,auto类型定义时要定义相同类型的。decltype类型指示符作用是选择并返回操作数的类型。...

2019-03-24 16:55:32 236

原创 动态规划

最优决策序列的子序列,一定是局部最优决策子序列。包含有非局部最优的决策子序列,一定不是最优决策序列。动态规划的基本模型具有多阶段决策的特征。每一阶段都有相应的“状态”与之对应,描述状态的量称为“状态变量”。每一阶段都面临一个决策,选择不同的决策将会导致下一阶段不同的状态。每一阶段的最优解问题可以递归地归结为下一阶段各个可能状态的最优解问题,各子问题与原动态规划问题具有以下基本特征:问...

2019-03-23 22:31:04 87

原创 动态规划

什么是动态规划:动态规划是解决多阶段决策问题的一种方法。多阶段决策问题:如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果.不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。最优决策序列的子序列,...

2019-03-20 22:16:25 80

原创 贪心算法

贪心算法的应用背包问题 当然背包问题可以分为两类:一类是物体不可分割,采用动态规划的方法解决问题,另一类是物品可以分割,通过贪心算法根据其性价比来选择最有价值的装东西的方式。 背包问题中讲到标准模板库函数排序最好使用stable_sort(),在性价比相同时保持相同的输入顺序。最优装载问题 最优装载问题和背包问题最大的区别就在于无法分割,依次装载并判断是否大于剩余载重量。...

2019-03-16 23:20:16 119

原创 贪心算法

贪心算法的概念:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,希望得到结果是最好或最优的算法。(贪心最适合于求最值问题,通过每一步的最优解以达到最终最...

2019-03-13 20:14:44 83

原创 STL第一阶段总结

STL的简单应用1.栈:stack是一种先进后出(First In Last Out, FILO)的数据结构,它只有一个出口,只能操作最顶端元素。头文件: #include 定义:stack&lt;data_type&gt; stack_name;如:stack s;2.队列:queue是一种先进先出(First In First Out, FIFO)的数据结构,从底端加入元素,从顶端...

2019-03-09 22:27:26 87

原创 第一学期总结

1.选择控制结构何为“选择”,相信大家都知道,就好比抛硬币,要么正要么反,你想把它编成一条程序,需要判断它是正还是反,如果是正,执行正的操作,如果是反,执行烦的操作。这是我个人理解的“选择”。选择语句ifif(expression)statement;orif(expression){Statement1;Statement2;}还存在双分支控制的条件语句(if els...

2019-01-04 17:18:41 3690

原创 数组总结

当我们需要处理较多数据时,我们不可能定义那么多个变量,这时我们就需要用到数组了。一维数组的定义:数据类型 数组名 []例如:定义一个有5个int型元素的数组——系统在内存分配连续的5个int空间给此数组数组的大小最好用宏来定义#define m 5int a[m];注意:数组的下标都是从0开始要想使两个数组的值相等有两种方法①逐个元素赋值②通过循环赋值for(int i=0...

2018-12-23 17:48:24 131

原创 第二次阶段性总结(循环语句)

这一阶段我们学习了循环结构,在实际应用中,我们会经常遇到许多重复的、有规律的运算,这就需要用到循环结构,循环结构对我们十分重要,它能够达到“省时省力”(偷懒课)的初衷,避免重复复杂的运算,下面就聊聊我们近期学习的内容和感悟吧!循环结构有三种for、while、do-while。格式(下面的缩进可能无法展现出来,见谅)if的格式:if(初始化循环变量;循环条件;更新循环变量)循环体;if...

2018-12-06 22:29:15 207

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除