网站大量收购独家精品文档,联系QQ:2885784924

子集与问题.pptx

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

子集和问题 子集和问题的一个实例是一个对(S,t),其中S是一个正整数的集合{X1,X2,...,Xn} ,t为一个正整数。这个判定问题是判定是否存在S的一个子集,使得其中的数据加起来恰为目标值t。 与此判定问题想联系的最优化问题常常出现于实际应用中。在这种优化问题中,希望找到{X1,X2,...,Xn}的一个子集,使其中元素相加之和尽可能地大,但是不能大于t。 例如,假如我们有一辆能装不多于 t磅重的货的卡车,并有n个不同的盒子要装运,其中第i个的重量为Xi磅。我们希望在不超过重量极限前提下,将货尽可能地装满卡车。;一个指数时间的准确算法 假设对于S的每个子集S’,都计算出S’中所有元素的和。接着,在所有其元素和不超过t的子集中,选择其和最接近t的那个子集。显然,这一算法将返回最优解,但它可能需要指数级的时间。 为了实现这一算法,可以采用一种迭代过程:在第i轮迭代中,计算{X1,X2,...,Xi}的所有子集的元素和,计算的基础是 {X1,X2,...,Xi-1}的所有子集的和。再此计算过程中,一旦某个特定的子集S’的和超过了t,就没有必要再对他进行处理了,因为S’的超集都不会成为最优解。;下面给出这一策略的一个实现 (1)过程EXACT-SUBSET-SUM的输入为一个集合S= {X1,X2,...,Xn}和一个目标值t;这个过程以迭代的方式计算列表Li,其中列出了{X1,X2,...,Xn}的所有子集的和,这些和值都不超过目标值t。接着,它返回Ln中的最大值。 (2)如果L是一个由正整数所构成的表,x是一个正整数,我们用L+x来表示通过对L中每个元素增加x而导出的整数列表。例如,如果L=1,2,3,5,9,则L+2=3,4,5,7,11。我们也对集合应用这个记号,因而S+x={s+x:s ∈ S} (3)我们还用到了一个辅助过程MERGE-LIST(L,L’),返回对它的两个已排序的输入列表L和L’合并及删除重复值后所产生的排序列表。MERGE-LIST的运行时间为o(|L|+|L’|)。;EXACT-SUBSET-SUM(S,t) 1 n ← |S| 2 L0 ← 0 3 for i ← 1 to n 4 do Li ← MERGE-LIST(Li-1,Li-1+xi) 5 remove from Li every element that is great than t 6 return the largest element in Ln ;例题:求S={1,4,5}的子集和。 设Pi表示通过选择{X1,X2,...,Xi}的一个子集并将其成员加起来所得到的所有值的集合。 P0={0} P1={0,1} P2={0,1,4,5} P3={0,1,4,5,6,9,10} 给定等式:Pi=Pi-1 ∪ (Pi-1+xi);一个完全多项式时间的近似方案;例如,如果δ=0.1,且 L=10,11,12,15,20,21,22,23,24,29 则可以修整L而得 L’=10,12,15,20,23,29 其中被删除的值11由10 来代表,被删除的值21和22 由20 来代表,被删除的值24由23 来代表。表的修整版本中的元素也是原表的元素,对一个表加以修整后,可以大大减少表中的元素,同时还可以在表中为每个被从该表中删除的元素保留一个与其很接近的代表值。;下面给出的过程在给定L和δ的情况下,在时间Θ(m)内修整一个输入表L=Y1,Y2,….,Ym假定L已排成单调递增次序。该过程的输出是一个修整过的有序表。L的元素被按照单调递增次序加已扫描,而一个数被加入返回的列表L’中,仅当它是L的第一个元素,或者如果它不能由最近被放入L’中的数来代表。 给定过程TRIM 后,可以如下构造近似函数。这个过程的输入为包含n个整数的集合S= {X1,X2,...,Xn} ,一个目标整数t,以及一个近似参数ε,此处:0ε1它返回一个值z,该值落在最优解的1+ε倍内。 ;EXACT-SUBSET-SUM(S,t,∈ ) 1 n ← |S| 2 L0 ← 0 3 for i ← 1 to n 4 do Li ← MERGE-LIST(Li-1,Li-1+xi) 5 Li ←TRIM(Li ∈/2n) 6 remove from Li every element that is great than t 7 let z* be the largest value in Ln 8 return the largest element in Ln ;利用APPROX-SUBSET-SUM计

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档