分治算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 设A[1..n] 是一个由n 个整数组成的数组,x 是一个整数,给出一个分治算法,要求找出x 在数组A 中的频度,即x 在A 中出现的次数。你的算法的时间复杂度是多少

2. 若在0-1背包问题中各物品是依重量递增排列时,其价值恰好依递减序排列。对这个特殊的0-1背包问题,请设计一个有效算法找出最优解,并给出其时间复杂度分析。

(1)设一函数int count(intb,inte,int x),可求出A[b,e]中x的出现频度,则:

int count(intb,inte,int x){

if(b==e){

return A[b]==x);

}

else{

return count(b,(b+e)/2,x)+count((b+e)/2+1,e,x);

}

}

复杂度O(n),具体地n次比较,n-1次加法运算.

(2)直接从第1个往后选,选到满为止.复杂度O(n)

证明:

假设此方法得出的解不是最优解,则:

设所选物品为1~k,必然存在一个n(n>k),用这个物品代替原所选物品物品时,能取得更优的解值.

但由条件可知,位置大于k的物品重量必然比小于k的物品大,所以至少要替换掉1个;而它的值却小于原物品中的任何一个.所以假设不成立.

按"直接从第1个往后选,选到满为止"的方法选取,得出的解就是最优解.

相关文档
最新文档