日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《算法导论》第三版第7章 快速排序 练习思考题 个人答案

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《算法导论》第三版第7章 快速排序 练习思考题 个人答案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

7.1 快速排序的描述

7.1-1

解:
13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11
9, 19, 13, 5, 12, 8, 7, 4, 21, 2, 6, 11
9, 5, 13, 19, 12, 8, 7, 4, 21, 2, 6, 11
9, 5, 8, 19, 12, 13, 7, 4, 21, 2, 6, 11
9, 5, 8, 7, 12, 13, 19, 4, 21, 2, 6, 11
9, 5, 8, 7, 4, 13, 19, 12, 21, 2, 6, 11
9, 5, 8, 7, 4, 2, 19, 12, 21, 13, 6, 11
9, 5, 8, 7, 4, 2, 6, 12, 21, 13, 19, 11
9, 5, 8, 7, 4, 2, 6, 11, 21, 13, 19, 12
return 8

7.1-2

解:r;可以檢查所有元素的值都相同的情況

7.1-3

易證。

7.1-4

解:第四行的≤改為≥。

7.2 快速排序的性能

7.2-1

證明:
T(n)≥c1(n?1)2+cn=c1n2?2c1n+c1+cn≥c1n2T(n)\geq c_1(n-1)^2+cn=c_1n^2 - 2c_1n+c_1+cn\geq c_1n^2T(n)c1?(n?1)2+cn=c1?n2?2c1?n+c1?+cnc1?n2
(c?2c1)n+c1≥0(c-2c_1)n+c_1\geq 0(c?2c1?)n+c1?0
c1≤c2c_1 ≤ \frac{c}{2}c1?2c?
T(n)≤c2(n?1)2+cn=c2n2?2c2n+c2+cn≤c2n2T(n) ≤ c_2(n-1)^2 + cn = c_2n^2 - 2c_2n + c_2 + cn ≤ c_2n^2T(n)c2?(n?1)2+cn=c2?n2?2c2?n+c2?+cnc2?n2
(c?2c2)n+c2≤0(c - 2c_2)n + c_2\leq 0(c?2c2?)n+c2?0
c2≥c2c_2 ≥ \frac{c}{2}c2?2c?
……

7.2-2

解:Θ(n2)Θ(n^2)Θ(n2)

7.2-3

證明(翻譯自參考答案):所有元素降序排列時(shí)我們運(yùn)行的是“最壞情況PARTITION”。它每一步只將要考慮的子數(shù)組大小減1,運(yùn)行時(shí)間Θ(n2)Θ(n^2)Θ(n2)

7.2-4

本題證明翻譯自https://ita.skanev.com/07/02/04.html
證明:
一個(gè)簡(jiǎn)單直觀的論證就足夠了。
數(shù)組排序越多,插入排序的工作量就越少。即,INSERTION-SORT是Θ(n+d),其中d是陣列中的逆序?qū)€(gè)數(shù)。 在上面的例子中,逆序?qū)ν苌?#xff0c;因此插入排序?qū)⒔咏€性。
另一方面,如果PARTITION確實(shí)選擇了不在逆序?qū)χ械脑?#xff0c;它將產(chǎn)生一個(gè)空分區(qū)。由于存在逆序?qū)苌?#xff0c;QUICKSORT很可能產(chǎn)生空分區(qū)。

7.2-5

證明:
(1)最小深度:
αmn=1
m=-logαn=-lgn/lgα
(2)最大深度:
(1-α)Mn=1
M=-lgn/lg(1-α)

7.2-6

