算法导论第九章思考题参考答案(17)

Problem 9-1 

a.排序耗时nlg (n),列出它们耗时i,所以总运行时间是O(nlg (n) + i)
b.堆化耗时nlg (n),每次提取耗时lg(n),因此,总运行时间为O((n + i) lg(n))
c.在第i个最大的周围找到并划分需要时间n。然后,从分区中排序长度为i的子数组需要时间ilg(i)。所以,总运行时间是O(n + i lg(i))。

Problem 9-2 

a.设mk为小于xk的xi的个数。当每个xi的权重为1/n时,我们得到。使这些和分别< 1/2和≤1/2 的唯一值是\left \lceil n/2\right \rceil-1,而x的这个值必须是中位数,因为它有相同数量的大于和小于它的x'。
b.首先使用归并排序在O(n log n)时间内对xi的值进行排序。设Si为这个排序数组的前i个元素的权重之和,并注意更新Si是O(1)。计算S1, S2,…直到k使S_{k-1} < 1/2且Sk≥1/2。加权中值是xk。
c.我们修改SELECT以在线性时间内完成此操作。设x为中位数中的中位数。计算,看看这两个是否大于1/2。如果不是,停下来。如果是,则对已知包含加权中位数的较小或较大元素的集合进行递归。这不会改变运行时,所以它是Θ(n)。
d.设p为最小值,并假设p不是加权中值。设\epsilon足够小,使得\epsilon< min_{i}(|p−pi|),其中如果p = pk我们不包括k。如果pm是加权中位数并且p < pm,则选择> 0。否则选择\epsilon< 0。然后我们有

因为和的差取相反的符号。

e.观察 

单独最小化每个和就足够了,我们可以这样做,因为我们分别选择了px和py。在e部分,我们简单地取p = (px, py), px是x坐标的加权中值,py是y坐标的加权中值。 

 Problem 9-3

a.如果i≥n/2,则使用本章的算法在T(n)时间内得到答案。如果i < n/2,那么,我们可以比较列表中不相交的元素对,然后我们知道第i个最小的元素在每对元素中较小的元素集合中。那么,我们可以递归,这就得到了运行时间在这种情况下是\left \lfloor n/2 \right \rfloor+U_{i}(\left \lceil n/2 \right \rceil)+T(2i)。注意,最后一项来自于这样一个事实,即第i个最小的元素也可以是任何与子问题中第i个最小元素配对的元素。 

b.通过代入法,假设对于较小的n, Ui(n) = n + cT(2i) lg(n/i),则根据i是否< n/4有两种情况。如果它是,Ui (n) =\left \lfloor n/2 \right \rfloor + Ui (\left \lceil n/2 \right \rceil) + T(2i)\leq n / 2 + n / 2 + cT(2i)lg (n / 2i) + T(2i)。如果c≥1,这个满足递归式。另一种情况是n/4 ≤ i < n/2。在这种情况下,我们有Ui (n) = n/2 + T(\left \lceil n/2 \right \rceil) + T(2i)\leq n / 2 + 2T(2i)。当c≥2时成立。我们可以取c = 2,这两种递归都可以。

c.由上一部分可知,如果i是常数,那么O(T(2i) lg(n/i))就变成了T(lg(n))。那么Ui(n) = n + O(T(2i) lg(n/i)) = n + O(lg(n))。

d,从c部分,我们把n/k代入i得到Ui(n) = n+O(T(2i) lg(n/i)) = n+O(T(2n/k) lgk)。

 Problem 9-4

a.我们只需要担心当我们选择一个在min(zi, zj, zk)和max(zi, zj, zk)之间的主元素时会发生什么,因为此时我们要么选择zi或zj并比较它们,要么在zi和zj之间选择一个元素而不比较它们,或者在zk和[zi, zj]区间之间选择一个元素,这样我们就再也不会从a中选择枢轴了
包含zi和zj的范围。我们分成三组。如果zk ≤ zi < zj,则E(Xijk) = 2/(j−k+1)。如果zi ≤ zk < zj,则E(Xijk) = 2/( j−i+1)。如果zi < zj ≤ zk,则E(Xijk) =2/ (k−i+1)。 

b.

对于第二项,固定某个值m,当j不超过m时,2/(m-k+1)项会出现一次,所以在求和中m - (k +1)次。对于第三项,求和中的每一项都不依赖于j所以我们可以把它写成。这就给出了

 

c.我们可以将(b)的第二项和第三项的和限定为1,所以这些项的总贡献是n−(k + 1)+1+ k−2 = n−2。
对于第一个双和,考虑c的形式为1/c的项。最多有c个这样的项,因为我们必须有j−i = c−1。出现的最大项为1,出现的最小项为1/n,因此双和的总和最多为n,因此E[Xk]≤2(n + n−2) ≤ 4n。

d. RANDOMIZED-SELECT的运行时间主要由RANDOMIZED-PARTITION的运行时间决定,而RANDOMIZED-PARTITION的运行时间主要由比较决定。通过(c)部分,我们知道整个算法(包括递归)的预期比较次数为O(n)。

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值