数据结构复杂度分析——级数和循环
参考邓俊辉数据结构课程
一、级数
-
算数级数 与末项平方同阶
T
n
=
1
+
2
+
3
+
.
.
.
.
.
.
+
n
=
n
(
n
+
1
)
/
2
=
O
(
n
2
)
Tn=1+2+3+......+n=n(n+1)/2=O(n^{2})
Tn=1+2+3+......+n=n(n+1)/2=O(n2) -
幂方级数 比幂次高出一阶
T
2
n
=
1
2
+
2
2
+
3
2
+
.
.
.
.
.
.
+
n
2
=
n
(
n
+
1
)
(
2
n
+
1
)
/
6
=
O
(
n
3
)
T_{2}n=1^{2}+2^{2}+3^{2}+......+n^{2}=n(n+1)(2n+1)/6=O(n^{3})
T2?n=12+22+32+......+n2=n(n+1)(2n+1)/6=O(n3) -
几何级数 与末项同阶
T
a
n
=
a
0
+
a
1
+
a
2
+
.
.
.
.
.
.
+
a
n
=
O
(
a
n
)
T_{a}n=a^{0}+a^{1}+a^{2}+......+a^{n}=O(a^{n})
Ta?n=a0+a1+a2+......+an=O(an)
1
+
2
+
4
+
8
+
.
.
.
.
.
.
+
2
n
=
O
(
2
n
)
1+2+4+8+......+2^{n}=O(2^{n})
1+2+4+8+......+2n=O(2n) -
收敛级数 各项递减且都是正数,总和不超过一个上界
1
+
1
/
3
+
1
/
7
+
1
/
8
+
1
/
15
+
.
.
.
.
.
.
=
O
(
1
)
1+1/3+1/7+1/8+1/15+......=O(1)
1+1/3+1/7+1/8+1/15+......=O(1) -
调和级数
1
+
1
/
2
+
1
/
3
+
1
/
4
+
1
/
5
+
.
.
.
.
.
.
1
/
n
=
O
(
l
o
g
n
)
1+1/2+1/3+1/4+1/5+......1/n=O(logn)
1+1/2+1/3+1/4+1/5+......1/n=O(logn) -
对数级数
l
o
g
1
+
l
o
g
2
+
l
o
g
3
+
.
.
.
.
.
.
+
l
o
g
n
=
l
o
g
(
n
!
)
=
O
(
n
l
o
g
n
)
log1+log2+log3+......+logn=log(n!)=O(nlogn)
log1+log2+log3+......+logn=log(n!)=O(nlogn)
二、循环
- 没有耦合的二重循环
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
O1Operation(i, j);
O
(
n
2
)
O(n^{2})
O(n2)
- 有耦合的二重循环
for (int i = 0; i < n; i++)
for (int j = 0; j < i; j++)
O1Operation(i, j);
O
(
n
2
)
O(n^{2})
O(n2)
- 递增不为1的二重循环
for (int i = 0; i < n; i++)
for (int j = 0; j < i; j += 2013)
O1Operation(i, j);
O
(
n
2
)
O(n^{2})
O(n2)
- 外循环左移一位
for (int i = 1; i < n; i <<= 1)
for (int j = 0; j < i; j++)
O1peration(i, j);
O
(
n
)
O(n)
O(n) 几何级数,最后一项的指数由n的大小确定
|