- 博客(13)
- 收藏
- 关注
原创 大作业——圆排列问题
1,问题圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列2,解析主要利用回溯法来解决该问题。r[n]: 记录每个圆的半径x[n]: 记录每个圆的横坐标minlen: 圆排列最小长度函数 center(n): 求第n个圆的横坐标函数 compute(): 计算当前r[n]的排列的长度backtrack(t): t<n, 遍历排列树t层,更新minlen.3,设计double center(int t)//得到每个圆的圆心坐标
2020-06-15 19:47:29
501
原创 作业12——图m着色问题
1,问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”2,解析图的m着色问题:思路:采用分支界限的方法,个人理解就是对图进行DFS,不过需要抽象成树的形式。首先确定着色问题的解空间,对于一个点来说,对每个结点有m种染色情况,所以就可以抽象成一棵m叉树.具体实例:color[]:结点染几号颜色;OK:是否存在染色方案3,设计int n, k, m;//n:结点数
2020-05-31 13:06:04
564
原创 作业7——动态规划之投资问题
1.问题设m元钱,n项投资,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,…,n.问:如何分配这m元钱,使得投资的总效益最高?假设分配给第i个项目xi元钱,即求MAX(Σ1->i fi(xi));2.解析Fk(x)表示x万元投给前k个项目的最大收益;Fk(x) = MAX{(fk(xk) + Fk-1(x - xk)},k=2,3,…,n.F1(x)=f1(x)...
2020-05-22 13:53:49
418
原创 作业6——分治算法求数组第k小元素
1.问题分治算法求数组第k小元素2.解析将输入的数组分成n/5组元素,剩余的元素舍弃,取出每组的中项(即第三个)放在M[]中,取出M的中项mid(排序后取出中项),将原数组中所有数与mid比较,根据比较结果将原数组分成三组,再根据k值与三个数组大小的比较去相应的数组找要求的元素。3.设计void sort// 排序小规模的数组范围void Select( input, size , k...
2020-05-22 13:53:42
1844
原创 作业5——分治算法之最近对问题
1,问题最近对问题2,解析令P为笛卡尔平面上n>1个点构成的集合。简单起见,假设集合中每个点都不一样。我们还假设这些点是按照其x周坐标升序排列的。为了更加方便,我们还按照点的y轴坐标在另一个列表中进行升序排列,分别记为Px,Py。当2<=n<=3时,通过蛮力求解出D。当n>3时,可以利用点集在方向上的中位数mid,在该处作一条垂线,将点集分成大小分别为ceil(n/2...
2020-05-22 13:53:35
299
原创 作业4——二分归并排序算法
1.问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k;2.解析对一个数组利用递归拆分成n/2个子序列,比较排序后再归并成原数组。3.设计void mergesort(first , last){mergesort(first, mid);mergesort(mid+1, last);mergearray(first,mid,last);}voi...
2020-05-22 13:53:27
208
原创 作业三——两种方法判断一个有序数组是否存在x
1.问题两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。2.解析方法1:直接遍历查找,因为可能存在多个值为x的数在数组中,所有预先开一个j[]数组接收下表,最后组个输出j[];方法2:折半查找发 折半查找到下标后,输出该点,另写两个函数checkleft和checkright检查该点左右值是否与该点相同,若相同输出并递...
2020-05-22 13:53:20
861
原创 作业2———Floyd Dijkstra 算法求最短路径
1.问题Floyd 和 dijkstra算法求无向图中两点间的最短距离。2.解析Floyd:输入一个加权连通图,遍历图中每个点,尝试图中每两个点能否通过另一点得到更短的距离,循环结束新生成的图为每两个点之间的最短距离。Dijkstra:输入一个加权连通图和一个起始点start,已访问点集visit[]={false},起始点已访问,第一次循环从其它点中找到距离起始点最近的点x,记录其它点...
2020-05-22 13:53:11
258
原创 作业1 ———Prim和Kruskal算法求最小生成树
1问题Prim算法和Kruskal算法构造最小生成树的过程和算法实现2解析Prim:在一个加权连通图中,选取一个起始点,在所有相邻点中选取一个权值最小的点与起始点构成点集,在不形成环的情况下重复上述操作,使所有点进入该点集,形成Prim最小生成树。Kruskal:在一个加权连通图中,Graph[v]是该图的加权边集,循环:从该集合中最小的权值边开始遍历,直到每个顶点都在同一连通分量中(if...
2020-05-22 13:52:55
1259
原创 作业11——贪婪算法之最优前缀码
1,问题代码(码字):Q{001,00,010,01}表示字符a,b,c,d同一序列:0100001产生两种译码(歧义):01 00 001;010 00 01二元前缀码:任何字符的代码不能作为其它字符代码的前缀利用二元前缀码译码:从第一个字符开始依次读入每个字符(0 || 1),如果发现读到的子串与某个码字相等,就将这个子串译作相应的码字;然后从下一个字符开始继续这个过程,直到读完输入的的字符串为止。二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个祖父的前缀码看作根到这片叶子的一条路径
2020-05-18 19:26:25
361
原创 作业10——贪婪算法之相容问题
1,问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和截至时间。如果任何两个活动都不能同时举行,问何时选择这些活动,从而使得被安排的活动数量达到最多。2,解析建模:定义两个活动相容:两个活动不冲突,设si , fi 为活动i的开始时间和截至时间,若活动i 和 j 相容,则si > fj 或 fi < sj问题即可变为求活动集合S的最大两两相容的子集。思路:把活动集合按...
2020-05-02 12:51:53
241
原创 作业9——动态规划之LCS问题
1,问题求两个已知序列的最长公共子序列,一个序列的子序列满足下标严格递增。2,解析如果Zk 是 Xi 和 Yj 的最长公共子序列(下标表示该序列的长度)则有以下三点规则:(1) 如果X[i] = Y[j],那么Z[k] = X[i] =Y[j],Zk-1 是 Xi-1 和 Yj-1 的最长公共子序列;(2) 如果X[i] ≠ Y[j],Z[k] ≠ X[i] ,那么Zk ...
2020-04-22 14:20:37
233
原创 作业8——矩阵链乘法
1.问题设A1,A2,…,An为n个矩阵的序列,其中Ai为Pi-1 x Pi 阶矩阵,这个矩阵链的输入用向量P = <P0,P1,…,Pn>给出。给定向量P,确定一种乘法次序,使得基本运算总次数最小。2,解析Ai-j : 表示矩阵链相乘的子问题Ai Ai+1 … Aj.m[i…j] : 表示得到乘积Ai…j 所用的最少基本运算次数 ;当i = j , m[i…j]=0;当...
2020-04-17 14:30:24
161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人