数据结构的基本概念
1.数据
数据是信息的载体,是描述客观事物属性的数,字符以及所有能够输入到计算机中,并被计算机程序识别和处理符号的集合。
2.数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可风格的最小单位。例如:学生记录就是一个数据元素,它由学号,姓名,性别等数据项构成。
3.数据类型
数据类型是一个值的集合和定义在此集合上一组操作的总称。
1原子类型:其值不可再分的数据类型
2)结构类型:其值可以再分解为若干成分(分量)的数据类型
抽象数据类型:抽象数据组织与之相关的操作
(ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义它的一组逻辑特性,而与其在计算机内部如何表示实现无关。通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型。
4.数据结构
在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。数据结构包括三方面内容:逻辑结构,存储结构和数据元素。
5.逻辑结构
逻辑结构是指元素之间的逻辑关系。
即从逻辑关系上描述数据。它与数据的存储关系无关,是独立于计算机的。
6.集合
结构中的数据元素之间除了....同属于一个集合的关系外,别无其他关系。类似于数学上的集合。
7.线性结构
结构中的数据元素只存在一对一的关系
8 树形结构:结构中的数据元素之间~一对多关系
9.图状结构或网状结构:~~~多对多~~~
10.存储结构
数据结构在计算机中的表示(又称映像)也称物理结构。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。
顺序结构 ->存储的物理位置相邻
链式结构->存储的物理位置未必相邻,通过记录相邻元素的物理位置来找到相邻元素。
索引结构 ->类似于目录
散列结构 ->通过关键字直接计算出元素的物理位置。
物理结构-----逻辑结构
算法和算法复杂度
算法是对问题求解步骤的描述,通过优先序列的指令来实现。
五大特征
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
算法的复杂度
1.时间复杂度
算法执行时间增长的的快慢
T(n)数量级
T(n)=O(f(n)),大O记法,f(n)是运算中基本运算的频度
计算方法:取算法时间最长的那个函数项,把他的系数设为1.
常用的时间复杂度大小关系
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)
PS:log2n更多写成logn
从左到右,时间性能依次降低
给出一段程序,然后要求计算时间复杂度
int sum=0;
for(int i=0;i<=n;i++)
{
sum=sum+i;
}
int i=0;//执行了1次
i<=n;//执行n+2次,0-n有n+1次,最后一次不满足条件,跳出循环。
i++;执行n+1次
执行了3n+6个语句,假设每个执行时间一样,均为常数t,则总时间为T=(3n+6)*t,随着问题规模的增大,总时间的增长率与n的增长率一致,所以复杂度为O(1).
结论:1.复杂度是关于增长率的,所以可以直接忽略常数项。
2.一般可以直接关注循环段操作语句
sum=sum+i的执行次数
eg:int sum=0
for(int i=0;i<=n;i++)
{
sum=sum+i;//直接设循环体次数为k
}
i等于1时执行了1次
i为2时,执行了2次
..........
i为n时,执行了3n次
i=n+1时,跳出循环。
所以循环体执行次数为k=n+1,时间密度为O(n).
int sum=0;
for(int i=1;i<=n;i=2*i)
{
sum=sum+i;
}
i取值:1,2,4,8.....
满足条件 2^k<=n
k>log2n时,跳出循环
所以循环体执行系数:log2n
故时间复杂度为O(logn)
多个循环体的复杂度的计算
两个运算规则:乘法规则,加法规则
for(i=1;i<=n;i++)
x++;
for(i=1;i<=n;i++)
for(j=1;j<= n;j++)
x++;
两个循环是独立的,采用加法规则。
T(n)=T1(n)+T(n)=max(T1(n,T2(n)))=O(n^2)
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j=2*j)
{
sum=sum+j;
}
}
两个循环体是嵌套的,采用乘法规则
T(n)=T1(n)*T2(n)
2.空间复杂度
算法所需空间增长的快慢
S(n)=O(g(n))
空间复杂度S(n)是指算法运行过程中所使用的辅助空间的大小。
记为:S(n)=O(f(n))
辅助空间:除了存储算法本身的指令,常数,变量,和输入数据处,还需要存储对数据操作的存储单元
算法原地工作是指算法所需的辅助空间是常量,即O(n)
考研中出现O(1),O(n)较多