自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 作业(大)_圆排列问题

1. 问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。2. 解析和图的m着色方法类似,这题也可以用回溯方式解决:根节点是没有意义的,假设有四个圆,那么第一层我们有四个节点,表示第一个圆我们选择哪一个;可以看到第二层就只有三个节点了,因为我们在第一层选取过了一个圆;这样我们就可以进行搜索了,设已排列的序列为p[]当前圆加入时,我们计算他和前面所有圆相切时x坐标的最大值,此时序列长度为p[1]的半径+当前圆的半径+当前圆的x坐标;若是相加的和大

2020-06-16 21:50:04 302

原创 作业12_图的m着色问题

1. 问题给定无向连通图G=(V, E)和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。输出所有着色法使G中相邻的两个顶点有不同的颜色2. 解析根据各个节点着色情况构建一颗树,我们可以简单的知道叶子节点的个数为n*m个;但是树的有些分支我们在中途就可以知道是不合理的,所以在遍历树的时候我们在每个节点加以判断;若是当前准备赋予的颜色同当前节点相邻的节点已经赋予过了,直接返回;没有,赋予颜色,搜索下一个节点若成功到达叶子节点,输出这组着色;3. 设计输入数据,插入到邻接链表

2020-06-16 14:35:43 301

原创 作业11_最优前缀码

1. 问题输入字符序列以及每个字符使用频率,利用哈夫曼树构造他们的前缀码(前缀码:字符出现次数不同,用不同位数的编码来压缩文章)2. 解析哈夫曼编码:https://baike.so.com/doc/1481780-1566877.html?from=179941&sid=1566877&redirect=search3 . 设计两个结构体,A用来存储树节点B存储节点链表:输入数据存储到A结构体指针数组,随后按照权值排序;(1)将数组中的指针插入到B结构体组成的链表中

2020-06-16 10:21:34 161

原创 作业10_相容问题

1. 问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多;2. 解析这题可以直接用简单的贪心解决;我们可以按照开始时间、截止时间、占用时间去进行贪心;首先我们证明开始时间、占用时间贪心是不合理的:此图最大数量为3:A、B、E若采用按开始时间贪心,结果为C若采用按占用时间贪心,结果为D,E只有采用按截止时间贪心,才可以得到我们想要的结果;接下来我们设,存在一个序列A[],按照截止时间贪

2020-06-15 22:38:08 202

原创 作业9_LCD问题

