自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法分析与设计作业12图的m着色问题

1.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2. 解析这边我们可以通过回溯算法求出结果,算法基本步骤分为三步:从无向图的第一个节点开始,从第一个颜色开始通过和第n个节点相邻的节点的颜色,来判断这个颜色是否合法,如果有该节点且颜色有重复,都不符合要求,否则继续检验后序的位置。如果该节点所有颜色都不符合要求,则回溯到前一节点,继续进行判断。如果判断到最后一

2021-05-31 16:55:12 462

原创 算法分析与设计作业11最优前缀编码

1.问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码。2.解析构建一个最优前缀码的步骤如下:开始先初始化n个单节点的树,每个字符的概率记在树的根中,用作树的权重。找到两棵权重最小的树,把它们作为新树中的左右子树,并把它们的权重和记作新的权重记录在新树的根中。重复第二步直到只剩一颗单独的树。3.解析void CreateHufmanTree(HuffmanTree& hT)//构造有n个权值(叶子节点)的哈夫曼树{ int n

2021-05-26 21:25:01 286

原创 算法分析与设计作业10装载问题(0-1背包问题)

1.问题整数规划问题,0-1 背包问题2.解析解该类问题的思路是轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止.在这之前我们首先明白一个定理:对于任何正整数 k,算法(轻者先装)对 k 个集装箱的实例得到最优解以下为该定理的证明:在这里是通过数学归纳法来证明的。(1)k=1,只有 1 个集装箱,其重量小于 C。任何装法都只有一种方式,因此都是最优解,因此轻者先装也是最优解。(2)归纳假设:假设算法对于规模为 k 的输入都能得到最优解。考虑规模为 k+1 的输入,N={1,2,

2021-05-17 16:03:09 308

原创 算法分析与设计作业9实现LCS算法和背包算法

1.问题Lcs:给定序列X=<x1,x2,…,xm>,Y=<y1,y2,…,yj>,求X和Y的最长公共子序列。背包问题:有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?2.解析Lcs:Xi=<x1,x2,…,xi>Yj=<y1,y2,…,yj>Zk=<z1,z2,…,zk>如果Zk是Xi和Yj的最长公共子序列(1)xi = yj,那么zk = xi = yj,Zk-1是Xi-1

2021-05-10 23:41:08 187

原创 算法分析与作业8矩阵链乘法的实现及演示

1.问题如:P=<5,6,7,8>,则A1:5×6,A2:6×7,A3:7×8,有两种结合次序:(A1A2)A3:5×6×7+5×7×8=490   A1(A2A3):5×6×8+6×7×8=5762.解析解决矩阵链乘法的方法有两种,分别是蛮力法与动态规划法。蛮力法:     枚举所有可能的乘法次序,针对每种次序计算基本运算的次数,从中找出具有最小运算次数的乘法次序,每一种乘法次序对应了一种在

2021-04-26 23:22:01 659

原创 算法分析与作业7投资问题

1.问题设 m 万元钱,n 项投资,函数 表示将 x 万元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这 m 元钱,使得投资的总效益最高?2.解析根据题意可以得知这是一个很明显的dp问题,对于这样的问题我们通常都有一个模板来解决,通过两个证明推导即可求出结果:首先要推出它的递推公式,设fk(x)表示 x 万元投给前 k 个项目的最大效益,k=1,2,…,n,x=1,2,…,m。如下图所示:其中第k步前后共分配x万元,分配给第k个项目为xk,总计x-xk万元分配给前k-1个

2021-04-25 16:09:22 509

原创 算法分析与作业6运用特定分治策略在一组数中选出第k小元素

1.问题运用特定分治策略在一组数中选出第k小元素2.解析先在这组数中找出一个数m,以m为标准对这个数组进行拆分,将比m小的数都放入S1中,比m大的数都放入S2中,设一个数k=|S1|+1。若k=|S1|+1,那么当前数组的中位数就是要找的第k小的数。若k<=|S1|,那么当前的问题就可以归纳为在S1中找到第k1小的问题,此时k1=k。若k>|S1|+1,当前问题就可以归纳为在S2中找到k2位置上的书的问题,此时k2=k-|S1|-1.具体实现方法为:将数组分为五个一组,最后不够

2021-04-19 16:38:42 166

原创 算法分析与设计作业5最近点对问题

1.问题在二位平面内,给定n(n>=2)个点,找出这n个点中两两之间的最小距离。2.解析当2<=n<=3时,通过暴力的方法就可以求出结果。当n>3时,就需要通过分治的方法求解了,具体方法为利用点集在x轴方向上的中位数m在该处做一条垂线,将这个点集分为[n/2]和[n/2]的两个子集P1和Pr,使n/2个点落在垂线的左边,另外n/2落在右边,接着通过递归的方法求解子问题P1和Pr中的最近点对的问题的解,最后整个点集的最近点对就是P1和Pr的最近点对。# 3.设计#in

2021-04-12 16:33:51 152

原创 算法分析与设计4-1二分归并排序:对n个不同的数构成的数组A[1..n]进行排序

1.问题   二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析   二分归并排序是一种分治算法,其大体思想就是先将一个数组A不断通过二分拆解,直至不能拆解为止,然后将拆解出来的数两两组合排序合并,通过不断的循环最后得到一个排序好的数组。   所以总的来说,二分归并算法分为两步:拆解:将整个数组通过二分的方式拆解出n/2个子数组。归并:通过两两组合的方式把两个有序的子数组合

2021-03-29 16:26:14 475

原创 算法分析与设计3-1写出两种检索算法:在一个排好序的数组T[1..n]中查找x

1.问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2.解析顺序查找:这是最简单也是最先想到的算法,但是它的缺陷也很明显,如果要找到的数在数组的末尾,那么要找到这个数就必须遍历一遍数组,当这个数组很大时,找到这个数所要花费的时间是我们无法接受的。二分查找:相较于顺序查找,二分查找是我们所学过的较为快速的一种查找方式,它的操作步骤也很简单,首先将这个数组分为两部分,取一个中间值与要查找的值相比较,如果比要查找的值值大那就在左

2021-03-22 15:55:05 269

原创 算法分析与设计实践作业2-2采用Dijkstra算法求由顶点a到顶点h的最短路径

1.问题对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。2.解析其实Dijkstra算法和Floyd算法类似,但它能解决成环的问题。作为最基础的部分与Floyd相同,都需要定义一个二维数组来存放各点之间的距离。接下来Dijkstra算法总的来说分为4步:首先定义两个集合:已知最短路径点p集合和未知最短路径点q集合,如果一个点在p集合中,就说明这个点的最短路径已经确定了,反之则说明还未被确定。q集合最开始的值便是所有顶点。选择一个点s作为源点,定义一个源点到它自身的距离为0,再

2021-03-15 17:49:56 1221

原创 算法分析与设计实践作业2-1用Floyd算法求解图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵

1.问题用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)2.解析面对上面这幅图,我们要做的是求出个顶点之间的最短距离。那么首先我们要做的讲就是将上面这幅图转化为一个二维矩阵,定义一个顶点到它自身的距离为0,如果两个顶点之间没有直接相邻的路线,则定义为无穷大。那么根据定义我们可以由上面那幅图得出下面这个二维矩阵。根据生活经验,如果我们没有直接过去的路,我们可以选择经过一个点绕过去,这也就是Floyd算法的核心思想,就那上面那幅图来说,对

