您的位置:首页 > 其它

《算法导论》第三版第9章 中位数和顺序统计量 练习&思考题 个人答案

2019-01-04 16:46 190 查看

9.1 最小值和最大值

9.1-1

解:
两两比较,直至找到最小值(共需n−1n-1n−1次),将曾与最小值比较过的值进行比较(共需⌈lgn⌉−1\lceil lgn\rceil -1⌈lgn⌉−1次)。
n−1+⌈lgn⌉−1=n+⌈lgn⌉−2n-1+\lceil lgn\rceil -1=n+\lceil lgn\rceil -2n−1+⌈lgn⌉−1=n+⌈lgn⌉−2

9.1-2

解:先两两比较一轮(比较次数⌊n2⌋\lfloor \frac{n}{2}\rfloor⌊2n​⌋),将较大值分为一组(最多⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉个元素),较小值分为一组(最多⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉个元素),之后分别在两组间找出最大值(最小值)(比较次数2⌈n2⌉−22\lceil \frac{n}{2}\rceil-22⌈2n​⌉−2),⌊n2⌋+2⌈n2⌉−2=⌈3n2⌉−2\lfloor \frac{n}{2}\rfloor+2\lceil \frac{n}{2}\rceil-2=\lceil \frac{3n}{2}\rceil-2⌊2n​⌋+2⌈2n​⌉−2=⌈23n​⌉−2。

9.2 期望为线性时间的选择算法

9.2-1

易证。。

9.2-2

在一个分区中选取主元不会影响子问题的概率。也就是说,在RANDOMIZED-PARTITION中对RANDOM的调用产生一个结果,与下一次迭代中的调用无关。

9.2-3

RANDOMIZED-SELECT(A, p, r, i)
while p < r
q = RANDOMIZED-PARTITION(A, p, r)
k = q - p + 1
if i == k
return A[q]
else if i < k
r = q - 1
else p = q + 1
return A

9.2-4

[p]思路:依次选择9、8、7、6、5、4、3、2、1。

9.3 最坏情况为线性时间的选择算法

9.3-1

