(参数传递代价)我们有一个贯穿本书的假设——过程调用中的参数传递花费常量时间,即使传递一个
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)
Θ(q−p+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)。
算法导论 — 思考题4-2 参数传递代价
最新推荐文章于 2022-08-22 13:00:05 发布