證明:
設(shè)nln_lnl?和nr_rr?代表左右兩邊的比例,更均衡表示∣nl?nr∣&lt;1?2α|n_l-n_r| &lt; 1-2αnl??nr?<1?2α
當(dāng)0&lt;nl&lt;α0&lt;n_l&lt;α0<nl?<α時(shí),∣nl?nr∣&gt;1?2α|n_l-n_r| &gt; 1-2αnl??nr?>1?2α
當(dāng)α&lt;nl&lt;1?αα&lt;n_l&lt;1-αα<nl?<1?α時(shí),∣nl?nr∣&lt;1?2α|n_l-n_r| &lt; 1-2αnl??nr?<1?2α
當(dāng)1?α&lt;nl&lt;11-α&lt;n_l&lt;11?α<nl?<1時(shí),∣nl?nr∣&gt;1?2α|n_l-n_r| &gt; 1-2αnl??nr?>1?2α
nln_lnl?是均勻分布的,所以p≈1?2αp≈1-2αp1?2α

7.3 快速排序的隨機(jī)化版本

7.3-1

隨機(jī)化算法遭遇最壞情況的概率很小。

7.3-2

解:Θ(n)Θ(n)Θ(n)Θ(n)Θ(n)Θ(n)

7.4 快速排序分析

7.4-1

證明:
T(n)≥c[0+(n?1)2]+Θ(n)≥cn2T(n) ≥ c[0+(n-1)^2]+Θ(n) ≥ cn^2T(n)c[0+(n?1)2]+Θ(n)cn2
cn2?2cn+c+c′n≥cn&lt;2cn^2-2cn+c+c&#x27;n ≥ cn&lt;^2cn2?2cn+c+cncn<2
只要c′&gt;2cc&#x27; &gt; 2cc>2c,……

7.4-2

證明思路:遞歸式為T(n)=2T(n/2)+Θ(n)T(n)=2T(n/2)+Θ(n)T(n)=2T(n/2)+Θ(n),然后用主定理即可。

7.4-3

證明:
f(q)=q2+(n?q?1)2=q2+(n?1)2?2(n?1)q+q2=2q2?2(n?1)q+(n?1)2f(q)=q^2+(n-q-1)^2=q^2+(n-1)^2-2(n-1)q+q^2=2q^2-2(n-1)q+(n-1)^2f(q)=q2+(n?q?1)2=q2+(n?1)2?2(n?1)q+q2=2q2?2(n?1)q+(n?1)2
f′(q)=4q?2(n?1)f&#x27;(q)=4q-2(n-1)f(q)=4q?2(n?1)
令f′(q)=0令f&#x27;(q)=0f(q)=0
q=n?12q=\frac{n-1}{2}q=2n?1?
當(dāng)q&lt;n?12時(shí),f′(q)&lt;0;當(dāng)n?12時(shí),f′(q)&gt;0當(dāng)q&lt;\frac{n-1}{2}時(shí),f&#x27;(q)&lt;0;當(dāng)\frac{n-1}{2}時(shí),f&#x27;(q)&gt;0當(dāng)q<2n?1?時(shí)f(q)<0當(dāng)2n?1?時(shí)f(q)>0
f(0)=(n?1)2=f(n?1),證畢。f(0)=(n-1)^2=f(n-1),證畢。f(0)=(n?1)2=f(n?1)

7.4-4

證明:
E[X]=∑i=1n?1∑j=i+1n[2j?i+1]E[X]=\sum_{i=1}^{n?1} ∑_{j=i+1}^{n}[\frac{2}{j?i+1}]E[X]=i=1n?1?j=i+1n?[j?i+12?]
=∑i=1n?1∑k=1n?i2k+1]= \sum_{i=1}^{n?1}\sum_{k=1}^{n?i}\frac{2}{k+1}]=i=1n?1?k=1n?i?k+12?]
≥∑i=1n?1∑k=1n?i22k]\geq\sum_{i=1}^{n?1} \sum_{k=1}^{n?i}\frac{2}{2k}]i=1n?1?k=1n?i?2k2?]
≥∑i=1n?1Ω(lgn)]\geq \sum_{i=1}^{n?1}\Omega(lgn)]i=1n?1?Ω(lgn)]
=Ω(nlgn)=\Omega(nlgn)=Ω(nlgn)

7.4-5

