对
x
1
,
…
,
x
n
x_1,\dots,x_n
x1,…,xn进行快速排序
partition node:
x
[
k
]
x[k]
x[k]为随机划分元
x
[
k
]
x[k]
x[k] 被选择的概率为
1
/
n
1/n
1/n,令
C
n
C_n
Cn 为规模为n的问题的比较次数(即
T
(
n
)
T(n)
T(n) )
C
n
=
(
n
−
1
)
+
1
n
∑
k
=
1
n
(
C
k
−
1
+
C
n
−
k
)
=
(
n
−
1
)
+
1
n
∑
k
=
1
n
C
k
−
1
+
1
n
∑
k
=
1
n
C
n
−
k
=
(
n
−
1
)
+
1
n
∑
k
=
0
n
−
1
C
k
+
1
n
∑
k
=
0
n
−
1
C
k
=
(
n
−
1
)
+
2
n
∑
k
=
0
n
−
1
C
k
\begin{align*} C_n&=(n-1)+\frac{1}{n}\sum_{k=1}^n(C_{k-1}+C_{n-k})\\ &=(n-1)+\frac{1}{n}\sum_{k=1}^n C_{k-1}+\frac{1}{n}\sum_{k=1}^n C_{n-k}\\ &=(n-1)+\frac{1}{n}\sum_{k=0}^{n-1} C_{k}+\frac{1}{n}\sum_{k=0}^{n-1} C_{k}\\ &=(n-1)+\frac{2}{n}\sum_{k=0}^{n-1} C_{k} \end{align*}
Cn=(n−1)+n1k=1∑n(Ck−1+Cn−k)=(n−1)+n1k=1∑nCk−1+n1k=1∑nCn−k=(n−1)+n1k=0∑n−1Ck+n1k=0∑n−1Ck=(n−1)+n2k=0∑n−1Ck
因此
n
C
n
=
n
(
n
−
1
)
+
2
∑
k
=
0
n
−
1
C
k
①
nC_n=n(n-1)+2\sum_{k=0}^{n-1}C_k\quad ①
nCn=n(n−1)+2k=0∑n−1Ck①
用
n
−
1
n-1
n−1 代入
n
n
n,得
(
n
−
1
)
C
n
−
1
=
(
n
−
1
)
(
n
−
2
)
+
2
∑
k
=
0
n
−
2
C
k
②
(n-1)C_{n-1}=(n-1)(n-2)+2\sum_{k=0}^{n-2}C_k\quad②
(n−1)Cn−1=(n−1)(n−2)+2k=0∑n−2Ck②
①
−
②
①-②
①−② 得
n
C
n
−
(
n
−
1
)
C
n
−
1
=
2
(
n
−
1
)
+
2
C
n
−
1
⇒
n
C
n
=
2
(
n
−
1
)
+
(
n
+
1
)
C
n
−
1
③
⇒
C
n
n
+
1
=
C
n
−
1
n
+
2
(
n
−
1
)
n
(
n
+
1
)
\begin{align*} &nC_n-(n-1)C_{n-1}=2(n-1)+2C_{n-1}\\ \Rightarrow &nC_n=2(n-1)+(n+1)C_{n-1}\quad ③\\ \Rightarrow &\frac{C_n}{n+1}=\frac{C_{n-1}}{n}+\frac{2(n-1)}{n(n+1)} \end{align*}
⇒⇒nCn−(n−1)Cn−1=2(n−1)+2Cn−1nCn=2(n−1)+(n+1)Cn−1③n+1Cn=nCn−1+n(n+1)2(n−1)
令
D
n
=
C
n
n
+
1
D_n=\frac{C_n}{n+1}
Dn=n+1Cn 得
D
n
=
D
n
−
1
+
2
(
n
−
1
)
n
(
n
+
1
)
④
D_n=D_{n-1}+\frac{2(n-1)}{n(n+1)}\quad④
Dn=Dn−1+n(n+1)2(n−1)④
因此
D
n
=
2
∑
j
=
1
n
j
−
1
j
(
j
+
1
)
=
2
∑
j
=
1
n
2
j
+
1
−
2
∑
j
=
1
n
1
j
=
4
∑
j
=
2
n
+
1
1
j
−
2
∑
j
=
1
n
1
j
=
2
∑
j
=
1
n
1
j
+
4
n
+
1
−
4
=
2
H
n
−
4
n
n
+
1
≈
2
ln
n
+
O
(
1
)
=
2
log
2
e
log
2
n
+
O
(
1
)
≈
1.44
log
2
n
\begin{align*} D_n&=2\sum_{j=1}^n\frac{j-1}{j(j+1)}\\ &=2\sum_{j=1}^n\frac{2}{j+1}-2\sum_{j=1}^n\frac{1}{j}\\ &=4\sum_{j=2}^{n+1}\frac{1}{j}-2\sum_{j=1}^n\frac{1}{j}\\ &=2\sum_{j=1}^n\frac{1}{j}+\frac{4}{n+1}-4\\ &=2H_n-\frac{4n}{n+1}\\ &\approx2\ln n+O(1)\\ &=\frac{2}{\log_2 e}\log_2 n+O(1)\\ &\approx1.44\log_2 n \end{align*}
Dn=2j=1∑nj(j+1)j−1=2j=1∑nj+12−2j=1∑nj1=4j=2∑n+1j1−2j=1∑nj1=2j=1∑nj1+n+14−4=2Hn−n+14n≈2lnn+O(1)=log2e2log2n+O(1)≈1.44log2n
因此
C
n
≈
1.44
n
log
2
n
=
O
(
n
log
n
)
C_n\approx1.44n\log_2 n=O(n\log n)
Cn≈1.44nlog2n=O(nlogn)
快速排序平均时间复杂度分析
于 2023-09-28 10:10:54 首次发布
文章详细分析了快速排序过程中partitionnode的选择策略,计算了平均比较次数的递推公式,并得出结论:在n个元素的情况下,平均比较次数大约为1.44nlog_2n,属于O(nlogn)的时间复杂度。
摘要由CSDN通过智能技术生成