解:
(1)T(n)≤{O(1), n&lt;126T(⌈n7⌉)+T(5n7+8)+O(n), n≥126T(n)\leq \begin{cases} O(1), &amp; \ n&lt;126 \\ T(\lceil\frac{n}{7}\rceil)+T(\frac{5n}{7}+8) +O(n), &amp; \ n\geq 126\end{cases}T(n)≤{O(1),T(⌈7n​⌉)+T(75n​+8)+O(n),​ n<126 n≥126​
关于数字126的证明:
cn7+c+5cn7+8c+an≤cn\frac{cn}{7}+c+\frac{5cn}{7}+8c+an\leq cn7cn​+c+75cn​+8c+an≤cn
c≥7ann−63c \geq 7a\frac{n}{n-63}c≥7an−63n​
取126的思路类似于第124页取数字140的思路。。。
(2)T(n)≤T(⌈n3⌉)+T(2n3+4)+O(n)T(n)\leq T(\lceil\frac{n}{3}\rceil)+T(\frac{2n}{3}+4) +O(n)T(n)≤T(⌈3n​⌉)+T(32n​+4)+O(n)
时间复杂度是Ω(nlgn)\Omega(nlgn)Ω(nlgn)

9.3-2

证明:
310−6n≥36140&gt;14\frac{3}{10}-\frac{6}{n}\geq \frac{36}{140} &gt;\frac{1}{4}103​−n6​≥14036​>41​

9.3-3

思路:使用SELECT
解:

BEST-CASE-QUICKSORT(A, p, r)
if p < r
i = floor((r-p+1)/2)
x = SELECT(A, p, r, i)
q = PARTITION(x)
BEST-CASE-QUICKSORT(A, p, q-1)
BEST-SACE-QUICKSORT(A, q+1, r)

9.3-4

这题不太明白,好像翻译错了?
参考https://ita.skanev.com/09/03/04.html

9.3-5

解:

SELECT'(A, p, r, i)
if p == r
return A

x = MEDIAN(A, p, r) q = PARTITION(x) k = q - p + 1 if i == k return A[q] else if i < k return SELECT'(A, p, q-1, i) else return SELECT'(A, q+1, r, i-k)

[p]递归式T(n)≤T(n2+O(n))T(n)\leq T(\frac{n}{2}+O(n))T(n)≤T(2n​+O(n))
T(n)=O(n)T(n)=O(n)T(n)=O(n)

9.3-6

思路:找出分位数中的中位数,将集合分为两个大小相近的部分,再进行分治。这题没有给出代码的原因“分成k个等大小集合”不太具体,分割后是包含这些分位数还是不包括呢。。。比如说把1,2,3,4,5分为三个部分,是2,4两个分位数吗?还是没法平均分呢?

9.3-7

思路:先找出中位数,再对每个元素与中位数作差取绝对值,找出前k小的绝对值,再依此找到原元素。

9.3-8

思路:
(如果X和Y的长度为1,就输出较小值)先分别找出X和Y的中位数进行比较(如果相等直接输出),中位数比较小的那一个数组削去前半截(保留⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋个),中位数比较大的那一个数组削去后半截(也保留⌊n2⌋\lfloor\frac{n}{2}\rfloor⌊2n​⌋个),再重复这一操作。

9.3-9

解:
y取中位数(n为奇数)或上中位数与下中位数之间任意一值(n为偶数)。易证。

思考题

9-1 (有序序列中的i个最大数)

a.

解:O(nlgn)O(nlgn)O(nlgn)

b.

解:O(n+ilgn)O(n+ilgn)O(n+ilgn)

c.

解:O(n+ilgi)O(n+ilgi)O(n+ilgi)

9-2 (带权中位数)

a.

思路:权重相等时,重量取决于数量。

b.

解:

WEIGHTED-MEDIAN(A)
SORT(A) // 选用一种O(nlgn)的排序算法就好
weight = 0
for i = 1 to A.length
weight = weight + A[i].weight
if weight >= 1/2
return A[i-1]

c.

解:求出中位数后进行权重的PARTITION,减去较小部分的重量后重复(注意后面就不一定是找中位数了,每一次PARTITION要计算要找到怎样的一个权重比)。

d.

证明思路:设f§是选在p点时的总距离,只要证明f(y)−f(x)≥0f(y)-f(x)\geq 0f(y)−f(x)≥0(x为加权中位数,y为非输入点)始终成立。
假设y>x(y<x时证明思路也一样),将y,x,xi的大小关系进行分类,可以分别证明f(y)−f(x)≥0f(y)-f(x)\geq 0f(y)−f(x)≥0。

e.

思路:看这意思就是要分别取x和y的带权中位数。证明和d类似,分别证明x的总距离和y的总距离最小即可。

9-3 (小顺序统计量)

a.

思路:提示给的很清楚。。
解:

if i >= n/2
SELECT
else
// 按照提示说的做

b.

证明思路:用代入法。

c.

代入b。

d.

代入b?

9-4 (随机选择的另一种分析方法)

a.

思路:只要i或j是在包含ijk的最小区间里第一个被选中的主元即可。
解:
E[Xijk]={2k−i+1, i&lt;j≤k2j−i+1, i≤k≤j2j−k+1, k≤i&lt;jE[X_{ijk}]=\begin{cases} \frac{2}{k-i+1}, &amp; \ i&lt;j\leq k \\ \frac{2}{j-i+1}, &amp; \ i\leq k\leq j \\ \frac{2}{j-k+1}, &amp; \ k\leq i&lt;j \end{cases}E[Xijk​]=⎩⎪⎨⎪⎧​k−i+12​,j−i+12​,j−k+12​,​ i<j≤k i≤k≤j k≤i<j​

b.

本题证明来自https://ita.skanev.com/09/problems/04.html
E[Xk]=∑i=1n−1∑j=i+1n E[Xijk]E[X_k] = \sum_{i=1}^{n-1} \sum_{j=i+1}^n \ E[X_{ijk}]E[Xk​]=∑i=1n−1​∑j=i+1n​ E[Xijk​]
=∑i=1k∑j=i+1nE[Xijk]+∑i=k+1n−1∑j=i+1nE[Xijk]= \sum_{i=1}^k\sum_{j=i+1}^n E[X_{ijk}]+ \sum_{i=k+1}^{n-1} \sum_{j=i+1}^n E[X_{ijk}]=∑i=1k​∑j=i+1n​E[Xijk​]+∑i=k+1n−1​∑j=i+1n​E[Xijk​]
=∑i=1k(∑j=i+1k−1E[Xijk]+∑j=knE[Xijk])+∑i=k+1n−1∑j=i+1nE[Xijk]= \sum_{i=1}^k \bigg(\sum_{j=i+1}^{k-1}E[X_{ijk}]+ \sum_{j=k}^nE[X_{ijk}] \bigg)+\sum_{i=k+1}^{n-1}\sum_{j=i+1}^nE[X_{ijk}]=∑i=1k​(∑j=i+1k−1​E[Xijk​]+∑j=kn​E[Xijk​])+∑i=k+1n−1​∑j=i+1n​E[Xijk​]
=∑i=1k∑j=i+1k−1E[Xijk]+∑i=1k∑j=knE[Xijk]+∑i=k+1n−1∑j=i+1nE[Xijk]= \sum_{i=1}^k\sum_{j=i+1}^{k-1} E[X_{ijk}]+ \sum_{i=1}^k\sum_{j=k}^nE[X_{ijk}]+\sum_{i=k+1}^{n-1} \sum_{j=i+1}^nE[X_{ijk}]=∑i=1k​∑j=i+1k−1​E[Xijk​]+∑i=1k​∑j=kn​E[Xijk​]+∑i=k+1n−1​∑j=i+1n​E[Xijk​]
=∑i=1k−2∑j=i+1k−1E[Xijk]+∑i=1k∑j=knE[Xijk]+∑i=k+1n−1∑j=i+1nE[Xijk]= \sum_{i=1}^{k-2}\sum_{j=i+1}^{k-1} E[X_{ijk}]+ \sum_{i=1}^k\sum_{j=k}^nE[X_{ijk}]+ \sum_{i=k+1}^{n-1} \sum_{j=i+1}^n E[X_{ijk}]=∑i=1k−2​∑j=i+1k−1​E[Xijk​]+∑i=1k​∑j=kn​E[Xijk​]+∑i=k+1n−1​∑j=i+1n​E[Xijk​]
=∑i=1k−2∑j=i+1k−12k−i+1+∑i=1k∑j=kn2j−i+1+∑i=k+1n−1∑j=i+1n2j−k+1= \sum_{i=1}^{k-2}\sum_{j=i+1}^{k-1} \frac{2}{k - i + 1}+\sum_{i=1}^k\sum_{j=k}^n\frac{2}{j - i + 1}+ \sum_{i=k+1}^{n-1} \sum_{j=i+1}^n\frac{2}{j - k + 1}=∑i=1k−2​∑j=i+1k−1​k−i+12​+∑i=1k​∑j=kn​j−i+12​+∑i=k+1n−1​∑j=i+1n​j−k+12​
=2(∑i=1k∑j=kn1j−i+1+∑i=k+1n−1∑j=i+1n1j−k+1+∑i=1k−2∑j=i+1k−11k−i+1)= 2\bigg(\sum_{i=1}^k\sum_{j=k}^n\frac{1}{j - i + 1}+ \sum_{i=k+1}^{n-1} \sum_{j=i+1}^n\frac{1}{j - k + 1}+ \sum_{i=1}^{k-2} \sum_{j=i+1}^{k-1} \frac{1}{k - i + 1}\bigg)=2(∑i=1k​∑j=kn​j−i+11​+∑i=k+1n−1​∑j=i+1n​j−k+11​+∑i=1k−2​∑j=i+1k−1​k−i+11​)
=2(∑i=1k∑j=kn1j−i+1+∑i=k+1n−1∑j=i+1n1j−k+1+∑i=1k−2k−i−1k−i+1)= 2\bigg(\sum_{i=1}^k\sum_{j=k}^n\frac{1}{j - i + 1}+ \sum_{i=k+1}^{n-1} \sum_{j=i+1}^n\frac{1}{j - k + 1}+ \sum_{i=1}^{k-2}\frac{k - i - 1}{k - i + 1}\bigg)=2(∑i=1k​∑j=kn​j−i+11​+∑i=k+1n−1​∑j=i+1n​j−k+11​+∑i=1k−2​k−i+1k−i−1​)
=2(∑i=1k∑j=kn1j−i+1+∑j=k+2n∑i=k+1j−11j−k+1+∑i=1k−2k−i−1k−i+1)= 2\bigg(\sum_{i=1}^k\sum_{j=k}^n\frac{1}{j - i + 1}+ \sum_{j=k+2}^n \sum_{i=k+1}^{j-1} \frac{1}{j - k + 1}+\sum_{i=1}^{k-2}\frac{k - i - 1}{k - i + 1}\bigg)=2(∑i=1k​∑j=kn​j−i+11​+∑j=k+2n​∑i=k+1j−1​j−k+11​+∑i=1k−2​k−i+1k−i−1​)
=2(∑i=1k∑j=kn1j−i+1+∑j=k+2nj−k−1j−k+1+∑i=1k−2k−i−1k−i+1)= 2\bigg( \sum_{i=1}^k\sum_{j=k}^n\frac{1}{j - i + 1}+ \sum_{j=k+2}^n\frac{j - k - 1}{j - k + 1}+ \sum_{i=1}^{k-2} \frac{k - i - 1}{k - i + 1}\bigg)=2(∑i=1k​∑j=kn​j−i+11​+∑j=k+2n​j−k+1j−k−1​+∑i=1k−2​k−i+1k−i−1​)
≤2(∑i=1k∑j=kn1j−i+1+∑j=k+1nj−k−1j−k+1+∑i=1k−2k−i−1k−i+1)\le 2\bigg(\sum_{i=1}^k\sum_{j=k}^n\frac{1}{j - i + 1}+ \sum_{j=k+1}^n\frac{j - k - 1}{j - k + 1}+ \sum_{i=1}^{k-2} \frac{k - i - 1}{k - i + 1} \bigg)≤2(∑i=1k​∑j=kn​j−i+11​+∑j=k+1n​j−k+1j−k−1​+∑i=1k−2​k−i+1k−i−1​)

c.

∑j=k+1nj−k−1j−k+1+∑i=1k−2k−i−1k−i+1≤∑j=k+1n1+∑i=1k−21=n−k+k−2≤n\sum_{j=k+1}^n\frac{j-k-1}{j-k+1} + \sum_{i=1}^{k-2}\frac{k-i-1}{k-i+1}\le \sum_{j=k+1}^n 1 + \sum_{i=1}^{k-2}1 = n - k + k - 2 \le nj=k+1∑n​j−k+1j−k−1​+i=1∑k−2​k−i+1k−i−1​≤j=k+1∑n​1+i=1∑k−2​1=n−k+k−2≤n

d.

易证。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: