【发布时间】:2019-12-20 14:45:26
【问题描述】:
问题:
4-2 参数传递成本
在本书中,我们假设在过程调用期间传递参数需要恒定的时间,即使传递的是 N 元素数组。这个假设在大多数系统中都是有效的,因为传递的是指向数组的指针,而不是数组本身。 这个问题检查了三种参数传递策略的含义:
- 数组通过指针传递。时间 Theta(1)
2。通过复制传递一个数组。时间 Theta(N),其中 N 是数组的大小。
- 通过仅复制被调用过程可能访问的子范围来传递数组。如果传递了子数组 A[p..q],则时间 Theta(q-p+1)。
一个。考虑在排序数组中查找数字的递归二进制搜索算法(参见练习 2.3-5)。当使用上述三种方法中的每一种传递数组时,给出二分搜索的最坏情况运行时间的递归,并给出递归解的良好上限。设 N 为原始问题的大小,n 为子问题的大小。
b.重做第 2.3.1 节中的 MERGE-SORT 算法的 (a) 部分。
我无法理解如何解决案例 2 的重复问题,即通过复制两种算法来传递数组。
以案例2的二分查找算法为例,大多数答案给出的递归是T(n)=T(n / 2)+Theta(N)。我对此没有任何问题。
这是我在网上找到的一个看起来正确的答案:
T(n)
= T(n/2) + cN
= 2cN + T(n/4)
= 3cN + T(n/8)
= Sigma(i = 0 到 lgn - 1) (2^i cN / (2^i))
= cNlgn
= θ(nlgn)
我无法理解倒数第二行如何导致最后一行的答案。为什么不在 Theta(Nlgn) 中表示它?在 Theta 表示法中,N 怎么变成 n?
N 和 n 感觉有些联系。我无法理解它们之间的联系以及如何将其应用到解决方案中。
【问题讨论】:
标签: arrays algorithm performance clrs