您的位置:首页 > 其它

算法导论第三版习题7.4

2016-02-29 17:16 232 查看

7.4-1

我们可以猜测T(n)≥cn2T(n)\ge cn^2:

T(n)≥max0≤q≤n−1[cq2+c(n−q−1)2]+Θ(n)=max0≤q≤n−1[cq2+c(n−q−1)2]+Θ(n)=cn2−2cn+c+Θ(n)≥cn2−2cn+Θ(n)≥cn2\begin{align}
T(n)&\ge \max_{0\le q\le n-1}[cq^2+ c(n-q-1)^2]+\Theta(n)\\
&=\max_{0\le q\le n-1}[cq^2+c(n-q-1)^2]+\Theta(n)\\
&=cn^2-2cn+c+\Theta(n)\\
&\ge cn^2-2cn+\Theta(n)\\
&\ge cn^2
\end{align}

最后一步可以使cc为恰当的数,与Θ(n)\Theta(n)抵消得到。

7.4-2

在最好的情况下,数组每次都被分成⌊n/2⌋和⌈n/2⌉−1\lfloor n/2\rfloor和\lceil n/2 \rceil-1规模的两个字问题,故算法的复杂度为T(n)=T(⌊n/2⌋)+T(⌈n/2⌉−1)+Θ(n)T(n)=T(\lfloor n/2\rfloor) + T(\lceil n/2 \rceil-1)+\Theta(n)

假设T(n)≥cnlgnT(n)\ge cnlgn:

T(n)≥c⌊n/2⌋lg⌊n/2⌋+c(⌈n/2⌉−1)lg(⌈n/2⌉−1)+Θ(n)≥cn/3lg(n/3)+cn/3lg(n/3)+Θ(n)≥2cn/3lgn−2cnlg3+Θ(n)≥2cn/3lgn\begin{align}
T(n)&\ge c\lfloor n/2\rfloor lg\lfloor n/2 \rfloor + c(\lceil n/2\rceil -1)lg(\lceil n/2\rceil -1)+\Theta(n)\\
&\ge cn/3lg(n/3)+cn/3lg(n/3)+\Theta(n)\\
&\ge 2cn/3lgn-2cnlg3+\Theta(n)\\
&\ge 2cn/3lgn
\end{align}

最后一步可以令2cnlg32cnlg3足够大使2cnlg3−Θ(n)<02cnlg3-\Theta(n)\lt 0从而使不等式成立。故T(n)=Ω(nlgn)T(n)=\Omega(nlgn)

7.4-3

直接对q2+(n−q−1)2q^2+(n-q-1)^2对qq求导并使导数为0可求得q=(n−1)/2q=(n-1)/2,故该二次函数的最小值在区间的正中间,那么最大值就在区间的两个端点上取得。

7.4-4

同样的,

E(X)=∑i=1n−1∑j=i+1n2j−i+1=∑i=1n−1∑k=1n−i2k+1≥∑i=1n−1∑k=1n−i22k=∑i=1n−1Ω(lgn)=Ω(nlgn)E(X)=\sum_{i=1}^{n-1}\sum_{j=i+1}^n\frac{2}{j-i+1}=\sum_{i=1}^{n-1}\sum_{k=1}^{n-i}\frac{2}{k+1}\ge \sum_{i=1}^{n-1}\sum_{k=1}^{n-i}\frac{2}{2k}=\sum_{i=1}^{n-1}\Omega(lgn)=\Omega(nlgn)

7.4-5

此时快速排序的层数为n⋅(12)x≤kn\cdot(\frac{1}{2})^x\le k的解lgnklg\frac{n}{k},则快速排序阶段的时间复杂度为O(nlgnk)O(nlg\frac{n}{k});

然后进行插入排序,由于只有每个长度小于kk的子数组内部没有排序,所以在插入排序过程中,每个元素不再需要和它前面所有的元素相比较,而最多只需要比较kk次,一共有nn个元素,所以插入排序过程的时间复杂度为O(nk)O(nk),总的时间复杂度为O(nk+nlgnk)O(nk+nlg\frac{n}{k})

7.4-6

要使最坏划分比例为a:(1−a)a:(1-a),则必须选出的三个数至少有两个是在数组的前面anan个数中,故概率是C23a2=3a2C_3^2a^2=3a^2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: