利用贪婪算法实现多种实际问题
10算法策略之贪婪法

10算法策略之贪婪法贪婪算法贪婪法⼜叫登⼭法, 它的根本思想是逐步到达⼭顶,即逐步获得最优解。
贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。
⼀定要注意,选择的贪婪策略要具有⽆后向性。
某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关,称这种特性为⽆后效性。
可绝对贪婪问题【例1】键盘输⼊⼀个⾼精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成⼀个新的正整数。
编程对给定的N和S,寻找⼀种⽅案使得剩下的数字组成的新数最⼩。
输⼊数据均不需判错。
输出应包括所去掉的数字的位置和组成的新的正整数(N不超过240位)。
数据结构设计:对⾼精度正整数的运算在上⼀节我们刚刚接触过,和那⾥⼀样,将输⼊的⾼精度数存储为字符串格式。
根据输出要求设置数组,在删除数字时记录其位置。
我们采⽤⽅法1)。
⼀种简单的控制相邻数字⽐较的⽅法是每次从头开始,最多删除s次,也就从头⽐较s次。
按题⽬要求设置数组data记录删除的数字所在位置。
较s次。
按题⽬要求设置数组data记录删除的数字所在位置delete(char n[],int b,int k){int i;for(i=b;i<= length(n)-k;i=i+1) n[i]=n[i+k];}main(){char n[100]; int s,i,j,j1,c,data[100],len;input(n); input(s); len=length(n);if(s>len){print(“data error”); return;}j1=0;for (i=1;i<=s ;i=i+1){for (j=1;j<length(n);j=j+1)if (n[j]>n[j+1]) //贪婪选择{delete(n,j,1);if (j>j1) data[i]=j+i; //记录删除数字位置else //实例2向前删除的情况实例data[i]=data[i-1]-1;j1=j; break; }if( j>length(n)) break;}for (i=i;i<=s;i=i+1){ j=len-i+1;delete(n,j,1); data[i]=j;}while (n[1]='0' and length(n) >1)delete(n,1,1); //将字符串⾸的若⼲个“0”去掉 print(n);for (i=1;i<=s;i=i+1)print(data[i],' ');}算法说明1:注意记录删除位置不⼀定是要删除数字d的下标,因为有可能d的前或后有可能已经有字符被删除,d的前⾯已经有元素删除容易想到,但⼀定不要忽略了其后也有可能已删除了字符,实例2中删除1时,其后的2已被删除。
贪婪算法

贪婪算法是求解最优化问题的一种方法,每个 最优化问题都包含一组限制条件( 和一个优化函 数),符合限制条件的问题求解方案称为可行解, 使优化函数取得最佳值的可行解称为最优解。 例1 [ 渴婴问题] 有一个非常渴的、聪明的小婴儿, 她可能得到的东西包括一杯水、一桶牛奶、多罐不 同种类的果汁、许多不同的装在瓶子或罐子中的苏
方案的总价值为2 0。而最优解为[ 0 , 1 , 1 ],其总价 值为3 0。
当利用重量贪婪策略时,获得的解为x =[1,0], 比最优
解[ 0 , 1 ]要差。
请你用第三种策略解n= 3 ,w=[20,15,15], p=[40,25, 25], c=30 时的最优解。
我们不必因所考察的几个贪婪算法都不能保证 得到最优解而沮丧, 0 / 1背包问题是一个N P-复杂 问题。对于这类问题,也许根本就不可能找到具有
解是最优解。这是一个典型的贪婪算法。
算法思想:
在贪婪算法中采用逐步构造最优解的方法。在 每个阶段,都作出一个看上去最优的决策(在一定 的标准下)。决策一旦作出,就不可再更改。作出 贪婪决策的依据称为贪婪准则。
一种获得最优分配的贪婪方法是逐步分配任务。 每步分配一件任务,且使其处于最优解。在选择何 种饮料时,采用以下贪婪准则:根据欲选择饮料的 满意度的大小来决定选择何种饮料,若此种饮料的 数量无法满足婴儿的需求,且有其它饮料可以选择, 则选择其它的饮料,直到满足饮料总量的要求。
实际上,我们可以从上述算法中得到启发。并最
终可以获得最优解。考虑:首先将最多k 件物品放入 背包,如果这k 件物品重量大于c,则放弃它。否则, 剩余的容量用来考虑将剩余物品按pi /wi 递减的顺序 装入。通过考虑由启发法产生的解法中最多为k 件物
贪婪算法在资源分配问题中的应用----彭鹏

贪婪算法在资源分配问题中的应用彭鹏贵州财经学院研究生摘要:贪婪算法的典型应用是解决优化问题,这类算法的策略是只顾眼前,而不考虑以后的影响,它的算法简单容易设计实现,因此在许多实际问题中得到广泛的应用,但是它也存在许多的问题,巧妙的使用贪婪思想,将其融入到资源分配问题中解题中,资源分配问题便焕发出了新的光彩。
本文首先对贪婪算法的基本概念做了介绍,然后通过实例论述了贪婪算法在资源分配问题中的应用。
关键字:贪婪算法研究应用资源分配问题第一章贪婪算法的概念1.1什么是贪婪算法贪婪算法是一种对某些求最优解问题的更简单、更迅速的设计技术。
用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。
贪婪算法是一种改进了的分级处理方法。
其核心是根据题意选取一种量度标准。
然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。
如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。
这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。
对于一个给定的问题,往往可能有好几种量度标准。
初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。
因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。
一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。
最优解可以通过一系列局部最优的选择即贪婪选择来达到,根据当前状态做出在当前看来是最好的选择,即局部最优解选择,然后再去解做出这个选择后产生的相应的子问题。
利用遗传贪婪混合算法求解背包问题

式 中 : O 决 策变 量 , z 为 一1 z 一1时表示 将物 品 i 装
Co ue mp tr& I fr t n E gn eig,Ha bnUnv riyo mme c , r i 5 0 0,Chn ) n o mai n ie rn o r i ie st fC o re Habn 1 0 0 ia
Ab ta t K n p a k p o lm s s l e y t e h b i e e i a d g e d l o ih . e p o o e t o sr c : a s c r b e i o v d b h y rd g n t n r e y a g rt m W r p s d a me h d c t a s u e o s l e p e a u e c n e g n e wi p r t r c mp n a i n Th t o s a l o o e c me h ti s d t o v r m t r o v r e c t o e a o o e s to . h e me h d i b e t v r o
具 有 更 好 的 收敛 性 能 。实 验 结 果 表 明 , 算 法 性 能 较 佳 , 以 满 足 解 决 背 包 问题 的需 要 。 该 可 关 键 词 : 包 问 题 ; 传 算 法 ; 婪 算 法 ; 熟 收 敛 背 遗 贪 早
中 图分 类 号 : P 0 . T 316 文献标志码 : A 文 章 编 号 :6 14 7 (0 0 0 —0 30 1 7 —6 92 1 )40 4 —3
c语言算法--贪婪算法---01背包问题

c语言算法--贪婪算法---0/1背包问题在0 / 1背包问题中,需对容量为c 的背包进行装载。
从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。
对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即n ?i=1pi xi 取得最大值。
约束条件为n ?i =1wi xi≤c 和xi?[ 0 , 1 ] ( 1≤i≤n)。
在这个表达式中,需求出xt 的值。
xi = 1表示物品i 装入背包中,xi =0 表示物品i 不装入背包。
0 / 1背包问题是一个一般化的货箱装载问题,即每个货箱所获得的价值不同。
货箱装载问题转化为背包问题的形式为:船作为背包,货箱作为可装入背包的物品。
例1-8 在杂货店比赛中你获得了第一名,奖品是一车免费杂货。
店中有n 种不同的货物。
规则规定从每种货物中最多只能拿一件,车子的容量为c,物品i 需占用wi 的空间,价值为pi 。
你的目标是使车中装载的物品价值最大。
当然,所装货物不能超过车的容量,且同一种物品不得拿走多件。
这个问题可仿照0 / 1背包问题进行建模,其中车对应于背包,货物对应于物品。
0 / 1背包问题有好几种贪婪策略,每个贪婪策略都采用多步过程来完成背包的装入。
在每一步过程中利用贪婪准则选择一个物品装入背包。
一种贪婪准则为:从剩余的物品中,选出可以装入背包的价值最大的物品,利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。
这种策略不能保证得到最优解。
例如,考虑n=2, w=[100,10,10], p =[20,15,15], c = 1 0 5。
当利用价值贪婪准则时,获得的解为x= [ 1 , 0 , 0 ],这种方案的总价值为2 0。
而最优解为[ 0 , 1 , 1 ],其总价值为3 0。
另一种方案是重量贪婪准则是:从剩下的物品中选择可装入背包的重量最小的物品。
贪心法

贪心法贪心法(Greedy Approach)又称贪婪法, 在对问题求解时,总是做出在当前看来是最好的选择,或者说是:总是作出在当前看来最好的选择。
也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。
当然,希望贪心算法得到的最终结果也是整体最优的。
虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。
如单源最短路经问题,最小生成树问题等。
在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
贪心法的设计思想当一个问题具有以下的性质时可以用贪心算法求解:每一步的局部最优解,同事也说整个问题的最优解。
如果一个问题可以用贪心算法解决,那么贪心通常是解决这个问题的最好的方法。
贪婪算法一般比其他方法例如动态规划更有效。
但是贪婪算法不能总是被应用。
例如,部分背包问题可以使用贪心解决,但是不能解决0-1背包问题。
贪婪算法有时也用用来得到一个近似优化问题。
例如,旅行商问题是一个NP难问题。
贪婪选择这个问题是选择最近的并且从当前城市每一步。
这个解决方案并不总是产生最好的最优解,但可以用来得到一个近似最优解。
让我们考虑一下任务选择的贪婪算法的问题, 作为我们的第一个例子。
问题:给出n个任务和每个任务的开始和结束时间。
找出可以完成的任务的最大数量,在同一时刻只能做一个任务。
例子:下面的6个任务:start[] = {1, 3, 0, 5, 8, 5};finish[] = {2, 4, 6, 7, 9, 9};最多可完成的任务是:{0, 1, 3, 4}贪婪的选择是总是选择下一个任务的完成时间至少在剩下的任务和开始时间大于或等于以前选择任务的完成时间。
我们可以根据他们的任务完成时间,以便我们总是认为下一个任务是最小完成时间的任务。
1)按照完成时间对任务排序2)选择第一个任务排序数组元素和打印。
3) 继续以下剩余的任务排序数组。
……a)如果这一任务的开始时间大于先前选择任务的完成时间然后选择这个任务和打印。
第三章 贪心算法