cqnlg?n≥cink+cqnlg?(n/k)cqlg?n≥cik+cqlg?n?cqlg?klg?k≥cicqkc_qn\lg{n} \ge c_ink + c_qn\lg(n/k) \\ c_q\lg{n} \ge c_ik + c_q\lg{n} - c_q\lg{k} \\ \lg{k} \ge \frac{c_i}{c_q}kcq?nlgnci?nk+cq?nlg(n/k)cq?lgnci?k+cq?lgn?cq?lgklgkcq?ci??k
在理論中可以按上述過(guò)程確定k,而在實(shí)踐中可以試出k。

7.4-6

解:假設(shè)0&lt;α≤1/20 &lt; \alpha \le 1/20<α1/2
P=6α2?4α3=2α2(3?2α)P = 6\alpha^2 - 4\alpha^3 = 2\alpha^2(3 - 2\alpha)P=6α2?4α3=2α2(3?2α)

思考題

7-1 (Hoare劃分的正確性)

a.

解:
13(i), 19, 9, 5, 12, 8, 7, 4, 11, 2, 6(j), 21
6, 19(i), 9, 5, 12, 8, 7, 4, 11, 2(j), 13, 21
6, 2, 9, 5, 12, 8, 7, 4, 11(j), 19(i), 13, 21

b.

證明思路:該過(guò)程的初始化和循環(huán)條件將i和j控制在數(shù)組下標(biāo)p和r的范圍內(nèi)。

c.

同b。

d.

證明:
循環(huán)不變式:在比較i和j的條件之前,所有元素A[p…i-1]≤x和A[j+1…r]≥x。
初始化:這兩個(gè)重復(fù)塊就是這種情況。
保持:通過(guò)交換A[i]和A[j],我們得到A[p…i]≤x和A[j…r]≥x。遞增i和遞減j保持這個(gè)不變量。
終止:當(dāng)i≥j時(shí),循環(huán)終止。不變量仍然在終止時(shí)保持。

e.

解:

HOARE-QUICESORT(A, p, r) if p< rq = HOARE-PARTITION(A, p, r)HOARE-QUICKSORT(A, p, q-1)HOARE-QUICKSORT(A, q+1, r)

7-2 (針對(duì)相同元素值的快速排序)

a.

解:Θ(n2)Θ(n^2)Θ(n2)

b.

解:

PARTITION'(A, p, r) t = PARTITION(A, p, r) q = t for j = t-1 downto pif A[j] == A[t]q = q - 1exchange A[j] with A[q] return q, t

c.

解:

RANDOMIZED-PARTITION'(A, p, r) i = RANDOM(p, r) exchange A[i] with A[r] return PARTITION'(A, p, r) RANDOMIZED-QUICKSORT'(A, p, r) if p < rq, t = RANDOMIZED-PARTITION'(A, p, r)RANDOMIZED-QUICKSORT'(A, p, q-1)RANDOMIZED-QUICKSORT'(A, t+1, r)

d.

思路:將zij定義為數(shù)組A中第i小的元素中的一個(gè)。

7-3 (另一種快速排序的分析方法)

a.

解:E[Xi] = 1/n

b.

證明:讓第q小元素成為主元。有n種可能的選擇,每種都有Xq的概率。每個(gè)都將通過(guò)在q-1和n-q兩個(gè)部分中分塊并添加線性因子來(lái)解決問(wèn)題。

c.

證明:
E[T(n)]=E[∑q=1nXqT(q?1)+T(n?q)+Θ(n)]E[T(n)] = E[\sum_{q=1}^{n} X_qT(q-1)+T(n-q)+\Theta(n)]E[T(n)]=E[q=1n?Xq?T(q?1)+T(n?q)+Θ(n)]
=∑q?1nE(Xq)E[T(q?1)+T(n?q)+Θ(n)]=\sum_{q-1}^{n}E(X_q)E[T(q-1)+T(n-q)+\Theta(n)]=q?1n?E(Xq?)E[T(q?1)+T(n?q)+Θ(n)]
=1n∑q=1nE[T(q?1)+T(n?q)]+Θ(n)=\frac {1}{n} \sum_{q=1}^{n}E[T(q-1)+T(n-q)]+\Theta(n)=n1?q=1n?E[T(q?1)+T(n?q)]+Θ(n)
=2n∑q=2n?1E[T(q)]+Θ(n)=\frac {2}{n} \sum_{q=2}^{n-1}E[T(q)]+\Theta(n)=n2?q=2n?1?E[T(q)]+Θ(n)

