数据结构的基本概念

1.数据

数据是信息的载体,是描述客观事物属性的数,字符以及所有能够输入到计算机中,并被计算机程序识别和处理符号的集合。

2.数据元素

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可风格的最小单位。例如:学生记录就是一个数据元素,它由学号,姓名,性别等数据项构成。

3.数据类型

数据类型是一个值的集合和定义在此集合上一组操作的总称。

1原子类型:其值不可再分的数据类型

2)结构类型:其值可以再分解为若干成分(分量)的数据类型

抽象数据类型:抽象数据组织与之相关的操作

(ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义它的一组逻辑特性,而与其在计算机内部如何表示实现无关。通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型。

4.数据结构

在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。数据结构包括三方面内容:逻辑结构,存储结构和数据元素

 

 

5.逻辑结构

逻辑结构是指元素之间的逻辑关系。

即从逻辑关系上描述数据。它与数据的存储关系无关,是独立于计算机的。

数据结构(一)

 

6.集合

结构中的数据元素之间除了....同属于一个集合的关系外,别无其他关系。类似于数学上的集合。

7.线性结构

结构中的数据元素只存在一对一的关系

8 树形结构:结构中的数据元素之间~一对多关系

9.图状结构或网状结构:~~~多对多~~~

10.存储结构

数据结构在计算机中的表示(又称映像)也称物理结构。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。

 

顺序结构 ->存储的物理位置相邻

链式结构->存储的物理位置未必相邻,通过记录相邻元素的物理位置来找到相邻元素。

索引结构 ->类似于目录

散列结构 ->通过关键字直接计算出元素的物理位置。

物理结构-----逻辑结构

 

算法和算法复杂度

算法是对问题求解步骤的描述,通过优先序列的指令来实现。

五大特征

  1. 有穷性
  2. 确定性
  3. 可行性
  4. 输入
  5. 输出

算法的复杂度

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)较多

相关文章:

  • 2022-12-23
  • 2021-08-05
  • 2021-11-06
猜你喜欢
  • 2021-12-19
  • 2021-07-24
  • 2021-10-24
  • 2022-01-15
  • 2021-11-14
相关资源
相似解决方案