1. 问题给定两个序列,求两个序列的最长公共子序列;2. 解析首先想到的是穷举算法,两个序列的长度为n,m。他们的子序列个数是2n和2m,这时我们算法的时间复杂度便是O(2n*2m),十分庞大;动态规划方法:对于任意两个序列,设他们的长度为n,m两序列长度为0时lsd[m,n]=0当两序列末尾元素相等,我们可以轻易的理解他们的lsd最后一个元素就是这个元素,此时lsd[m,n]=lsd[m-1,n-1]+1;当末尾元素不相等时,我们可以知道最大子序列必然在m-1或n-1中,因此此时的lsd[m

2020-06-15 17:43:19 178

原创 作业8_矩阵链乘法

1. 问题给定n个矩阵的链<A 1 ,A 2 ,…,A n >,通过适当的划分矩阵链乘法顺序使得相乘次数最少2. 解析可以通过动态规划自小而多推导出最少的相乘次数;先定义一个二维数组m[][],这个数组的每个坐标m[a]b意味着在a->b的范围中的最小相乘次数;我们从最底下开始考虑,当a==b时,乘数为0初始化数组m[a][a]=0;a!=b时有动态规划方程m[a][b]=min{m[a][k]+m[k+1][b]+pa-1pkpb}(k=a->b)在逐渐加大ab间距循

2020-05-26 00:32:33 195

原创 作业7_投资问题

1. 问题2. 解析这里可以采用动态规划的思想,我们建立表格a存储状态,横坐标为累计投资x,纵坐标为项目i。有函数g(x)i表示当前格最大收益;当i为1时我们有g(x)1=f(x)1接下来我们动态规划,有g(x)i=max(y=0->x){g(y)i-1+f(x-y)i-1}就可以逐步画出整个表格3. 设计伪函数:三个二维数组a,b,c;输入表格存入a;用a的第一列初始化b的第一行;公式循环调用逐行更新数组b,同时记录对应行列最大利润时的对于这个项目投资数值4. 分析时

2020-05-25 22:48:15 247

原创 作业6_第k小问题

1. 问题给定数组,找出数组中第k小的元素。2. 解析先是简单的分治思想:随便取数组中的一个数作为基准,按照快排思想,小于这个数的放在他的前面,随后比较这个数的下标和k的值决定,两者相等该值即为k小值,否者>时分治查找前半部分,<时查找后半部分;这个样子复杂度最坏可能到达n^2随后我们深入,通过巧妙的方式选取这个基准提高效率:将数组划分,5个一组,不足的舍掉:计算每组的中值存为s,计算s的中值。将这个中值作为基准,这时重复上面的分治,效率便可以明显提高;3. 设计伪函数:A

2020-05-25 21:58:46 130

原创 《分治求第k小》

1. 问题给定数组,找出数组中第k小的元素。2. 解析用快排的步骤进行分治,找到一个标记元素进行分割,使得这个元素之前的元素都小于他,这个元素后面的元素都大于他,通过下标我们就可以知道k在这个元素前面还是后面,随后递归缩小范围3. 设计伪函数:4. 分析时间复杂度T[n]=O(nlogn)5. 源码https://github.com/Bcxx/task_code/tree/ma...

2020-04-06 23:58:19 260

原创 《最近对问题》

1. 问题平面上的n个点,找出其中相距最近的两个点2. 解析一种方式是暴力,用n^2的复杂度遍历所有的情况即可找出这对点另外一种就是分治:点按x升序排列采用二分递归的方式拆分点的集合,知道集合中只剩两个点停止递归,返回两点距离。显然递归的返回值有两个,左最小和右最小,此外还有第三种情况,一个点在左集合,一个点在右集合,取左右最小值保存为x这个时候我们把范围缩小到中点的±x范围暴力一下就可...

2020-03-31 23:51:20 283

原创 归并排序

1. 问题对一个长度为n的数组进行归并排序;2. 解析通过递归的方式将数组分成一个个元素,返回的时候归并两个有序数组。重复这个动作,最后整个序列就是有序的了;3. 设计递归函数(int l左边界,int r右边界){Int mid=(l+r)/2//中点若l=r:return;递归(l,mid);递归(mid+1,r); //归并左右序列;For()循环将左序列放入临时数组d...

2020-03-24 23:59:54 372

原创 有序数列检索算法(遍历查找、二分查找)

1. 问题查找升序数组中的元素x并返回其下标;若不存在则返回0;2. 解析1、遍历查找2、二分查找3.设计1、遍历数组中所有的下标,每个数字都判断他是否和x相等;2、用函数递归的方式,每次二分当前长度,通过中间值判断x在左边数组还是右边数组;将判断数组再次传入,直到最后数组长度为一时,若为x则返回下标,若不为x,则返回0.4.分析1、 Int date=-1;for(int i...

2020-03-17 23:40:05 644

原创 Dijkstra最短路算法

1. 问题求一个图中单个源到所有点的最短距离;2. 解析开始的时候所有的点都各自为一个集合;从确定的源点开始归并集合;1、 找到里此集合最近的一个点;2、 将这个点归并进这个集合,确定源点到这个点的最短路径;3、 重复1.2直到所有的点都在一个集合之中;3. 设计Int date[100],a[100],d[100][100];//存储当前在集合中的点和图初始化a数组为无穷,a[...

2020-03-10 23:55:32 83

原创 Floyd最短路算法

1. 问题求出一个图中任意两点间最短的距离;2. 解析两点间距离只有两种情况:1、 两点直接相连就是最短距离2、 两点之间经过某些点使得路径最短可以得到这样的式子:d[i][j]=min(d[i][j],d[i][k]+d[k][j]);因为经过的不止一个点;我们对所有点进行遍历,来更新这个点作为中转点是各个点间的最短距离。3. 设计Int d[100][100]\存储路径初始...

2020-03-10 21:54:21 81

原创 C语言中的&

最常用的方式是取地址int *p,a=3;p=&a;cout<<*p;输出为3;另一种用法:int a=3;int &p=a;(这个时候p只是一个mark;)p=5;cout<<a;输出为5;

2020-03-06 16:27:09 194

原创 最小生成树(prim,kruskal)

问题描述在给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得w(T) 最小,则此 T 为 G 的最小生成树。(一) 克鲁斯卡尔算法:对边进行排序,从最小的边开始进行贪心,每个点视为一个集合,若是边两端不是同一个集合之中,将两个集合合并。直到剩下一个集合,即为最小生成树。...

2020-03-03 23:44:11 135

空空如也

空空如也

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

TA关注的人

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