前几章非算法部分,仅摘录重点内容。
1、算法的基本概念
2、算法的基本设计模式
3、大O记法
常用的渐进复杂度:
O
(
1
)
,
O
(
l
o
g
n
)
,
O
(
n
)
,
O
(
n
l
o
n
g
n
)
,
O
(
n
2
)
,
O
(
n
3
)
,
O
(
2
n
)
O(1),O(log n),O(n),O(n long n),O(n^2),O(n^3),O(2^n)
O(1),O(logn),O(n),O(nlongn),O(n2),O(n3),O(2n)
4、复杂度分析
4.1、基本循环
最基本的循环程序:顺序组合、条件分支、循环结构
0 基本操作,
O
(
1
)
O(1)
O(1)
1 加法规则(顺序复合): 多部分复合,则复杂度为每部分之和,由于忽略常量,则是各部分的最大值
2 乘法规则(循环结构):循环体相乘
3 取最大规则(分支结构):取最大的分支
4.2、递归的复杂度
def recur(n):
if n == 0:
return g(...)
somework
for i in range(n):
x = recur(n/b)
somework
somework
复杂度公式:
T
(
n
)
=
O
(
n
2
)
+
a
T
(
n
/
b
)
T(n)=O(n^2)+a T(n/b)
T(n)=O(n2)+aT(n/b)
0
a
>
b
k
a>b^k
a>bk,
T
(
n
)
=
O
(
n
l
o
g
b
a
)
T(n)=O(n^{log_b^a})
T(n)=O(nlogba)
1
a
=
b
k
a=b^k
a=bk,
T
(
n
)
=
O
(
n
k
l
o
g
n
)
T(n)=O(n^klog n)
T(n)=O(nklogn)
2
a
<
b
k
a<b^k
a<bk,
T
(
n
)
=
O
(
n
k
)
T(n)=O(n^k)
T(n)=O(nk)