算法导论第四章最后思考题

来源:互联网 发布:java工程师面试简历 编辑:程序博客网 时间:2024/05/21 22:27

最近买了《算法导论》第三版新书,所以就不按照第二版的习题来写答案了。



第二版的4.2找出所缺的整数,这题已经在第三版被删除,所以就不做解答。

4.2参数传递的代价

整个这本书中,我们都假定过程调用中的参数传递所花时间是常数,即使所传递的参数是N个元素的数组也是一样。这个假设对大多数系统都是有效的,因为当参数为数组时,所传递的只是指向该数组的指针,而不是该数组本身。本题讨论三种参数传递策略:

  1. 数组是由一个指针来传递。时间=Θ(1)。
  2. 参数数组通过复制而传递。时间Θ(N),N是该数组的大小。
  3. 一个数组在被传递时,仅拷贝调用过程可能引用的数组的子域。若传递的是子数组 A[p..q]。时间=Θ(p-q+1)。

a) 对于二分查找2.3-5 针对上面的三种参数传递策略,给出最坏情况运行时间的递归式,并给出其解的上界。可以设N为原问题的规模,n为子问题的规模。

b) 重做2.3.1节中MERGE_ SORT的a)部分。



b3) T=θ(q-p+1)=θ(n)时,T(n)=2T(n/2)+θ(n)+θ(n)=2T(n/2)+θ(n) 同b1) T(n)=O(nlog2n) 所以merge-sort算法对于这三种情况都一样,所以这个算法可以忽略参数传递带来的影响。






4.4略。

4.5VLSI测试(芯片测试)

Diogenes教授有n个被认为是完全相同的VLSI芯片,原则上他们是可以互相测试的。教授的测试装置一次可测二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结果如下:

A芯片报告B芯片报告结论B是好的A是好的都是好的,或都是坏的B是好的A是坏的至少一片是坏的B是坏的A是好的至少一片是坏的B是坏的A是坏的至少一片是坏的
  1. 证明若多于n/2的芯片是坏的,在这种成对测试方式下,使用任何策略都不能确定哪个芯 片是好的。假设坏的芯片可以联合起来欺骗教授。
  2. 假设有多于n/2的芯片是好的,可虑从n片中找出一片好芯片的问题。证明⌊ n/2 ⌋对测试就足以使问题的规模降至近原来的一半。
  3. 假设多于n/2的芯片是好的,证明好的芯片可用Θ(n)对测试找出。给出并解答表达 测试次数的递归式。





4.6略



0 0
原创粉丝点击