算法导论 — 思考题4-2 参数传递代价

参数传递代价)我们有一个贯穿本书的假设——过程调用中的参数传递花费常量时间,即使传递一个 N N N个元素的数组也是如此。在大多数系统中,这个假设是成立的,因为传递的是指向数组的指针,而非数组本身。本题讨论三种参数传递策略:
  1. 数组通过指针来传递。时间 = Θ ( 1 ) Θ(1) Θ(1)
  2. 数组通过元素复制来传递。时间 = Θ ( N ) Θ(N) Θ(N),其中 N N N是数组的规模。
  3. 传递数组时,只复制过程可能访问的子区域。若子数组 A [ p . . q ] A[p..q] A[p..q]被传递,则时间 = Θ ( q − p + 1 ) Θ(q−p+1) Θ(qp+1)
  a. 考虑在有序数组中查找元素的递归二分查找算法(参见练习2.3-5)。分别给出上述三种参数传递策略下,二分查找最坏情况运行时间的递归式,并给出递归式解的好的上界。令N为原问题的规模,n为子问题的规模。
  b. 对2.3.1节的MERGE-SORT算法重做(a)。
  
  
  a. 二分查找
  如果忽略参数传递时间,二分查找的运行时间的递归式为 T ( n ) = T ( n / 2 ) + Θ ( 1 ) T(n) = T(n/2) + Θ(1) T(n)=T(n/2)+Θ(1)
  (1) 数组通过指针来传递
  最坏情况运行时间递时式为 T ( n ) = T ( n / 2 ) + Θ ( 1 ) + Θ ( 1 ) = T ( n / 2 ) + Θ ( 1 ) T(n) = T(n/2) + Θ(1) + Θ(1) = T(n/2) + Θ(1) T(n)=T(n/2)+Θ(1)+Θ(1)=T(n/2)+Θ(1),求解该递归式得到 T ( n ) = O ( l g n ) T(n) = O({\rm lg}n) T(n)=O(lgn)
  (2) 数组通过元素复制来传递
  最坏情况运行时间递时式为 T ( n ) = T ( n / 2 ) + Θ ( 1 ) + Θ ( N ) = T ( n / 2 ) + Θ ( N ) T(n) = T(n/2) + Θ(1) + Θ(N) = T(n/2) + Θ(N) T(n)=T(n/2)+Θ(1)+Θ(N)=T(n/2)+Θ(N),其中 N N N为原数组规模,求解该递归式得到 T ( n ) = O ( n l g n ) T(n) = O(n{\rm lg}n) T(n)=O(nlgn)
  (3) 数组通过只复制子问题要访问的区域来传递
  最坏情况运行时间递时式为 T ( n ) = T ( n / 2 ) + Θ ( 1 ) + Θ ( n ) = T ( n / 2 ) + Θ ( n ) T(n) = T(n/2) + Θ(1) + Θ(n) = T(n/2) + Θ(n) T(n)=T(n/2)+Θ(1)+Θ(n)=T(n/2)+Θ(n),用主方法求解该递归式得到 T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)
  b. MERGE-SORT
  如果忽略参数传递时间,MERGE-SORT的运行时间的递归式为 T ( n ) = 2 T ( n / 2 ) + Θ ( n ) T(n) = 2T(n/2) + Θ(n) T(n)=2T(n/2)+Θ(n)
  (1) 数组通过指针来传递
  最坏情况运行时间递时式为 T ( n ) = 2 T ( n / 2 ) + Θ ( n ) + Θ ( 1 ) = 2 T ( n / 2 ) + Θ ( n ) T(n) = 2T(n/2) + Θ(n) + Θ(1) = 2T(n/2) + Θ(n) T(n)=2T(n/2)+Θ(n)+Θ(1)=2T(n/2)+Θ(n),求解该递归式得到 T ( n ) = O ( n l g n ) T(n) = O(n{\rm lg}n) T(n)=O(nlgn)
  (2) 数组通过元素复制来传递
  最坏情况运行时间递时式为 T ( n ) = 2 T ( n / 2 ) + Θ ( n ) + Θ ( N ) = 2 T ( n / 2 ) + Θ ( N ) T(n) = 2T(n/2) + Θ(n) + Θ(N) = 2T(n/2) + Θ(N) T(n)=2T(n/2)+Θ(n)+Θ(N)=2T(n/2)+Θ(N),其中 N N N为原数组规模,求解该递归式得到 T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)
  (3) 数组通过只复制子问题要访问的区域来传递
  最坏情况运行时间递时式为 T ( n ) = T ( n / 2 ) + Θ ( n ) + Θ ( n ) = 2 T ( n / 2 ) + Θ ( n ) T(n) = T(n/2) + Θ(n) + Θ(n) = 2T(n/2) + Θ(n) T(n)=T(n/2)+Θ(n)+Θ(n)=2T(n/2)+Θ(n),求解该递归式得到 T ( n ) = O ( n l g n ) T(n) = O(n{\rm lg}n) T(n)=O(nlgn)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值