2021/2/22
5
如果问题改成:砝码的种类分别为11克、5克和1克, 待称的物体是15克。用贪婪算法应先选一个11克的,然 后选四个1克的,共用五个砝码。这不是最优结果,只 要用三个5克的砝码就够了。
贪婪算法虽不能保证得到最优结果,但对于一些除
了“穷举”方法外没有有效算法的问题,用贪婪算法往
往能很快地得出较好的结果,如果此较好结果与最优结 果相差不是很多的话,此方法还是很实用的。
2021/2/22
9
当n不太大时,适当的取k值,此改进方法常常可以得到 最优解,但不能因此就说一般背包问题有多项式算法。 当n增大时,k不能随着n不断的加大,如k随n增大而同 时加大,其复杂性就是指数型而不是多项式型的了,而 如k取值较小,又不能保证得出最优解。
组合优化问题的算法与求解

组合优化问题的算法与求解组合优化问题是一类需要在给定的约束条件下找到最优解的问题。
这些问题在现实生活中有着广泛的应用,比如物流配送问题、旅行商问题等等。
本文将介绍几种常见的组合优化问题的算法以及它们的求解方法。
一、贪婪算法贪婪算法是一种简单而高效的求解组合优化问题的方法。
它通过在每一步选择当前看起来最优的解决方案,逐步建立起最终的解。
贪婪算法通常具有快速的执行速度和较好的近似解质量。
例如,对于旅行商问题,贪婪算法可以从一个起点开始,每次选择离当前位置最近的未访问节点作为下一个访问节点,直到所有节点都被访问过。
这样,贪婪算法可以得到一个近似的最短路径。
二、回溯算法回溯算法是一种穷举搜索的方法,它通过逐个尝试所有可能的解决方案,并逐步剪枝以减少搜索空间。
回溯算法通常适用于组合优化问题的求解,尤其是在问题规模较小的情况下。
以0-1背包问题为例,回溯算法可以通过穷举所有可能的物品选择方式,计算其总价值,并在搜索过程中剪枝以提高效率。
回溯算法的优势在于能够找到最优解,但在问题规模较大时,耗时较长。
三、动态规划算法动态规划算法是一种将问题分解为子问题并记录子问题结果的方法。
它适用于能够将原问题分解为相互重叠的子问题,并利用子问题的解来推导原问题的解。
比如在背包问题中,动态规划算法可以通过定义状态转移方程来解决。
设dp[i][j]表示在前i个物品中选择总重量不超过j的情况下的最大价值,则有以下状态转移方程:dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])通过填表计算,可以获得最终的最优解。
四、遗传算法遗传算法是一种模拟自然选择和遗传机制的搜索算法。
它通过模拟生物种群的遗传、变异、选择等过程,逐步演化出最优解。
遗传算法在求解组合优化问题时,通过编码将解空间中的解表示成染色体,并利用交叉、变异等遗传操作来搜索更优的解。
通过不断迭代,遗传算法能够找到较好的解,但无法保证找到全局最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)调试分析
包括测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。
(5)课设总结
总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对算法设计与分析这门课程的思考、在课程设计过程中对《算法设计与分析》课程的认识等内容。
假设某职工的工资为638元,要求统计并输出应发给该职工面值100元、50元、20元、10元、5元、2元、1元的人民币各多少张,使总张数最少。我们该发给他多少张人民币呢?答案可以是638张面值1元的人民币,可以是638/2=319张面值2元的人民币,……无论发给该职工人民币多少张,他拿到的人民币总和都应等于他自己的工资数。要发给该职工638元的工资,并使总张数最少,直觉告诉我们,应先给他6张面值100元的人民币;第7张不能再给100元的,也不能给50元的,否则该职工实际拿到的工资将会超过他应得的工资;显然,第7张应为面值20元的人民币。同理,第8张为面值10元的人民币,第9张为面值5元的人民币,第10张为面值2元的人民币,第11张为面值1元的人民币。该职工共拿到人民币11张,分别为面值100元的6张,面值50元的没有,面值20元、10元、5元、2元和1元的各1张。这样,不但满足了约束条件即100×6+(20+10+5+2+1)×1=638,而且使该职工拿到的人民币张数最少。把以上操作方法归纳出来就是一种可行的贪婪准则:按面值从大到小的顺序分发人民币,并始终保证职工实际拿到的工资不超过他应得的工资。
目前常用的算法设计技术有分治法、回溯法、贪婪法、动态规划算法、分支限界法等。其中分治法、回溯法主要用于设计非数值问题的算法,而贪婪法、动态规划算法、分支限界法则主要用于设计数值最优化问题的算法。贪婪法是一种求最优解问题的最直接的设计技术,它不是对所有问题都能得到整体最优解,但对许多问题可能产生整体最优解。
设A是所要求安排的课程的m个最大相容课程子集,即用A[i][j]存储对最小教室所选择的课程,A[i][m]存储对最大教室所选择的课程。若课程i在集合A[i][x]中(x=1,2,……,m),则A[i][x]必为true(存入其课程序号)。变量J(x)用以记录最近一次加入到A[i][x]中的课程。已知的各课程的起始时间和结束时存储于数组s和f中,且按结束时间的非减序:f1<=f2<=……<=fn排列。如果未排序,则先按此用O(nlogn)时间排序。其贪婪策略是:先向A[i][1]中安排,安排不下时,安排在A[i][2]中,⋯⋯直到安排在A[i][m],仍安排不下,只能另做处理。参考程序如下:
4、制定贪婪准则。
五、进度安排
1、第一周:分析题目的需求,设计抽象数据类型、构思算法、通过类的设计实现抽象数据类型并编写上机程序
2、第二周完成程序开发,进行测试并分析结果,最后撰写课程设计报告
六、完成后应上交的材料
上交的成果的内容必须由以下四个部分组成,缺一不可。
1.上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)。
指导教师签名日期年月日
系 主 任审核日期年月日
引言
为了满足人们对大数据量信息处理的渴望,为解决各种实际问题,计算机算法学得到了飞速的发展,线性规划、动态规划、贪婪策略等一系列运筹学模型纷纷运用到计算机算法学中,产生了解决各种现实问题的有效算法。虽然设计一个好的求解算法更像是一门艺术,而不像是技术,但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法,可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得较好的性能,必须对算法进行细致的调整。但是在某些情况下,算法经过调整之后性能仍无法达到要求,这时就必须寻求另外的方法来求解该问题。
3
贪婪算法的基本思路:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。
该算法存在的问题:1)不能保证求得的最后解是最佳的;2)不能用来求最大或最小解问题;3)只能求满足某些约束条件的可行解的范围。
3.1
下面介绍争用2个甚至多个资源时的安排:
4.课程设计报告打印稿。
七、推荐参考资料
教 材:
《算法设计与分析》Anany Levitin 著 潘彦译清华大学出版社,2007。
《算法设计与分析》宋 文等编重庆大学出版社,2001。
参考书:[1] 《算法设计与分析》 周培德 电子工业出版社,2000。
[2] 《算法设计与分析》 王晓东 电子工业出版社,2004
(4)给出上面两个算法的证明;
(5)给出上面两个算法的程序。
(6)给出时间复杂度。
四、主要技术路线提示
在用贪婪算法解决资源分配问题、布线问题、0-1背包问题过程中,使用贪婪算法解决问题,通常需要做好以下几个方面的工作:
1、明确问题的求解目标。
2、分析问题所包含的约束条件。
3、建立优化函数。优化函数通常可以通过综合分析问题的求解目标及约束条件归纳出来。
(4)还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。
(5)选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。
(6)最后,目标函数给出解的值。
为了解决问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数,贪婪算法一步一步的进行。起初,算法选出的候选对象的集合为空。接下来的每一步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。如果集合中加上该对象后不可行,那么该对象就被丢弃并不再考虑;否则就加到集合里。每一次都扩充集合,并检查该集合是否构成解。如果贪婪算法正确工作,那么找到的第一个解通常是最优的。
贪婪算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准。然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。
Procedure GREEDY-COURSE-SELECTOR1(E,s,f,A)
begin
n←length(E);A←d;
A[1][1]←1; //A中有m个集合,分别用以存放课
2
贪婪算法及贪婪算法可解决的问题通常大部分都有如下的特性:
(1)有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。
(2)随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。
(3)有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。
1、明确问题的求解目标。
2、分析问题所包含的约束条件。
3、建立优化函数。优化函数通常可以通过综合分析问题的求解目标及约束条件归纳出来。
4、制定贪婪准则。清楚问题的求解目标、所包含的约束条件及优化函数之后,就可以着手制定一个可行的贪婪准则。贪婪准则的制定是用贪婪算法解决最优化问题的关键,它关系到问题能否得到成功解决及解决质量的高低。
2பைடு நூலகம்
2
贪婪算法是一种对某些求最优解问题的更简单、更迅速的设计技术。用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。
2
贪婪算法的一般解题步骤:
设计中一类非常重要的问题。每一个最优化问题都包含一组约束条件和一个优化函数,满足约束条件的问题求解方案称为问题的可行解,使优化函数取得最优值的可行解称为问题的最优解。贪婪算法是解决最优化问题的一种基本方法。它采用逐步构造最优解的思想,在问题求解的每一个阶段,都做出一个在一定标准下看上去最优的决策;决策一旦作出,就不可再更改。制定决策的依据称为贪婪准则。使用贪婪算法解决问题,通常需要做好以下几个方面的工作:
2.
贪婪算法是一种重要的算法设计策略,而且其效率高。贪婪算法并不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优选择,即在当前看来最好的选择。希望通过每次所做的贪婪选择导致最终结果是问题的一个最优解。贪婪算法具有良好的爬坡能力,一般情况下该算法都可以较快地求出满足计算精度要求的近似最优解,当算法不能在限定的计算时间内找到满足问题要求的近似最优解时,给出一个可行解及计算误差,作为决策参考。但是随着问题规模和复杂度的不断提升,单一的算法在其收敛性和求解速度等方面已经表现出局限性。即使贪婪算法的效率很高,它也只适用于少量的实例。
《算法设计与分析》课程设计任务书
学院名称:数学与计算机学院专业:信息与计算科学专业年级:2007
一、设计题目
题目十四:利用贪婪算法实现多种实际问题
二、主要内容
给出多种可以用贪婪算法解决的典型问题,并分析、证明、编程。
三、具体要求
(1)贪婪算法的基本思想;
(2)给出背包问题的贪婪算法;
(3)给出有限期计算机作业调度的贪婪算法;
2.上交程序的说明文件:(保存在.txt中),在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明。
3.课程设计报告电子文档:(保存在word文档中,文件名要求按照“学号姓名算法分析课设报告.doc”起名,如文件名为“200300109张三算法分析课设报告.doc”),按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成: