Teacher:PHD Charles E.Leiserson
Point One Theta or θ
当出现高阶项时,只要变量足够大,可以去掉低阶项。
因为n足够大,低阶项对结果的影响远不足高阶项。
参考Charles的例子,eg
θ
=
8
n
3
+
90
n
2
+
6046
θ= 8n^3+90n^2+6046
θ=8n3+90n2+6046
当n足够大时(n->∞)上例约等于:
θ
=
n
3
(
n
−
>
∞
)
θ = n^3 ( n ->∞)
θ=n3(n−>∞)
Point Two Insertion Sort
参考Charles的例子 eg:
54321
5 4 3 2 1
54321
45321
45321
45321
34521
34521
34521
23451
23451
23451
12345
12345
12345
插入排序,每次新插入一个元素时,都会在已有序数组中找到其位置,保证已有序数组保持有序,每次增长单位为1。
详细解读:
第一层遍历是遍历n个数 T(n)
第二层是在已有序数组内部遍历,找到新插入元素的位置 (1+2+…n)
所以时间复杂度是:
T
(
n
)
=
n
(
1
+
2
+
3
+
.
.
.
n
)
=
∑
j
n
θ
(
j
)
(
j
:
2
−
n
)
T(n) = n(1+2+3+...n)=∑_j^n θ (j)(j:2-n)
T(n)=n(1+2+3+...n)=j∑nθ(j)(j:2−n)
只保留高阶项:
T
(
n
)
=
n
2
T(n)=n^2
T(n)=n2
Point Three Merge Sort
归并排序是将n个元素拆为2个n/2个元素的有序集合,然后合并2个有序集合。
543128
543128
543128
拆开为2个有序集合(345)和(128),单个集合排序的时间复杂度为T(n/2)
5 8
4 2
3 1
归并时1->2->3->4->5->8。注意指针在2个集合间移动的轨迹。时间复杂度θ(n)
归并排序时间复杂度分支公式:
T
(
n
)
=
{
1
,
n
=
1
2
T
(
n
/
2
)
+
θ
(
n
)
+
C
n
,
n
>
1
T(n)=\begin{cases} 1,\quad n= 1\\ 2T(n/2)+θ(n)+Cn, \quad n>1 \end{cases}
T(n)={1,n=12T(n/2)+θ(n)+Cn,n>1
根据条件
C
n
=
2
T
(
n
/
2
)
Cn=2T(n/2)
Cn=2T(n/2)
C
n
/
2
=
T
(
n
/
2
)
Cn/2 = T(n/2)
Cn/2=T(n/2)
上图中树的高度为lgN,每层的总和为Cn。(N=n)
所以树的总和为Cn*lgN。
简化公式:
T
(
n
)
=
{
1
,
n
=
1
C
n
∗
l
g
n
+
θ
(
n
)
=
θ
(
n
l
g
n
)
,
n
>
1
T(n)=\begin{cases} 1,\quad n= 1\\ Cn*lgn+θ(n)=θ(nlgn), \quad n>1 \end{cases}
T(n)={1,n=1Cn∗lgn+θ(n)=θ(nlgn),n>1
ps:
根据以上推导可以知道MergeSort比InsertionSort快。