贪心算法解决会场安排问题、多处最优服务次序问题(含源代码).docx

贪心算法解决会场安排问题、多处最优服务次序问题(含源代码).docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心算法解决会场安排问题、多处最优服务次序问题(含源代码).docx

西安邮电大学 (计算机学院) 课内实验报告 实验名称 计算机科堂与技术专业名称: 计算机科堂与技术 班 级: 学生姓名: 学号(8位) 指导教师: 实验日期: 2014年5月22日 实验目的及实验环境 实验目的:通过实际应用熟悉贪心算法,并解决会场安排问题、多出最优服 务次序问题 实验环境:Visual C++ 6.0 实验内容 1 ?会场安排问题. 假设耍在足够多的回厂里安排一批活动,并希望使用尽可能少的会场,设计 一个有效的贪心算大进行安排(这个问题实际上是注明的图着色问题。若将每一 个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的 最小着色数,相应于要找的最小会场数) 2.多处最优服务次序问题 设有口个顾客同时等待一项服务。顾客i需要的服务时间为ti, l=i=no 共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时 间达到最小?平均等待吋间是n个顾客等待服务吋间的总和除以n。 方案设计 1、设冇n个活动的集合E={1, 2,…,n},其屮每个活动都要求使用同一资源, 如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有 一个要求使用该资源的起始吋间si和一个结束吋间fi,且si〈fi。如果选择了 活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si2fj或sjMfi时, 活动i与活动j相容。 由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每 次总是选择具冇最早完成时间的相容活动加入集合A屮。直观上,按这种方法选 择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的 意义是使剩余的可安排吋间段极大化,以便安排尽可能多的相容活动。 算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排 列,算法只需0(的吋间安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动耒按非减序排列,可以用O(nlogn)的时间重排。 1?会场安排问题源代码 #include iostream #include vector ^include algorithm using namespace std; struct point { int t; bool f; }; bool cmp(point x,point v) { return x. tv. t; } int greedy(vectorpoint x) { int max=0, cur=0, n=x. size (); sort (x. beg in (), x. end (), cmp); for(int i=0;in;i++) { if (x[i]? f) cur++; el se cui—; if (curmax) max=cur; } return max; int main() { vectorpoint x; int n, i; point temp; while(cinn, n) { for(i=0;in;i++) { temp, f二true; cintemp. t; x.push_back(temp); temp, f二false; cintemp. t; x. push back(temp); coutgreedy (x)endl; x. clear (); } return 0; 2.多处最优服务次序问题源代码: #includcstdio.h #includestdlib.h main() { int **window, ^timewindow, ^array, num, serve, i, j, k, temp; double min; printf (,z请输入等待服务人数\n〃); seanf(%d〃, num); printf (z,请输入服务窗口数\n〃); scanf(〃%d〃,serve); array = (int ^)malloc((num + 1) * sizeof (int)); timewindow = (int ^)malloc((serve + 1) * sizeof(int)); window 二(int **)malloc((serve + 1) * sizeof(int *)); for(i 二 0; i 二 serve;i++) window[i]二(int *)mal loc((num + 1) * sizeof (int *)); printfC请依次输入服务等待时间\n〃); for(i = 1; i = num;i++) scanf(%d〃,array[i]); for(

您可能关注的文档

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档