
算法
余丁
这个作者很懒,什么都没留下…
展开
-
算法-大作业-圆排列问题
1.问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。2.解析圆的摆放位置不同,得到的结果可能不同,所以这是一个排列问题,在回溯里面需要添加全排列的代码。要得到圆排列的长度,我们需要知道最右边圆心的横坐标,+它的半径+第一个圆的半径。通过下图可知,第n个圆的圆心横坐标=与他相切的圆的横坐标+2*sqrt(r[n]*r[n-1])。因为当前圆可能和之前某一个圆相切,不一定就和前一个相切,所以需要使用for循环。通过compute函数找到排列的最左端和原创 2020-05-27 21:03:48 · 2482 阅读 · 2 评论 -
算法-作业12-图的m着色问题
1.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析设G有n个顶点,将顶点编号为1,2,…,n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2,…,m,结点<x1,x3,…,xk>(x1,x2,…,xk属于{1,…,m},1<=k<=n)表示顶点1的颜色x1,顶点2的颜色x2,…顶点k的颜色xk。3.设计1)在填写每一个顶点的颜原创 2020-05-26 19:41:54 · 753 阅读 · 0 评论 -
算法-作业11-最优前缀编码(哈夫曼树及编码)
1.问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码。2.解析哈夫曼算法:1)初始化n个单节点的树,每个字符的概率记在树的根中,用作树的权重。2)找到两棵权重最小的树,把它们作为新树中的左右子树,并把权重和记作新的权重记录在新树的根中。3)重复第二步直到只剩一颗单独的树。3.设计Huffman算法:输入:C={x1,x2,…,xn}字符集,每个字符的频率f(xi),i=1,2,…,n.输出:Q1.n<-|C|2.Q<-C原创 2020-05-12 21:08:17 · 1055 阅读 · 0 评论 -
算法-作业10-相容问题
1.问题有n项活动申请使用同一个礼堂,每项活动都有一个开始时间和一个结束时间,如果两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。2.解析把活动按照截止时间从小到大排序,从前往后挑选,只要与前面的内容相容,就把该活动选入。3.设计A[1]=true; int j=1; for (int i=2;i<=n;i++) { if (s[ i ...原创 2020-04-28 22:52:37 · 774 阅读 · 0 评论 -
算法-作业9-LCS算法
1.问题X 和 Z 是两个序列,其中X = <x1,x2,…,xm>,Z = <z1,z2,…,zm>如果存在 X 的元素构成的按下标严格递增序列 ,使 ,那么 Z 是 X 的子序列,Z 含有的元素个数,称为子序列的长度。2.解析递推关系:C[i,j] 表示的是Xi和Yj的最长公共子序列。i是X长度,j是Y的长度,C[i,j]是Z的长度3.设计4.分析构...原创 2020-04-23 12:24:13 · 192 阅读 · 0 评论 -
算法-作业8-矩阵链乘法
1.问题设 A1,A2,……,An为n个矩阵的序列,其中Ai为p(i-1)*pi阶矩阵,这个矩阵链的输入用向量p=<p0,p1,……,pn>给出。2.解析假定,最后一次相乘发生在矩阵链A(i…k)和A(k+1)-j之间,即m[i…j]=min(i<=k<j){m[i,k]+m[k+1,j]+P(i-1)PkPj}满足优化原则,即m[i…j]最小值时,m[i,k]...原创 2020-04-14 20:29:15 · 197 阅读 · 0 评论 -
算法-作业7-动态规划之投资问题
1.问题2.解析1.递推公式设Fk(x)表示x万元投给前k个项目的最大效益,k=1,2,…,n,x=1,2,…,m1)第 k步,前后共分配x万元,分配给第k个项目为xk万元;2)分配给前k-1个项目x-xk万元。2.优化原则:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。已知:这个序列 L1 是最优决策序列那么:这个序列任何子序列本身一定是相...原创 2020-04-07 19:45:26 · 831 阅读 · 0 评论 -
算法-作业6-选第k小元素:特定分治策略
1.问题在给出的n个数中,找到第k小的数。2.解析以S中的某个元素m作为划分标准,将S划分为两个子数组S1和S2,把这个数组中比m小的都放入S1的数组中,数组S1的元素个数是|S1|个;把这个数组中比m*大的都放入S2的数组中,数组S2的元素个数是|S2|个。若k<|S1|,则原问题归纳为在数组S1中找第k小的子问题。若k=|S1|+1,则m*就是要找的第k小元素。若k>...原创 2020-03-31 20:23:10 · 650 阅读 · 0 评论 -
算法-作业5-最近对问题
1.问题最近点对问题,即平面上有n个点P1,P2,…,Pn,n>1,Pi的直角坐标为(Xi,Yi),i=1,2,…,n.求距离最近的两个点及他们之间的距离。2.解析分治法总体来说分为三个步骤:划分、求解子问题、合并这题的思路是,将集合S分为左右两个子集S1和S2,两个子集分别含有n/2个点,先在每个子集中递归地求其最接近的点对,再求最近的两点分别在两个集合中的点对,最后比较得出对短距...原创 2020-03-24 19:28:03 · 1059 阅读 · 0 评论 -
算法-作业4-二分归并排序算法
1.问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析选择中间的数,把数组对半划分。分别对 子问题1 和 子问题2 进行排序,最后把这两个排好序的问题 综合到一个问题。因此,二分归并排序也涉及到三个问题:1) 把大问题归约成 规模较小的子问题 。2) 把子问题独立求解的过程。3) 把所有子问题 综合解的过程。3.设计 void merge...原创 2020-03-17 19:13:27 · 966 阅读 · 0 评论 -
算法-作业3-二分查找算法和插值查找算法
1.问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2.解析1)二分查找二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。有序数据集存放在数组a中。target是要查找的数据。通过变量left和right控制一个循环来查找元素target(left和right是数据集的两个边界值)。将l...原创 2020-03-10 20:17:05 · 468 阅读 · 0 评论 -
算法-作业2-floyd算法和dijkstra最短路径算法
1.问题用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。1)Floyd2)Dijkstra2.解析1)Floyd是求点i到点j的最短路径。通过寻找中间点k,若求得i到k的路径长度和k到j的路径长度小于i直接到k的路径长度,则替换路径长度。形象比喻:北京到上海机票2000元,北京到杭州机票1100元,杭州到上海机票300元,则11...原创 2020-03-03 20:22:00 · 399 阅读 · 0 评论 -
算法-作业1-prim算法和kruskal算法
1.问题2.解析1)Prim算法初始状态:V是所有顶点的集合,即V={A,B,C,D,E,F,G};U和T都是空!第1步:将顶点A加入到U中。 此时,U={A}。第2步:将顶点B加入到U中。上一步操作之后,U={A}, V-U={B,C,D,E,F,G};因此,边(A,B)的权值W最小。将顶点B添加到U中;此时,U={A,B}。第3步:将顶点F加入到U中。上一步操作之后,U={A,B...原创 2020-03-02 10:53:43 · 438 阅读 · 0 评论