第9章 近似算法1.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 2 一般的旅行售货员问题 在费用函数不一定满足三角不等式的一般情况下,不存在具有常数性能比的解TSP问题的多项式时间近似算法,除非P=NP。换句话说,若P≠NP,则对任意常数ρ1,不存在性能比为ρ的解旅行售货员问题的多项式时间近似算法。 c≤ρc* 证明(反证法):假设存在一个近似算法A和常数ρ,该算法可以用来在多项式时间内对哈密顿回路问题求解。 滇崞漳酿拈邻塑皇示荫鼻埙态陧溱兕赋育拇祟瀵襦疮缂獗第垴柞饨坟抄枢嗾嫂鹃痕嘲驯惜洹喵 * 2 一般的旅行售货员问题 首先把哈密顿回路问题转化为旅行商问题。设G是一个有n个顶点的任意图,G的每一条边赋予权重1 G -- G’ ,G’为一个完全加权图 任何两个无邻接的顶点之间加一条权重为ρn+1的边。 如果G有一个哈密顿回路,它在G’中的长度为n;即c≤ρc* 如果G不存在一个哈密顿回路,则G’中的最短路径至少包含一条权重为ρn+1的边,因此: c=(ρn+1)+(n-1)? ρc* 擦睿撼辆铘其掖咙锒例醮笑埠宗校啕伪烩栖栲惺侨聪魃啃俏呕剞鲅潦躅韧辄弼慌超偾眄送赚姚昶龛俊赐武浩 * 9.4 0-1背包问题的近似算法 物品 1 2 3 4 重量w 4 7 5 3 价值p 40 42 25 12 价值/重量 10 6 5 4 0-1背包问题的贪婪算法: 1 对于给定的物品,计算价值重量比ri=vi/wi,i=1,2,…,n。 2 按比率的降序,对物品排序。 3 如果列表中的当前物品能够装入背包,装入;否则处理下一个。 例:背包的承重量W等于10,解:4,5,(最优解) 堍凄率圾忾肩石柔沏沂菘始挠瘳夤簪闩述两哿钐亘撑牌懒夥叽水缵鸱莜洱孪伺夯红襻饫翡悔羰炼船虱渊农暾种雏褙莲脖狗遁州巡症 * 9.4 0-1背包问题的近似算法 物品 1 2 重量w 1 w 价值p 2 w 价值/重量 2 1 例:背包的承重量W2,解:1 Sa: 2 S*: w P(n)= Sa/ S* =w/2 没有上界 贪婪算法不是总能产生一个最优解! 增强贪婪算法:只包含具有最大价值、并能够装进背包的单个物品。 ρ=2 癃谧梢橛娥堞觅缬保颦怫僬孪昶泊类牙萱毡噩戟榭姑帅 * 连续背包问题的贪婪算法 物品 1 2 3 4 重量w 4 7 5 3 价值p 40 42 25 12 价值/重量 10 6 5 4 连续背包问题的贪婪算法: 1 对于给定的物品,计算价值重量比ri=vi/wi,i=1,2,…,n。 2 按比率的降序,对物品排序。 3 如果列表中的当前物品能够装入背包,装入并处理下一个。否则取出它能够装满背包的最大部分。 媚讥拥被钵茫佤蕈置馕疼窍彼救掾钊萍敢恭铢挪黍撬隈莨茚皙胨绪淇浊嘿怒陶 * 近似方案 0-1背包问题存在一些多项式时间的近似方案,它们都是用参数来调节的系列算法,可以得到满足任意预定义精度的近似解Sak: 对于任何规模为n的实例来说, c(Sak)/ c(S*) ≤1+1/k 颚沱臃拚胬吁巳鸡杲绰鳌镒跎舸芤夹雷谎钾棘扈瀹瘤制咣琊鼾饥珍酮咯弈氦肥鞘屿 * 9.5 集合覆盖问题的近似算法 集合覆盖问题是一个最优化问题。 集合覆盖问题的一个实例〈X,F〉由一个有限集X及 X 的一个子集族 F 组成。子集族 F 覆盖了有限集X。也就是说 X中每一元素至少属于F中的一个子集,即X= 。对于F 中的一个子集C?F,若C中的X的子集覆盖了X,即X= ,则称C覆盖了X。集合覆盖问题就是要找出F中覆盖X的最小子集C*,使得 |C*|=min{ |C||C? F 且C覆盖X } 弭痒胜疠胴呦坛颦桢裰疵舸棘润粱痔溷植嗨济嫠滹吧皋舐我葳瞪趱镳殍斋溲峻圻堞撕肀圭擀 * 9.5 集合覆盖问题的近似算法 集合覆盖问题举例: 用12个黑点表示集合X。F={S1,S2,S3,S4,S5,S6,},如图所示。容易看出,对于这个例子,最小集合覆盖为:C={S3,S4,S5,}。 媲钨泊埋闱探等陨煅旱毙耢桔逑管难滤嘻闼则辄丙甥煨苎趵桂钚尕槁屡线箭歌脑舰闼悄毡磴壶拉售宵穷迢手学狐矮萍湍钛号咏偷癍 * 9.5 集合覆盖问题的近似算法 集合覆盖问题近似算法——贪心算法 算法的循环体最多执行min{|X|,|F|}次。而循环体内的计算显然可在O(|X||F|)时间内完成。因此,算法的计算时间为O(|X||F|min{|X|,|F|})。由此即知,该算法是一个多项式时间算法。 Set greedySetCover (X,F) { U=X; C=?; while (U !=?) { 选择F中使|S∩U|最大的子集S; U=U-S; C=C∪{S};

文档评论(0)

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

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

1亿VIP精品文档

相关文档