贪心算法求解区间覆盖问题.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《贪心算法求解区间覆盖问题.docx》由会员分享,可在线阅读,更多相关《贪心算法求解区间覆盖问题.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法分析与设计试验报告第5次试验区间掩盖时间4. 28下午地点软件大楼109试验名称贪心算法求会场支配问题试验目的通过上机试验,要求把握贪心算法的思想,解决会场支配的问题并且实 现。试验原理贪心算法重要的两共性质:贪心选择性质和最优子结构性质。从问题的某一个初始解动身逐步靠近给定的目标,以尽可能快的地求得更好 的解。当达到某算法中的某一步不能再连续前进时,算法停止。1 .建立数学模型来描述问题。2 .把求解的问题分成若干个子问题。3 .对每一子问题求解,得到子问题的局部最优解。4 .把子问题的解局部最优解合成原来解问题的一个解。在这个试验当中,将会场的开头和结束的时间都用vector向量来表示
2、, 然后将将开头的值用bool变量表示,开头时间是true,结束时间是false,依 次检索,运用推断语句 if (i=nTxi. tmax)对这些会议的时间进行推断,然后看是否需要添加会议室;再在进行推断;试验步骤步骤如下:1、首先定义数据结构:以时间为核心,定义结构体point,它拥有两个属性, t是时间,f表示是开头时间还是结束时间;2、对全部对象按时间大小排序;3、依次计算,假如是开头时间则count+,假如是结束时间则count-,其中 最大的count即是最少的会场数。count表示目前开头且未结束的活动数;struct point(int t;bool f;);bool cmp(
3、point x,point y)(return x. ty. t;)关键代码int greedy(vector x)(int max=0, cur=0, n二x. size ();sort (x. begin (), x. end (), cmp);for(int i=0;in;i+)(if (xi. f)cur+;elsecur;if (i=n-l | xi. tmax 且xi=xi+l时,i时间确定是开头时间,i + 1时间可能是开头时间,也可能是结束时间假如是结束时间,说明某活动开头时间和结束时间相同,不需要会场,故不对max更新;假 如是开头时间,那在i+1次更新max效果一样retu
4、rnmax;因此i次不进行更新测试结果 3 E:学习算法分析与没计实验课第五次实验课会场安排问爱l.exe.n叫Tg51 2312 2825 35 2? 8036 503.一 一试验心得关于运用贪心算法来球会议场地的问题,这个问题主要是需要计算的是上一个 会场的结束时间与下一个会场的开头时间会不会重合,所以在这里我奇妙的运 用了 vector向量来表示会议的开头于结束的时间,然后依据bool来检索会议 的开头于结束时间,然后推断是否时间重合,然后再来推断是否需要再添加会 议室,在这个试验中最奇妙的还是要运用vector函数来推断,所以试验的过 程中需要我们精密的思索问题,将问题简化才是最重要的
5、。试验得分助教签名附录:完整代码/4d5贪心算法单源最短路径问题ttinclude ttinclude ttinclude using namespace std;const int N = 5;const int M = 1000;ifstream fin(“4d5 txt);templatevoid Di jkstra(int n, int v, Type dist , int prev, Type cN+l);void Traceback(int v, int i, int prev);输出最短路径 v 源点,i 终点int main ()int v = 1;源点为 1 .int dis
6、t N+l, prevN+l, cN+l N+l;cout有向图权的矩阵为:endl;for (int i=l; i=N; i+)(for (int j=l; j=N; j+)(finci j;coutci Ejz)coutendl;)Di jkstra(N, v, dist, prev, c);for (int i=2; i=N; i+)(cout源点1到点*i的最短路径长度为:其路径为;Traceback(l, i, prev);coutendl;return 0;template void Di jkstra(int n, int v, Type dist , int prev, Typ
7、e cN+l)(bool sN+l;.for (int i=l; i=n; i+)(disti = cv i表示当前从源到顶点i的最短特别路径长度si = false;if(disti = M)(previ = 0;纪录从源到顶点i的最短路径i的前一个顶点)else(previ = v;)distv = 0;v = true; 源到本身的距离是0;for(int i=l; in; i+)int temp = M;int u = v; 上一顶点取出V-S中具有最短特别路径长度的顶点u for (int j=l; j=n; j+)(if(!sj) & (distjtemp)temp = distj
8、;su = true;依据作出的贪心选择更新Dist值for (int j=l; j=n; j+)(if(!sj) & (cu jM)Type newdist = distu + cuj;if(newdist i;会场支配问题(贪心算法)/input, txt/5 /I 23/12 28/25 35/27 80/36 50/output.txt/3ttinclude ttinclude ttinclude using namespace std;struct point(int t;bool f;);bool cmp(point x,point y)(return x. ty. t; int
9、greedy(vector x)int max=O, cur=O, n=x. size();sort (x. begin (), x. end (), cmp);for (int i=0;in;i+)(.if (xi. f)cur+;elsecur;if (i=n-l | | xi. tmax)处理 xi=xi+l的状况max=cur;当 curmax 且 xi=xi+l时,i时间确定是开头时间,i+1时间可能是开头时间,也可能是结束时间假如是结束时间,说明某活动开头时间和结束时间相同,不需要会场,故不对max更新;假如是开头时间,那在i+1次更 新max效果一样max;return因此i次不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪心 算法 求解 区间 覆盖 问题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内