- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章.贪心算法(Greed method) ; 将问题的求解过程看作是一系列选择,每次选择一个输入,每次选择都是当前状态下的最好选择(局部最优解).每作一次选择后,所求问题会简化为一个规模更小的子问题.从而通过每一步的最优解逐步达到整体的最优解。;[适用问题] 具备贪心选择和最优子结构性质的最优化问题
贪心选择性质:整体的最优解可通过一系列局部最优解达到,即贪心选择到达。
贪心算法通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择就将所求解的问题化简为规模更小的问题
对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终导致问题的最优解。通常可以首先证明问题的一个整体最优解,是从 贪心选择开始的,而且作了贪心选择后,原问题简化为一个规模更小的类似子问题。然后,用数学归纳法证明,通过每一步作贪心选择,最终可得到问题的一个整体 最优解。
最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。;4.2.活动安排问题; 1 2 3 4 5 6 7 8 9 10 11;活动安排问题贪心算法; 算法greedySelector 的计算过程如左图所示。图中每行相应于算法的一次迭代。阴影长条表示的活动是已选入集合A的活动,而空白长条表示的活动是当前正在检查相容性的活动。;由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。 ;[问题描述] 输入:(x1,x2,...xn), xi=0,货箱i不装船; xi=1,货箱i装船
可行解: 满足约束条件 ≤c 的输入
优化函数:
最优解:使优??函数达到最大值的一种输入.;1、最优装载的贪心算法;2、贪心选择性质
可以证明最优装载问题具有贪心选择性质。
3、最优子结构性质
最优装载问题具有最优子结构性质。
算法证明:由最优装载问题的贪心选择性质和最优子结构性质,容易证明算法loading的正确性。
算法分析:算法loading的主要计算量在于将集装箱依其重量从小到大排序,故算法所需的计算时间为 O(nlogn)。
;[最优化描述] 找一个n元向量(x1,…xn) 0? xi ?1 使得
且 .其中 C, Wi, vi0 , 1 ? i ? n;背包问题实例;贪心方法的数据选择策略(1);贪心方法的数据选择策略(2);贪心方法的数据选择策略(3);[算法思路]1).将各物体按单位价值由高到低排序.
2).取价值最高者放入背包.
3).计算背包剩余空间.
4).在剩余物体中取价值最高者放入背包.
若背包剩余容量=0或物体全部装入背包为止;void Knapsack(int n,float M,float v[ ],float w[ ] ,float x[ ])
{ Sort(n, v, w,t); //按单位价值排序/
int i;
for (i =1;i = n;i++)
x[i] = 0;
float c = M; //c为背包剩余空间/
for (i =1;i = n;i ++)
{ if (w[t[i]] c)
break;
x[t[i]]= 1;
c-= w[t[i]];
}
if(i= n)
x[t[i]] = c/w[t[i]];
} ;算法分析: ;void Knapsack(int n,float M,float v[],float w[],float x[])
{
Sort(n,v,w);
int i;
for (i=1;i=n;i++) x[i]=0;
float c=M;
for (i=1;i=n;i++)
您可能关注的文档
最近下载
- 三年级上册英语-Module 9 Unit 2He's a doctor.外研版【三起】.docx VIP
- 小学五年级英语首字母填空练习题.docx VIP
- 激光行业深度研究:中国激光崛起,从【技术追赶】到【产品超越】-海通证券-20210412.pdf
- 膀胱颈梗阻的护理查房.pptx VIP
- 2024江苏苏州市相城区人大常委会办公室招聘公益性岗位人员2人笔试模拟试题及答案解析.docx VIP
- 地产五一马戏嘉年华系列活动策划方案.pptx
- 工程控制原理(经典部分)章云自测题及答案.pdf
- 游戏化教学模式在小学数学课堂教学中的应用.docx VIP
- 小学科学人教鄂教版一年级下册全册教案(2023年春).pdf VIP
- 2024中考知识点生物 .pdf VIP
文档评论(0)