改进的冒泡排序
由于没有改变相邻逆序对互换的本质,数组内平均有 n 2 n^2 n2的逆序对就决定了算法必然复杂度为 O ( n 2 ) \Omicron(n^2) O(n2)
Quick Sort
设排好序的序列为Z[1:N]
,则认定指标随机变量
如下:
设算法时间复杂度为 T ( n ) T(n) T(n),则有:
T ( n ) = E [ ∑ i < j X i j ] = ∑ i < j E [ X i j ] = ∑ i < j P R { Z i 与 Z j 比 较 的 概 率 } \begin{aligned} T(n) = & E[\sum_{i<j} X_{ij}] \\ = & \sum_{i<j} E[X_{ij}] \\ = & \sum_{i<j} PR\{Z_{i}与Z_{j}比较的概率\} \end{aligned} T(n)===E[i<j∑Xij]i<j∑E[Xij]i<j∑PR{Zi与Zj比较的概率}
而 Z i 与 Z j Z_{i}与Z_{j} Zi与Zj会不会进行比较需要看算法是如何进行的,在QS中即是看pivot如何选:
- 若pivot选择 [ Z 1 , Z i ) ⋃ ( Z j , Z n ] , 则 对 它 们 比 不 比 较 没 有 影 响 [Z_{1},Z_{i})\bigcup(Z_{j},Z_{n}],则对它们比不比较没有影响 [Z1,Zi)⋃(Zj,Zn],则对它们比不比较没有影响
- 若pivot选择 Z i 和 Z j Z_{i}和Z_{j} Zi和Zj则它们必会比较
- 若pivot选择 ( Z i 和 Z j ) (Z_{i}和Z_{j}) (Zi和Zj)则它们必不会比较
将不影响结果的区间去除,那么
Z
i
与
Z
j
Z_{i}与Z_{j}
Zi与Zj进行比较的概率即是
2
j
−
i
+
1
\frac{2}{j-i+1}
j−i+12
于是结果即是:
∑
i
<
j
2
j
−
i
+
1
∈
O
(
n
l
o
g
n
)
\begin{aligned} \sum_{i<j} \frac{2}{j-i+1}\in \Omicron(nlogn) \end{aligned}
i<j∑j−i+12∈O(nlogn)
闭哈希查找
失败查找
设哈希表大小为m,内有n个元素
因为失败查找一定会将链长全部走完,因此若记
n
m
=
α
\frac{n}{m}=\alpha
mn=α(平均链长)则有:
T
(
n
)
∈
Θ
(
1
+
α
)
\begin{aligned} T(n)\in \Theta(1+\alpha) \end{aligned}
T(n)∈Θ(1+α)
成功查找
设哈希表大小为m,内有n个元素,将表内元素按入表顺序排序
,排好的序列记为Z[1:n],算法的时间复杂度为T(n)
,则有:
T
(
n
)
=
1
n
∗
∑
i
=
1
n
(
1
+
∑
j
=
i
+
1
n
1
m
)
=
1
+
1
n
∗
∑
i
=
1
n
n
−
i
m
=
1
+
1
n
m
∗
∑
i
=
1
n
(
n
−
i
)
∈
  
Θ
(
1
+
n
2
n
m
)
∈
  
Θ
(
1
+
n
m
)
\begin{aligned} T(n)=&\frac1n *\sum_{i=1}^n (1+\sum_{j=i+1}^n\frac1m)\\ =&1+\frac1n*\sum_{i=1}^n\frac{n-i}{m}\\ =&1+\frac{1}{nm}*\sum_{i=1}^n (n-i)\\ \in\;&\Theta (1+\frac{n^2}{nm})\\ \in\;&\Theta (1+\frac{n}{m}) \end{aligned}
T(n)===∈∈n1∗i=1∑n(1+j=i+1∑nm1)1+n1∗i=1∑nmn−i1+nm1∗i=1∑n(n−i)Θ(1+nmn2)Θ(1+mn)
若记
n
m
=
α
\frac{n}{m}=\alpha
mn=α则有:
T
(
n
)
∈
Θ
(
1
+
α
)
\begin{aligned} T(n)\in \Theta(1+\alpha) \end{aligned}
T(n)∈Θ(1+α)
开哈希表查找
有点过于复杂…懒得写出来了,大概意思与闭hash差不多,平均查找长度的求解涉及太多了,全是gay论