2021-03-15 17:37:51 414

原创 算法分析与设计实践作业1-2采用Kruskal算法构造最小生成树

1.问题采用Kruskal算法构造最小生成树2.解析与Prim算法相比,Kruskal算法的思路就很简单,只需要每次找图中权值最小的边,将边连接的两个顶点加入最小生成树集合中,但不允许闭合回路情况的出现。直至n个顶点的连通图出现n-1条边为止。以下为详细步骤:3.设计void Kruskal() { int x = 0, y = 0;//x代表边数,y代表最小生成树 init();//初始化 sort(e, e + m);//对边进行从小到大的排序 for (int i = 0;

2021-03-14 18:03:02 296

原创 算法分析与设计实践作业1-1采用Prim算法构造最小生成树

1.问题采用Prim算法构造最小生成树2.解析我们已知一个图,对这样一个图通过Prim算法来构造它的最小生成树,我们通常需要进行以下4步操作:定义两个集合V,E。对其进行初始化操作,其中V集合中随即设置一个初始点,在本例子中设置V1为初始点,E集合初始为空集和。在集合E中选取权值最小的边<u, v>,其中u为集合V中的元素,而v不在V集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一)。将点v加入V集合中,边<u,v>加入集合E中

2021-03-14 16:45:55 701

原创 HDU2544 最短路(Dijkstra模板题)

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B&l

2020-07-30 19:20:59 189

原创 2270与班尼特·胡迪一起玩世纪佳缘3题解

这题很简单,注意好兑换奖品的优先次序即可,即:先兑换1000的“纵江湖”称号,再兑换1000的“侠万里”称号,再兑换600的“遗失的美好”,最后兑换200的“海誓山盟“。以下为ac代码:#include<stdio.h>int main(){ int T,sum, num, t, i; scanf("%d",&T); while (T--) { sum = 0; //注意归零 for (int i = 1; i <= 7; ++i) ...

2020-07-08 14:26:17 724

原创 2019字符串之zz喜欢回文串题解

题意就是给出几个字符串,判断它是否是回文串。回文串指的是正读和反读都一样的字符串,如aba,abba等。 所以我们的思路就是从两边往中间遍历,如果相同就继续遍历,不相同则直接跳出。如果把所有的遍历完或者只剩下一个字符,那么它就是回文串。代码如下:#include<stdio.h>#include<string.h>int pend(char s[],int length);int main(){ int T; char s[205]; scanf("%

2020-07-01 17:23:33 971

原创 2625与小明一起回文串题解

这道题的意思大概就是对于一个字符串能否通过删除一个字符或者不删除是这个字符串变为一个回文串。回文串的判定很简单,以下这段代码就是简单的回文串判定。大致思路就是从两头往中间遍历,如果相同就继续,不同就跳出。int check(char s[],int begin,int end){ while(begin<end) { if(s[begin]!=s[end])return 0; begin++; en.

2020-06-30 14:18:48 358

空空如也

空空如也

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

TA关注的人

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