算法笔记
、那年雪天
这个作者很懒,什么都没留下…
展开
-
算法笔记---安全状态(银行家算法)
题目描述操作系统中,进程调度是一个非常重要的问题。每个进程都需要一定的资源才能顺利执行,进程执行过程中使用的资源在进程结束时都会释放。不同的资源分配策略会对系统的运行效率产生很大的影响,甚至可能导致死锁。现某系统中现有n个进程和m种资源。每个进程开始时得到部分资源,但不足以使得进程顺利执行,还需要得到其它资源才能执行。已知该系统中各类可用资源的总量,给定已知的进程及其资源分配和需求情况,你能帮忙检查这些进程能够顺利执行吗?输入数据:输入数据有若干组,每组输入数据的第一行包含两个正整数n,m(0<原创 2020-06-12 16:03:13 · 2758 阅读 · 0 评论 -
算法笔记---问题 A: 【字符串】最长回文子串
题目描述输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同。如abba和yyxyy。在判断回文时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。输入字符串长度不超过5000,且占据单独的一行。应该输出最长的回文串,如果有多个,输出起始位置最靠左的。输入一行字符串,字符串长度...原创 2020-05-04 17:11:51 · 483 阅读 · 0 评论 -
算法笔记---问题 A: 最长公共子序列(LCS)
题目描述给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。例如:Z=<a,b,f,c>是序列X=<a,b,c,f,b,c>的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少?输入输入包含多组测试数据。每组输入占一行...原创 2020-05-03 17:03:38 · 295 阅读 · 0 评论 -
算法笔记---问题 A: 最长上升子序列(LIS)
题目描述一个数列ai如果满足条件a1 < a2 < … < aN,那么它是一个有序的上升数列。我们取数列(a1, a2, …, aN)的任一子序列(ai1, ai2, …, aiK)使得1 <= i1 < i2 < … < iK <= N。例如,数列(1, 7, 3, 5, 9, 4, 8)的有序上升子序列,像(1, 7), (3, 4, 8)和许...原创 2020-05-03 14:52:44 · 316 阅读 · 0 评论 -
算法笔记---动态规划:问题 A: 最大连续子序列
题目描述给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。现在增加一个要求,即还需要输出该子序...原创 2020-05-02 15:50:53 · 539 阅读 · 0 评论 -
算法笔记---动态规划:数塔问题
动态规划(Dynamic Programming,DP)是一种用来解决一类最优化的算法思想简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。需要注意:一个问题必须拥有重叠子问题和最优子结构,才能使用动态规划去解...原创 2020-05-02 12:31:53 · 1213 阅读 · 1 评论 -
算法笔记---问题 A: 关键路径
题目描述图的连接边上的数据表示其权值,带权值的图称作网。图可描述为顶点集为(a,b,c,d,e)边集及其权值为(始点,终点 权值):a b 3a c 2 b d 5c d 7c e 4d e 6 网的源点是入度为0的顶点,汇点是出度为0的顶点。网的关键路径是指从源点到汇点的所有路径中,具有最大路径长度的路径。上图中的关键路径为a->c->d->e,其...原创 2020-04-30 21:40:42 · 1111 阅读 · 0 评论 -
算法笔记---问题 B: 确定比赛名次
题目描述有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。输入输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示...原创 2020-04-29 13:38:08 · 2446 阅读 · 0 评论 -
算法笔记---问题 A: 算法7-12:有向无环图的拓扑排序
题目描述由某个集合上的一个偏序得到该集合上的一个全序,这个操作被称为拓扑排序。偏序和全序的定义分别如下:若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。设R是集合X上的偏序,如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。由偏序定义得到拓扑有序的操作便是拓扑排序。拓扑排序的流程如下:在有向图中选一个没有前驱的顶点并且输出之;从图中删除该...原创 2020-04-28 21:32:37 · 1161 阅读 · 0 评论 -
算法笔记---问题 C: 畅通工程
题目描述省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。输入测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (N, M < =100 );随后的 N 行对应村庄间道路...原创 2020-04-26 21:25:48 · 178 阅读 · 0 评论 -
算法笔记---问题 A: 还是畅通工程
题目描述某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。输入测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正...原创 2020-04-26 17:46:06 · 387 阅读 · 0 评论 -
算法笔记---Kruskal算法
Kruskal算法:用来求解最小生成树的算法,同样使用贪心思想,只不过是边的权值最小来贪心。Prim算法和Kruskal算法都是求解最小生成树的算法只是Prim算法在执行时,是枚举图中所有结点,故比较适用稠密图(即结点少,边多),而Kruskal算法在执行时,是枚举所有边,故比较适用稀疏图(即结点多,边数少)。Kruskal算法:1、构造结构体,里面存放边的起始结点,终止结点,边的权值。...原创 2020-04-26 16:04:31 · 237 阅读 · 0 评论 -
算法笔记---Prim算法
Prim算法:用来解决最小生成树的问题Prim算法和Dijkstra算法思想类似,都是采用贪心的思想。两个算法的主要区别:Dijkstra算法的dis[]数组是记录未访问结点集合与源结点的最短路径,而Prim算法的dis[]数组记录的是未访问结点集合到已访问结点结合的最短距离。两个算法都是用bool visited[]数组来表示当前结点是否被访问。Prim算法有一个统计最小生成树...原创 2020-04-26 14:28:57 · 337 阅读 · 0 评论 -
算法笔记---算法7-16:弗洛伊德最短路径算法
题目描述在带权有向图G中,求G中的任意一对顶点间的最短路径问题,也是十分常见的一种问题。解决这个问题的一个方法是执行n次迪杰斯特拉算法,这样就可以求出每一对顶点间的最短路径,执行的时间复杂度为O(n3)。而另一种算法是由弗洛伊德提出的,时间复杂度同样是O(n3),但算法的形式简单很多。可以将弗洛伊德算法描述如下:在本题中,读入一个有向图的带权邻接矩阵(即数组表示),建立有向图并按照以上...原创 2020-04-25 15:27:18 · 1210 阅读 · 0 评论 -
算法笔记---【PAT A1030】Travel Plan
题目链接:【PAT A1030】Travel Plan题目描述A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a trave...原创 2020-04-24 17:00:55 · 256 阅读 · 0 评论 -
算法笔记---【PAT A1003 】Emergency
题目链接:【PAT A1003 】Emergency题目描述As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of res...原创 2020-04-23 18:04:26 · 243 阅读 · 0 评论 -
算法笔记---Dijkstra算法
Dijkstra算法(读者可以将其读作“迪杰斯特拉算法”)用来解决单源最短路问题,给定图G和起点s,通过算法得到S到达其他每个顶点的最短距离。算法基本思想:1、对图G(V,E)设置集合S,存放已被访问的顶点。2、每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S。3、令顶点u为中介点,优化起点s与所有从u能到达的顶点v之间的最短距离。4、这样的操作执行n次...原创 2020-04-22 19:10:40 · 336 阅读 · 0 评论 -
算法笔记---[PAT A1076] Forwards on Weibo
题目连接:[PATA 1076] Forwards on Weibo题目描述:Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may follow many other users as well. Hence a social network is...原创 2020-04-21 18:06:49 · 245 阅读 · 0 评论 -
算法笔记---自顶向下的赫夫曼编码
题目描述在通讯领域,经常需要将需要传送的文字转换成由二进制字符组成的字符串。在实际应用中,由于总是希望被传送的内容总长尽可能的短,如果对每个字符设计长度不等的编码,且让内容中出现次数较多的字符采用尽可能短的编码,则整个内容的总长便可以减少。另外,需要保证任何一个字符的编码都不是另一个字符的编码前缀,这种编码成为前缀编码。而赫夫曼编码就是一种二进制前缀编码,其从叶子到根(自底向上)逆向求出每个字...原创 2020-04-18 17:36:39 · 1103 阅读 · 2 评论 -
算法笔记---自底向上的赫夫曼编码
题目描述在通讯领域,经常需要将需要传送的文字转换成由二进制字符组成的字符串。在实际应用中,由于总是希望被传送的内容总长尽可能的短,如果对每个字符设计长度不等的编码,且让内容中出现次数较多的字符采用尽可能短的编码,则整个内容的总长便可以减少。另外,需要保证任何一个字符的编码都不是另一个字符的编码前缀,这种编码成为前缀编码。而赫夫曼编码就是一种二进制前缀编码,其从叶子到根(自底向上)逆向求出每个字...原创 2020-04-17 16:58:35 · 1875 阅读 · 0 评论 -
算法笔记---合并果子(堆)
题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子...原创 2020-04-16 17:32:37 · 816 阅读 · 0 评论 -
算法笔记---序列合并
题目描述有两个长度都为N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个。输入:第一行一个正整数N(1 <= N <= 100000)。第二行N个整数Ai,满足Ai <= Ai+1且Ai <= 109第三行N个整数Bi,满足Bi <= Bi+1且Bi <= 109输出:输出仅有一行,包含N个整数,从小到大输出这N个最...原创 2020-04-16 16:26:39 · 477 阅读 · 0 评论 -
算法笔记---好朋友
题目描述有一个叫作“数码世界”的奇异空间,在数码世界里生活着许许多多的数码宝贝,其中有些数码宝贝之间可能是好朋友。并且数码世界有两条不成文的规定:第一,数码宝贝A和数码宝贝B是好朋友等价于数码宝贝B和数码宝贝A是好朋友。第二,如果数码宝贝A和数码宝贝C是好朋友,而数码宝贝B和数码宝贝C也是好朋友,那么A和B也是好朋友。现在给出这些数码宝贝中所有好朋友的信息,问:可以把这些数码宝贝分成多少组...原创 2020-04-15 19:38:19 · 215 阅读 · 1 评论 -
算法笔记---并查集
并查集是一种维护集合的数据结构,它的名字中“并”“查”“集”分别取自Union(合并)、Find(查找)、Set(集合)这3个单词。也就是说,并查集支持下面两个操作:①合并:合并两个集合。②查找:判断两个元素是否在一个集合。那么并查集是用什么实现的呢?其实就是用一个数组:int father[N];其中fahter[i]表示元素i的父亲结点,而父亲结点本身也是这个集合内的元素(1≤i...原创 2020-04-15 17:40:46 · 185 阅读 · 0 评论 -
算法笔记---平衡二叉树(AVL)
平衡二叉树由前苏联两位数学家GM.Adelse-Velskil和E.M.Landis提出,因此一般也称作AVL树。AVL树仍然是一棵二叉查找树,只是在其基础上增加了“平衡”的要求。所谓平衡是指,对AVL树的任意结点来说,其左子树与右子树的高度之差的绝对值不超过1,其中左子树与右子树的高度之差称为该结点的平衡因子。#include<iostream>#include<algo...原创 2020-04-14 20:29:44 · 240 阅读 · 0 评论 -
算法笔记---二叉查找树的性质
题目描述给出N个正整数来作为一棵二叉排序树的结点插入顺序,问:这串序列是否是该二叉排序树的先序序列或是该二叉排序树的镜像树的先序序列。所谓镜像树是指交换二叉树的所有结点的左右子树而形成的树(也即左子树所有结点数据域大于或等于根结点,而根结点数据域小于右子树所有结点的数据域)。如果是镜像树,则输出YES,并输出对应的树的后序序列;否则,输出NO。输入样例178 6 5 7 10 8 11输...原创 2020-04-13 15:27:42 · 189 阅读 · 0 评论 -
算法笔记---构造二叉树
题目描述给出一棵二叉树的后序遍历序列和中序遍历序列,求这棵二叉树的层序遍历序列。输入样例:中序:{1,2,3,4,5,6,7};后序:{2,3,1,5,7,6,4};输出样例:层序:{4,1,6,3,5,7,2};题目解析:将树看成三部分根结点左子树右子树然后:因为后序遍历的最后一个结点为根结点所以从中序遍历中找到根结点,然后分别构造中序的前半数组和后序的前半数组...原创 2020-04-11 16:36:25 · 169 阅读 · 0 评论 -
算法笔记---求迷宫中起点到终点的最少步数
题目描述给定一个n*m大小的迷宫,其中“ * ”代表不可通过的墙壁,而“ . ”代表平地,S表示起点,T代表终点。移动过程中,如果当前位置是(x,y)(下标从0开始),且每次只能前往上下左右(x,y+1)、(x,y-1)、(x-1,y)、(x+1,y)四个位置的平地,求从起点S到达终点T的最少步数。输入数据:5 5 // 表示5行5列. . . . . //迷宫信息. * . * ....原创 2020-04-09 14:08:49 · 908 阅读 · 0 评论 -
算法笔记---求给定矩阵中“块”的个数
题目描述给出一个n*m的矩阵,矩阵中的元素为0或1。称位置(x,y)与其上下左右四个位置(x,y+1)、(x,y-1)、(x+1,y)、(x-1,y)是相邻的。如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。例如:0 1 1 1 0 0 10 0 1 0 0 0 00 0 0 0 1 0 00 0 0 1 1 1 01 1 1 ...原创 2020-04-09 10:35:13 · 519 阅读 · 0 评论 -
算法笔记---从N个整数中选取K个数的最优方案
题目描述给定N个整数(可能有负数),从中选择K个数,使得这K个数之和恰好等于一个给定的整数X;如果有多种方案,选择它们中元素平方和最大的一个。数据保证这样的方案唯一。例如,从4个整数(2,3,3,4}中选择2个数,使它们的和为6,显然有两种方案{2,4}与{3,3},其中平方和最大的方案为{2,4}。解题思路:使用深度搜索遍历来实现,每次有两种选择:将当前数字放入已选序列不讲当前数字放入...原创 2020-04-07 22:06:52 · 3624 阅读 · 1 评论 -
算法笔记---背包问题
题目描述有n件物品,每件物品的重量为w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品重量和不超过容量V的前提下,让背包中物品的价值之和最大,求最大价值。(1≤n≤20)输入数据5 8//5件物品,背包容量为83 5 1 2 2//重量分别为3 5 1 2 24 5 2 1 3//价值分别为4 5 2 1 3输出数据10使用深度优先搜...原创 2020-04-07 21:23:24 · 244 阅读 · 0 评论 -
算法笔记---用栈计算表达式
题目描述读入一个只包含+,-,x,/,(,)的非负整数计算表达式,计算该表达式的值输入格式测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出格式对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 样例输入30 / 90 - 26 + 97 - 5 - ...原创 2020-04-06 16:52:24 · 344 阅读 · 0 评论 -
算法笔记---求n!中有多少个质因子p && 组合数
题目描述n!表示n的阶乘,并且有n!=1×2x…×n成立。求n!中有多少个质因子p。这个问题是什么意思呢?举个例子,6!=1×2×3×4×5×6,于是6!中有4个质因子2,因为2、4、6中各有1个2、2个2、1个2;而6!中有两个质因子3,因为3、6中均各有1个3。解题思路:遍历1~n中的每个数字,各个数字有多少个p因子,然后加起来即可//求n!中有多少个质因子pint cal(int...原创 2020-03-31 16:09:47 · 771 阅读 · 0 评论 -
算法笔记---大整数
题目描述对一道A+B的题目,如果A和B的范围在int范围内,那么相信大家很快就能写出程序。但是如果A和B是有着1000个数位的整数,恐怕就没有办法用已有的数据类型来表示了,这时就只能老实去模拟加减乘除的过程。解题思路:使用数组来存储整数字符串,然后低位存放低位,高位存放高位在进行大整数加减运算的时候,若出现负数,则在最后输出的时候,添加负号即可#include<iostream&...原创 2020-03-29 20:27:30 · 149 阅读 · 0 评论 -
算法笔记---质因子分解
题目描述所谓质因子分解是指将一个正整数n写成一个或多个质数的乘积的形式,例如6=2×3,8=2×2×2,180=2×2×3×3×5。或者我们也可以写成指数的形式,例如6=2x3,8=2^3。解题思路:先求出素数表然后分别对输入的n进行取余,若等于0,则进行循环累加该因子的个数。#include<iostream>using namespace std;const in...原创 2020-03-28 16:27:55 · 472 阅读 · 0 评论 -
算法笔记---数素数
题目描述令P表示第i个素数,现任意给两个正整数M≤N≤10,请输出PM到P的所有素数。输入格式:输入在一行中给出M和N,其间以空格分隔。输出格式:输出从PM~PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。样例:输入:5 27输出:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8...原创 2020-03-27 20:57:32 · 173 阅读 · 0 评论 -
算法笔记---最大公约数和最小公倍数
最大公约数:正整数a与b的最大公约数是指a与b的所有公约数中最大的那个公约数,例如4和6的最大公约数为2,3和9的最大公约数为3。一般用gcda,b)来表示a和b的最大公约数。求解最大公约数常用欧几里得算法(即辗转相除法)。//最大公约数int gcd(int a,int b) { if (a < b) { int temp = a; a = b; b = temp;...原创 2020-03-26 20:15:05 · 287 阅读 · 0 评论 -
算法笔记---说反话
题目描述给定一句英语,要求编写程序,将句中所有单词按颠倒顺序输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子测试样例:输入:Hello World Here...原创 2020-03-26 17:50:40 · 198 阅读 · 0 评论 -
算法笔记---回文串
题目描述读入一串字符,判断是否是“回文串”。“回文串”是一个正读和反读都一样的字符串,比如“ level”或者“noon”就是回文串。输入格式:一串字符串,长度不超过255输出格式:如果是“回文串”,输出“YES”,否则输出“NO”。样例:输入:12321输出:YES#include<iostream>using namespace std;#include...原创 2020-03-26 12:30:01 · 198 阅读 · 0 评论 -
算法笔记---D进制的A+B
题目描述输入两个非负十进制整数A和B (<=2^30 - 1)以及D(进制数),输出A+B的D(1<=D<=10)进制数输入格式:在一行中依次给出三个整数A、B和D(进制数)输出格式:A+B的D进制数样例:输入:123 456 8输出:1103解题思路:先把A+B的十进制求得,进而转换为D进制,可以使用除基取余来实现求D进制#include<io...原创 2020-03-26 12:08:57 · 270 阅读 · 0 评论