d.

證明:
∑k=2n?1klgk=∑k=2?n2??1klgk+∑k=?n2?n?1klgk\sum_{k=2}^{n-1}klgk=\sum_{k=2}^{\lceil\frac {n}{2}\rceil-1}klgk+\sum_{k=\lceil\frac {n}{2}\rceil}^{n-1}klgkk=2n?1?klgk=k=2?2n???1?klgk+k=?2n??n?1?klgk
≤∑k=1n2klgn2+∑k=n2n?1klgn\leq\sum_{k=1}^{\frac {n}{2}}klg\frac{n}{2}+\sum_{k=\frac {n}{2}}^{n-1}klgnk=12n??klg2n?+k=2n?n?1?klgn
=lgn2?n2+2n8+lgn?3n2?2n8=lg\frac{n}{2}\cdot\frac{n^2+2n}{8}+lgn\cdot\frac{3n^2-2n}{8}=lg2n??8n2+2n?+lgn?83n2?2n?
=n28lgn2+3n28lgn+n4lgn2?n4lgn=\frac{n^2}{8}lg\frac{n}{2}+\frac{3n^2}{8}lgn+\frac{n}{4}lg\frac{n}{2}-\frac{n}{4}lgn=8n2?lg2n?+83n2?lgn+4n?lg2n??4n?lgn
≤n28lgn?n28lg2+3n28lgn=n22lgn?n28\leq\frac{n^2}{8}lgn-\frac{n^2}{8}lg2+\frac{3n^2}{8}lgn=\frac{n^2}{2}lgn-\frac{n^2}{8}8n2?lgn?8n2?lg2+83n2?lgn=2n2?lgn?8n2?

e.

證明:
E[T(n)]=2n∑q=2n?1E[T(q)]+Θ(n)E[T(n)]=\frac{2}{n}\sum_{q=2}^{n-1}E[T(q)]+\Theta(n)E[T(n)]=n2?q=2n?1?E[T(q)]+Θ(n)
≤2n∑q=2n?1aq?lgq+Θ(n)\leq\frac{2}{n}\sum_{q=2}^{n-1}aq\cdot lgq+\Theta(n)n2?q=2n?1?aq?lgq+Θ(n)
≤2an(n22lgn?n28)+Θ(n)\leq\frac{2a}{n}(\frac{n^2}{2}lgn-\frac{n^2}{8})+\Theta(n)n2a?(2n2?lgn?8n2?)+Θ(n)
≤anlgn?an4+Θ(n)\leq anlgn-\frac{an}{4}+\Theta(n)anlgn?4an?+Θ(n)
≤anlgn\leq anlgnanlgn

7-4 (快速排序的棧深度)

a.

證明:由兩次遞歸調(diào)用改為一次遞歸調(diào)用加一次循環(huán)遞歸調(diào)用,而那一次循環(huán)遞歸調(diào)用其實(shí)就是原本的第二次遞歸調(diào)用(參數(shù)相同,只是函數(shù)名不一樣了)。

b.

解:按升序排列輸入,需調(diào)用n次。

c.

解:

TAIL-RECURSIVE-QUICKSORT(A, p, r) while p < rq = PARTITION(A, p, r)if q <= (p + r) / 2TAIL-RECURSIVE-QUICKSORT(A, p, q-1)p = q + 1elseTAIL-RECURSIVE-QUICKSORT(A, q+1, r)r = q - 1

7-5 (三數(shù)取中劃分)

a.

