算法设计与分析
CunHua_YYT
这个作者很懒,什么都没留下…
展开
-
圆排列问题
问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。解析该问题是一个排列问题,问题的解存储在序列r={r1,r2,r3…}中,问题的解空间树是一颗排列树。用x={x1,x2,x3…}表示当前排列的各个圆的圆心。下界函数:用Center(t)计算新增圆的圆心,每次新增一个圆则排列的序列会增长,比较center(t)+r[t]+r[0]这个值(注意不是序列中总长,只是t号圆的最右端的长度)和已知序列长度min比较,如果大于min则剪枝。用compute计算.原创 2020-06-15 18:02:48 · 510 阅读 · 0 评论 -
着色问题
问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。解析将着色解的生成过程类比为完全叉树的遍历过程,从根节点出发,每个节点都有m个子节点(m种着色),第i层代表第i个结点的所有着色情况,共有n层,判断每一个节点是否满足着色要求(边的两顶点着色不同)。若满足要求则继续着色它的子节点直到全部顶点都着上色且满足要求;若不满足要求,该节点的所有子节点都不再将被遍历,回溯到..原创 2020-06-01 20:21:04 · 1169 阅读 · 0 评论 -
最优前缀码
问题给定字符集C={x1,x2,……,xn}和每个字符的频率f(x1),求关于C的一个最优前缀码。解析设计1、数组haftree初始化,所有数组元素的双亲、左右孩子都置为-1;2、数组haftree的前n个元素的权值置给定权值;3、进行n-1次合并3.1 在二叉树集合中选取两个权值最小的根节点,其下标分别为i1,i2;3.2 将二叉树i1、i2合并为一棵新的二叉树k。分析源码https://github.com/CunHua-YYT/CunHua-YYT/bl..原创 2020-05-18 19:21:18 · 1142 阅读 · 0 评论 -
相容问题
问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i=1,2,…,n。定义:活动i和j相容<==>si≥fj或sj≥fi,i≠j求S最大的两两相容的活动子集A。解析方法一:按活动截止时间从小到大排...原创 2020-05-06 17:30:59 · 613 阅读 · 0 评论 -
LCS
问题给定序列X=<x1,x2,…,xm>,Y=<y1,y2,…,yj>,求X和Y得最长公共子序列解析在图中标注得H点中,我们既可以选择左边也可以选择上边,这里我选择了往左走的情况,此时得到的结果为BDE,当然如果H点网上走的话结果就是BCE。3. 设计while (~scanf("%s%s", a + 1, b + 1)) {memset(dp, 0, s...原创 2020-04-27 19:01:07 · 632 阅读 · 0 评论 -
矩阵链乘法
问题解析3. 设计4. 分析Tn=O(n^3)5. 源码https://github.com/CunHua-YYT/CunHua-YYT/blob/master/MATRIX_CHAIN_ORDER.cpp原创 2020-04-20 22:50:38 · 438 阅读 · 0 评论 -
投资问题
问题设m元钱,n项投资,函数f(x)表示将x元投入第i项项目所产生的效益,i=1,2…n。问:如何分配这m元钱,使得投资的总效益最高?假设分配给第i个项目的钱数是xi,问题描述为:目标函数:max{f1(x1)+f2(x2)+…+fn(xn)}约束条件:x1+x2+…+xn=mxi(包含于n)解析设计分析源码https://github.com/CunHua-YYT/Cu...原创 2020-04-13 20:49:56 · 579 阅读 · 0 评论 -
选择第K小元素
问题用分治策略找出第K小的元素。解析设计分析时间复杂度为O(n);源码https://github.com/CunHua-YYT/CunHua-YYT/blob/master/Select%20K.cpp原创 2020-04-06 19:28:32 · 520 阅读 · 0 评论 -
Closest_Pair
问题给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。解析设计double a(left,right){mid=(left+right)/2if(left=right)return 999999;if(riget-left)=1return distance(left,right)distanceleft=a(left,mid)dist...原创 2020-03-29 19:33:26 · 347 阅读 · 0 评论 -
Mergesort 二分归并
问题对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k解析设计if a<bthen mid=[(a+b)/2]Merge sort(a,mid)Merge sort(mid+1,b)merge(a,mid,b)分析源码https://github.com/CunHua-YYT/CunHua-YYT/blob/master/mergeSo...原创 2020-03-22 10:43:24 · 222 阅读 · 0 评论 -
顺序查找
问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。解析在一个排序好的数组中,从下标为0得数据开始依次寻找,直到找到或者查找完所有数据为止。设计For(j=0;j++;j<999){If (T[j]x)print j;If(j999&T[j]!=x) print “j=0”}分析O(n)源码https:...原创 2020-03-10 19:40:43 · 962 阅读 · 0 评论 -
二分查找
问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。解析在已经排序好的数组中设值a,b分别代表两端得点,mid代表中间点,mid=(a+b)/2,如果x大于T[mid],则a=mid+1,反之b=mid-1,若a>b,结束循环。设计While(a<b){If x=T[mid] 结束;If x>T[mid] ...原创 2020-03-10 19:39:38 · 593 阅读 · 0 评论 -
Floyd
问题给定一个有向图,并且给各条边赋上权值,求解一个顶点到另一个顶点的最短距离。解析设计分析时间复杂度:O(n^3)源码https://github.com/CunHua-YYT/CunHua-YYT/blob/master/Floyd.cpp...原创 2020-03-07 21:48:45 · 459 阅读 · 0 评论 -
Dijkstra
问题给定一个有权值有向图,指定一个顶点,求出其到另一个指定顶点的最短距离。解析设计初始化数组g[][],d[],p[];For(循环次数小于等于最多边数){For() 找出未存放的最小顶点并标记For()更新d数组}分析O(elogv)//v为顶点数源码https://github.com/CunHua-YYT/CunHua-YYT/blob/mas...原创 2020-03-07 21:46:27 · 301 阅读 · 0 评论 -
Kruskal解决最小生成树问题
Kruskal解决最小生成树问题问题给定一个有若干边和顶点构成的图,从中选则部分边构成树,且树的权值要最小。解析设计Void Kruskal(MGraph){ T ={}While(T中不到n-1条边&&E中还有边){从E中抽取一条权值最小的边将E(s,e)从E中删除;If(E(s,e)不在T中构成回路)将E加入TElse继续循环}}分析O(E...原创 2020-03-02 20:03:14 · 507 阅读 · 0 评论 -
Prim解决最小生成树问题
问题给定一个有若干边和顶点构成的图,从中选则部分边构成树,且树的权值要最小。。解析设计Void Prim(a){visit[a]=tureFor(i=1 to n,i++)Dis[i]=MGraph[a][i]For(i=1 to n,i++){选出Dis中最小的边;Visit[i]=TURE;Tmp.i=I;Tmp.w=dis[i]For(j=1 to n,j+...原创 2020-03-02 20:00:33 · 339 阅读 · 0 评论