绪论
知识框架
一、数据结构基本概念
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系的操作等相关问题的学科
程序设计=数据结构+算法
1. 基本概念和术语
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。(数据不仅包含整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。)
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被成为记录。(比如:鸡鸭牛羊猪狗等动物就是禽类的数据元素)
数据项:一个数据元素可以由若干个数据项组成。(比如:人可以有眼耳口鼻这些数据项)。
数据项是数据不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的子集。(什么是性质相同呢,是指数据元素具有相同数量和类型的数据项,比如:人都有姓名、生日、性别等相同的数据项)
既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆的情况下,我们都将数据对象简称为数据。
不同的数据元素之间不是独立的,而是存在特定的关系,我们将这些关系成为结构。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
2. 数据结构三要素
数据的逻辑结构
逻辑结构是指数据元素之间的逻辑关系。
数据的存储结构
存储结构是指数据在计算机中的表示,也称之为物理结构,主要有以下几种方式:
① 顺序存储
② 链式存储
③ 索引存储
④ 散列存储(哈希存储)
数据的运算
二、算法和算法评价
1. 算法的基本概念和特性
算法概念
算法是对特定问题求解步骤的一种描述,举个简单的例子,如何把一头大象放进冰箱的解答就是一个算法。
① 算法特性
② 有穷性
③ 确定性
④ 可行性
⑥ 输入
⑦ 输出
2. 算法的评价度量
时间复杂度
算法中所有语句的频度之和为T(n),时间复杂度主要分析T(n)的数量级。
T
(
n
)
=
O
(
f
(
n
)
)
T(n) = O(f(n))
T(n)=O(f(n))
空间复杂度
算法的空间复杂度S(n)定义为算法所耗费的存储空间,它是问题规模n的函数。
S ( n ) = O ( g ( n ) ) S(n) = O(g(n)) S(n)=O(g(n))
三、牛刀小试
已知一个算法由下列递归方程表示,求该算法的时间复杂度。
T
(
n
)
{
1
,
n
=
1
2
T
(
n
/
2
)
+
n
,
n
>
1
T(n) \begin{cases} 1,&n = 1\\ 2T(n/2) + n,&n > 1 \end{cases}
T(n){1,2T(n/2)+n,n=1n>1
解:设(n = 2^k (k>=0)),根据题目有:
(T(2^k) = 2T(2^{k-1}) + 2^k = 22T(2{k-2}) + 222k),
(therefore)得出一般递推式:
(T(2^k) = 2kT(20) + k2^k = (k + 1)2^k),即:
(T(n) = 2^{log_2n} + log_2n*n = n(log_2n + 1))
(therefore O(n) = nlog_2n)
计算下列程序段的时间复杂度
i = 1; k = 0;
while(i < n - 1){
k = k + 10 * i;
i++;
}
O(n) = n
y = 0;
while((y + 1) * (y +1) <= n){
y = y + 1;
}
O(n) = sqrt n