赞
踩
数据结构的三要素为:逻辑结构、存储结构、数据的运算;
逻辑结构指数据元素之间的逻辑关系,从逻辑关系上描述数据,分为线性结构与非线性结构。
线性表是典型的线性结构,树和图是典型的非线性结构。
存储结构指数据结构在计算机中的表示,也称物理结构,是用计算机实际实现的逻辑结构,主要有顺序存储、链式存储、索引存储和散列存储。
施加在数据上的运算包含运算的定义和实现。
算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列,其中每条指令表示一个或者多个操作。
一个好的算法,通常应考虑如下目标:
一个语句的频度指的是该语句在算法中被重复执行的次数。算法中所有语句的频度之和为 T ( n ) T(n) T(n),时间复杂度分析 T ( n ) T(n) T(n) 的数量级。
算法的时间复杂度记为:
T
(
n
)
=
O
(
f
(
n
)
)
T(n)=O(f(n))
T(n)=O(f(n))
其中
O
O
O 的含义表示数量级。
需要注意的是,算法的时间复杂度不仅仅取决于算法的结构规模,还取决于待输入数据的初始状态。对于同一个算法,因初始状态不同,结果可以为
O
(
n
)
O(n)
O(n) 也可能为
O
(
1
)
O(1)
O(1)。
其中
O
(
n
)
O(n)
O(n) 我们其为 “最坏时间复杂度”,
O
(
1
)
O(1)
O(1) 称为 “最好时间复杂度”,而 “平均时间复杂度” 则为当所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
** 在分析一个程序的时间复杂度时,有以下两条规则:
加法规则:
T
(
n
)
=
T
1
(
n
)
+
T
2
(
n
)
=
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
m
a
x
(
f
(
n
)
,
g
(
n
)
)
)
T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n), g(n)))
T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
乘法规则:
T
(
n
)
=
T
1
(
n
)
∗
T
2
(
n
)
=
O
(
f
(
n
)
)
∗
O
(
g
(
n
)
)
=
O
(
f
(
n
)
∗
g
(
n
)
)
T(n)=T_1(n)*T_2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
T(n)=T1(n)∗T2(n)=O(f(n))∗O(g(n))=O(f(n)∗g(n))
常见的渐进时间复杂度为:
O
(
1
)
<
O
(
l
o
g
2
n
)
<
O
(
n
)
<
O
(
n
l
o
g
2
n
)
<
O
(
n
2
)
<
O
(
n
3
)
<
O
(
2
n
)
<
O
(
n
!
)
<
O
(
n
n
)
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
算法的空间复杂度 S ( n ) S(n) S(n) 为该算法所耗费的存储空间,记为 S ( n ) = O ( g ( n ) ) S(n)=O(g(n)) S(n)=O(g(n))
一个程序执行时除需要存储空间来存放本身的指令、常数、变量和输入数据外,还需要一些数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。
算法原地工作是指算法所需的辅助空间为常量,即为 O ( 1 ) O(1) O(1)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。