- 博客(25)
- 收藏
- 关注
原创 算法设计分析第五章贪心算法
贪心算法在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。...
2020-05-06 17:35:30 369
原创 算法设计分析第四章笔记
动态规划一、动态规划的基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复...
2020-05-06 17:28:40 283
原创 算法设计分析第二章笔记
递推算法 **递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推。无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为...
2020-05-05 13:14:28 223
原创 算法设计分析第一章笔记
算法五大特性:算法设计的一般过程;算法分析:时间复杂性分析的关键:渐进符号:1.大o符号2.Ω符号:非递归算法分析的一般步骤:
2020-05-05 13:10:57 184
原创 二叉树-代码
#include <iostream >using namespace std;struct BiNode{ int data; BiNode* rchild; BiNode* lchild;};class BiTree{public: BiTree() { root = Creat(); } ~BiTree() { Release(root); } void...
2019-12-30 16:53:59 213
原创 oj查找和排序
小白鼠#include<stdio.h>#include<string.h>#include<stdlib.h>struct Rat{int weight;char color[10];};void swap(struct Rat *x,struct Rat *y){int w=x->weight;x->weight=y-&...
2019-12-29 20:05:26 231
原创 数据结构-排序(代码实现)
//排序类class Sort{ public: Sort();//构造函数 ~Sort();//析构函数 void InsertSort();//插入排序 void SelectSort();//直接选择排序 void BubbleSort();//冒泡排序 void ShellSort();//希尔排序 private: int Partition(int first,i...
2019-12-27 17:24:24 434
原创 数据结构——查找技术
查找的基本概念关键码由同一类型的数据元素组成的集合键值关键码的值主关键码可以唯一的标识一个记录的关键码次关键码不能唯一的标识一个记录的关键码静态查找不涉及插入和删除操作的查找动态查找涉及删除和插入操作的查找静态查找适用于:查找一经生成,便只对其进行查找,而不进行删除操作动态查找适用于:查找和插入和删除操作在同一个阶段进行。所以线性表:适用于静态查找树表:适用于动态...
2019-12-19 22:38:34 299
原创 AVL树的构建以及平衡方法
例如关键字序列(16,3,7,11,9,26,18,14,15)给出构造AVL树的构造过程第一步插入16,计算结点16的平衡因子平衡因子为0不需要调整、插入3,3小于16插入右子树计算平衡因子为1不需要调整第三个结点7,比16小比3大插入3的右子树失衡进行调整LR型调整。将7上升3作为7右子树16作为左子树在计算平衡因子都是0;继续插入下一个结点插入11平衡继续...
2019-12-19 17:01:06 2248 1
原创 Dijkstra算法andFloyd算法求最短路径问题
算法思想令G=(V,E)为一个带权有向图,把图中的顶点集合v分成两组,第一组为已求出最短路径的顶点集合s(初始时只有源节点,以后每求得一条最短路径,就将他对应的顶点加入到集合s中直到全部顶点都加入到s中);第二组是未确定最短路径的顶点集合U。在加入的过程中,总保持源节点v到s中各顶点的最短路径长度不大于从源节点v到U中的任何顶点的最短路径长度。2、算法步骤(1)初始化时,S只含有源节点;(...
2019-12-01 20:40:55 286
原创 最小代价生成树——Kruskal算法
1.图的存储结构采用边集数组存储图。2.定义Parent[i]数组,辅助完成连通分量的处理。数组分量的值表示顶点i的双亲结点(初值为-1)当一条边(u,v)的两个顶点的根结点不同时,这两个结点属于不同的连通分量(利用parent数组查找一棵树的根节点。当一个结点n的parent==-1,树的根节点即为n)来判断一条边所依附的两个顶点在同一个连通分量中3.将一条边所依附的两个顶点合并到同一...
2019-12-01 11:14:30 688 1
原创 求最小代价生成树——Prim算法
基本思想:设G=(V,E)是具有n个顶点的连通网,T=(U,TE)是G的最小生成树,T的初始状态为U={u0}(u0属于V),TE={},重复执行下述操作:在所有u属于U,v属于V-U的边中找一条代价最小的边(u,v)并入集合TE,同时v并入U,直至U=V;1.2.3.4.5.6.代码实现:数组lowcost[n]:用来保存集合V-U中各顶点与集合U中顶点最短...
2019-12-01 09:51:55 2915 1
原创 数据结构——图
6.1图的逻辑结构- 图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成 注:图的顶点个数不能为0但可以没有边若顶点vi和vj之间没有方向,则称这条边为无向边。如果图的任意两个顶点之间的边都是无向边,则称该图为无向图。若从顶点vi到vj的边有方向,则称这条边为有向边。如果图的任意两个顶点之间的边都是有向边,则称该图为有向图。图的基本术语简单图在...
2019-11-29 19:09:26 429
原创 KMP算法有点难理解。。。
快速的从一个主串中找出我想要的字串BF算法存在回溯,导致效率低。KMP算法仅仅后移模式串,比较指针不回溯。箭头左边匹配,并且左边有两个字串完全匹配称为模式串的公共前后缀。直接往前移动模式串使得前缀直接移动到后缀所在的位置,这样就能保证所在的串上下匹配。当模式串不匹配时,找出X之前那段串中的公共前后缀,然后往前移动来到原来后缀的位置那么在两个公共前后缀中间一定不存在已经匹配...
2019-11-29 18:28:10 497
原创 让人头疼的递归算法
递归,一般指函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数方法的算法。实质上是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。基本原理1.每一级的函数调用都有自己的变量。2.每一次函数调用都会有一次返回。3.递归函数中位于递归调用前的语句和各级被调用函数具有相同的执行顺序。4.递归函数中,位于递归调用后的语句执行顺序和各个被调用...
2019-11-29 17:24:38 187
原创 数据结构模式匹配——KMP算法
在两个字符串S[i]与T[j]中i可以不回溯,模式向右滑动到新比较起点k,并且k仅与模式串T有关。令k=next[j],则:next[j]=-1(j0)next[j]=max{k|0<k<j且T0…Tk-1=Tj-k+1…Tj-1}next[j]=0(其他情况)next[j]函数象征着模式T中最大相同前缀字串和左字串的长度。这里有个很好的小例子next[j]的算法分析...
2019-11-29 16:56:56 259
原创 数据结构模式匹配——BF算法
基本思想:从主串S的第0个字符开始和模式T的第0个字符进行比较,若相等则继续比较两者的后续字符;否则,从主串S的第一个字符开始和模式T的第0个字符进行比较,重复上述过程,直到T中的字符全部比较完毕,则说明比较失败。1.在串S和串T中设比较的起始下标I和j;2.循环知道S或T的所有字符比较完;2.1如果s[i]==T[j],继续比较S和T的下一个字符;2.2否则,将i和j回溯(i=i-...
2019-11-29 16:19:02 893
原创 第四章 数组和字符串
4.1字符串串:零个或多个字符组成的有限序列。串长度:串中所包含的字符的个数。空串:长度为0的串。串的逻辑结构字串:串中任意个连续的字符组成的子序列。主串:包含字串的串。字串的位置:字串的第一个字符在主串中的序号。串的存储结构顺序串:用数组来存储串中的字符序列。链接串:用连接存储结构来存储串。模式匹配:给定主串S=”s1 s2 s3…sn“和模式T=”t1t2t3t4…tm...
2019-11-29 15:55:39 105
原创 第五章——树和二叉树
树的逻辑结构树的存储结构二叉数的逻辑结构二叉数的存储结构及实现树、森林与二叉数的转换树的逻辑结构树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子...
2019-10-29 20:42:08 186
原创 数据结构——栈和队列
栈的逻辑结构:栈是限定仅在表头和表尾进行插入和删除操作的线性表允许插入的一端称为栈顶,另一端为栈底栈的代码实现:首先我们先考虑一下顺序存储结构的栈#include<iostream>const int Maxsize=100;using namespace std;template <class T>class seqStack{ private: ...
2019-10-24 22:16:57 140
原创 C++链表解决Open Judge约瑟夫环问题
描述约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。输入8 1 3 (n=8 k=1 m=3 )输出7 (剩下的那个)样例输入8 3 1样例输出7题目分析该问题数据总共有三个,分别是总人数,开始报...
2019-09-24 17:36:40 421
原创 C++模板
当我们遇到多组类型不同的数据时,定义一种数据类型的函数就太麻烦了。所以我们可以使用C++模板来解决这一问题1 模板的描述模板是对具有相同特性的函数或类的再抽象,模板是一种参数化的多态性工具。所谓参数化多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。2 模板的分类...
2019-09-20 10:44:44 97
原创 线性表-顺序表
1.1顺序表的存储结构基本思想:用一段地址连续的存储单元一次存储线性表的数据元素(随机存取);注意事项:C++语言中数组下标是从0开始的,而线性表中元素序号是从1开始的,也就是说线性表中第i个元素存储结构在数组中下标为i-1的位置。1.2顺序表的实现首先是大体的函数声明:const int Maxsize=100;//根据实际问题定义具体的大小Template<typenam...
2019-09-18 20:12:17 730
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人