- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 1 满足三角不等式的旅行售货员问题 void approxTSP (Graph G) { (1)选择G的任一顶点r; (2)用Prim算法找出带权图G的一棵以r为根的最小生成树T; (3)前序遍历树T得到的顶点表L; (4)将r加到表L的末尾,按表L中顶点次序组成回路H,作为计 算结果返回; } 当费用函数满足三角不等式时,算法找出的旅行售货员回路的费用不会超过最优旅行售货员回路费用的2倍。 算法的时间复杂性:O(n2) * (b)表示找到的最小生成树T;(c)表示对T作前序遍历的次序;(d)表示L产生的哈密顿回路H; (e)是G的一个最小费用旅行售货员回路。 示例求解过程: 线路: a→b→c→b→h→b →a→d→e→f→e→g→e→d→a L=(a, b, c, h, d, e, f, g) H=(a→b→c→h→d→e →f→g→a) H*=(a→b→c→h→f →g→e→d→a) * 2 一般的旅行售货员问题 在费用函数不一定满足三角不等式的一般情况下,不存在具有常数性能比的解TSP问题的多项式时间近似算法,除非P=NP。 换句话说,若P≠NP,则对任意常数ρ1,不存在性能比为ρ的解旅行售货员问题的多项式时间近似算法。 * 4.4 集合覆盖问题的近似算法 问题描述:给定一个完全无向图G=(V,E),其每一边(u,v)∈E有一非负整数费用c(u,v)。要找出G的最小费用哈密顿回路。 集合覆盖问题的一个实例〈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} * 4.4 集合覆盖问题的近似算法 集合覆盖问题举例: 用12个黑点表示集合X。F={S1,S2,S3,S4,S5,S6,},如图所示。容易看出,对于这个例子,最小集合覆盖为:C={S3,S4,S5,}。 * 4.4 集合覆盖问题的近似算法 集合覆盖问题近似算法——贪心算法 算法的循环体最多执行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}; } return C; } * 4.5 子集和问题的近似算法 问题描述:设子集和问题的一个实例为〈S,t〉。其中,S={x1,x2,…,xn}是一个正整数的集合,t是一个正整数。子集和问题判定是否存在S的一个子集S1,使得 。 * 1 子集和问题的指数时间算法 int exactSubsetSum (S,t) { int n=|S|; L[0]={0}; for (int i=1;i=n;i++) { L[i]=mergeLists(L[i-1],L[i-1]+S[i]); 删去L[i]中超过t的元素; } return max(L[n]); } 算法以集合S={x1,x2,…,xn}和目标值t作为输入。算法中用到将2个有序表L1和L2合并成为一个新的有序表的算法mergeLists(L1,L2)。 * 2 子集和问题的完全多项式时间近似格式 基于算法exactSubsetSum,通过对表L[i]作适当的修整建立一个子集和问题的完全多项式时间近似格式。 在对表L[i]进行修整时,用到一个修整参数δ,0<δ<1。用参数δ修整一个表L是指从L中删去尽可能多的元素,使得每一个从L中删去的元素y,都有一个修整后的表L1中的元素z满足(1-δ)y≤z≤y。可以将z看作是被删去元素y在修整后的新表L1中的代表。 举例:若δ=0.1,且 L=〈10,11,12,15,20,21,22,23,24,215〉,则用δ对L进行修整后得到L1=〈10,12,15,20,23,215〉。其中被删去的数11由10来代表,21和22由20来代表,24由23
原创力文档


文档评论(0)