解:pi=A33(i?1)(n?i)n(n?1)(n?2)=6(i?1)(n?i)n(n?1)(n?2)p_i=\frac{A_3^3(i-1)(n-i)}{n(n-1)(n-2)}=\frac{6(i-1)(n-i)}{n(n-1)(n-2)}pi?=n(n?1)(n?2)A33?(i?1)(n?i)?=n(n?1)(n?2)6(i?1)(n?i)?

b.

解:px1n=6(n2?1)(n?n2)n(n?1)(n?2)=3n(n?2)2(n?1)(n?2)=3n2(n?1)\frac{p_x}{\frac{1}{n}}=\frac{6(\frac{n}{2}-1)(n-\frac{n}{2})}{n(n-1)(n-2)}=\frac{3n(n-2)}{2(n-1)(n-2)}=\frac{3n}{2(n-1)}n1?px??=n(n?1)(n?2)6(2n??1)(n?2n?)?=2(n?1)(n?2)3n(n?2)?=2(n?1)3n?
limn→∞px1n=32lim_{n\rightarrow{\infty}}\frac{p_x}{\frac{1}{n}}=\frac{3}{2}limn?n1?px??=23?
增加了12\frac{1}{2}21?

c.

解:
p′=∑i=n32n3pi=∫n32n36(i?1)(n?i)n(n?1)(n?2)di=13n27(n?2)→1327p&#x27;=\sum_{i=\frac{n}{3}}^{\frac{2n}{3}}p_i=\int_{\frac{n}{3}}^{\frac{2n}{3}}\frac{6(i-1)(n-i)}{n(n-1)(n-2)}di=\frac{13n}{27(n-2)}\rightarrow\frac{13}{27}p=i=3n?32n??pi?=3n?32n??n(n?1)(n?2)6(i?1)(n?i)?di=27(n?2)13n?2713?

d.

證明思路:最好情況仍是Ω(nlgn)\Omega(nlgn)Ω(nlgn)

7-6 (對(duì)區(qū)間的模糊排序)

思路:本題是對(duì)區(qū)間的模糊排序,可以理解為對(duì)于兩個(gè)區(qū)間有三種不同的狀態(tài):1)區(qū)間1的右端在區(qū)間2的左端的左方,即區(qū)間1產(chǎn)生的元素必定小于區(qū)間2產(chǎn)生的元素;2)區(qū)間1的右端在區(qū)間2的左端的右方,且區(qū)間1的左端在區(qū)間2的右端的左方,即兩區(qū)間有重疊部分,產(chǎn)生的元素可能大于或等于或小于;3)區(qū)間1的左端在區(qū)間2的右端的右方,即區(qū)間1產(chǎn)生的元素必定大于區(qū)間2產(chǎn)生的元素。這三種情況分別對(duì)應(yīng)非模糊排序的小于、等于、大于三種情況。

a.

解:

FUSSY-SORT(I[2]/*每個(gè)區(qū)間都由兩個(gè)值表示,所以是二維數(shù)組*/, p, r) if p < rq, t = RANDOM-PARTITION(I[2], p, r) // 這里借鑒了思考題7-2的思路FUSSY-SORT(I[2], p, q-1)p = t + 1 // 這里借鑒了思考題7-4的思路 RANDOM-PARTITION(I[2], p, r) key = RANDOM(p, r) exchange I[key][*] with I[r][*] a = I[r][1] b = I[r][2] i = p - 1 j = r + 1 for k = p to r-1if I[k][2] <= ai = i + 1exchange I[k][*] with I[i][*]else if I[k][1] >= bj = j - 1exchange I[k][*] with I[j][*]elsea = max(a, I[k][1])b = min(b, I[k][2]) return (i+1), (j-1)

b.

證明思路:隨著重疊增加,一次分區(qū)后剩余需要排列的部分會(huì)減少,當(dāng)所有區(qū)間都有重疊時(shí),只需分區(qū)一次。

總結(jié)

以上是生活随笔為你收集整理的《算法导论》第三版第7章 快速排序 练习思考题 个人答案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。