目录
知识框架
***********************************************************************2020/3/17
1时间复杂度
六种常用计算算法时间的多项式
O(1)<O(logn)<O(n)<O(nlogn)<O()<O()
***指数时间的关系为:(n>=4时成立)
O()<O(n!)<O()
当n取得很大时,指数时间算法在所需时间上非常悬殊。
***有的情况下,算法中基本操作重复执行,还随问题的输入数据集不同而不同。
快捷计算
case 1 基本语句与n无关 O(1)
case 2 分裂原则n/2 O(log)
case 3 单一循环,依赖n O(n)
case 4 双循环,分裂原则 O(nlog)
case 5 双循环 O()
2空间复杂度
是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作S(n)=O(f(n)) n为问题的规模
---指令常数变量所占用的存储空间;
---输入数据所占用的存储空间;
---辅助(存储)空间
算法的空间复杂度指的是辅助空间
---一维数组a[n]:空间复杂度O(n)
---二维数组a[n][m]:空间复杂度O(n*m)
判断是否是素数
#include<stdio.h>
#include<math.h>
void prime(int n)
{
int i=2;
while((n%i)!=0&&i*1.0<sqrt(n))//降低时间复杂度
i++;
if(i*1.0>sqrt(n))
printf("该数是一个素数\n",n);
else
printf("该数不是一个素数\n",n);
}
int main()
{
int a=13;
prime(a);
}
输出结果:
3线性表
线性表是一种典型的线性结构。数据元素是有序且是有限的。
- 存在一个唯一的被称为“第一个”的数据元素
- 存在一个唯一的被称为“最后一个”的数据元素
- 除第一个元素外,每个元素均有唯一一个直接前驱
- 除最后一个元素外,每个元素均有唯一一个直接后继
线性表(Linear List):是由n(n>=0)个数据元素(结点),a1,a2,....,an组成的有限序列。
所有结点具有相同的数据类型
数据元素的个数n称为线性表的长度。
- 当n=0时,称为空表
- 当n>0时,将非空的线性表记作:a1,a2,....,an
a1称为线性表的第一个(首)结点,an称为线性表的最后一个(尾)结点
a1,a2,....,ai-1都是ai(2<i<n)的前驱,其中ai-1是ai的直接前驱;
ai+1,ai+2,...an都是ai(1<=i<=n-1)的后继,其中ai+1是ai的直接后继。
线性表的抽象数据类型定义
ADT List{
数据对象:D={ai|aiElemSet,i=1,2,...,n,n>=0}
数据关系:R={<ai-1,ai>|ai-1,aiD,i=1,2,3,...,n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表L;
**************************************************************2020/3/25
1.1什么是数据结构?
- 数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及他们之间的关系和运算的学科。
- 在数据结构中,从逻辑上可以把数据结构分成线性结构和非线性结构。
- 数据的存储结构是指数据的逻辑结构在计算机中的表示。
- 在存储数据时,通常不仅仅要存储各数据元素的值,而且还要存储数据元素之间的关系。
1.2基本概念和术语
- 数据(Data):是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。(例如:整数、实数、字符串、图形、图像、声音及动画等通过编码定义后的数据。
- 数据元素(Data Element):是数据的基本单位。在计算机程序中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素,记录等。(例如:学生信息表中的一条记录是一个数据元素。)
- 数据项(Data Item):是组成数据元素的有独立含义的、不可分割的最小单位。(例如:学生信息中的学号、姓名、性别等都是数据项。)
- 数据对象:是性质相同的数据元素的集合,是数据的一个子集。(例如:整数数据对象是集合N={0,1,-1,-2,…})
- 数据结构(作为研究对象的数据结构)
——是相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的关系称为结构。
- 逻辑结构:数据的组织形式
- 线性结构:数据元素之间存在一个对一个的关系,按逻辑关系一次排列成一条锁链。
- 非线性结构:a.集合:除了“同属于一个集合”外别无其他关系。
b.树形结构:一对多,具有分枝、层次特性。
c.图状结构:多对多,最复杂。其中各个数据元素按逻辑关系互相缠绕,任何两个都可邻接 。
注意:
- a.数据结构与数据元素本身的形式、内容无关;
- b.逻辑结构与数据元素的相对位置无关;
- c.逻辑结构与所含数据元素的个数无关。
故一些表面上很不相同的数据可以有相同的逻辑结构。因此逻辑结构是数据组织的某种“本质性”的东西。
- 存储结构(物理结构):数据结构(逻辑结构)在计算机中的表示(又称映象)称为数据的物理结构,又称存储结构。它包括数据的表示和关系的表示。
- 结点:数据元素在计算机中的映象(位串),对应于各数据项的子位串称为数据域。
存储结构分为:
- 顺序存储结构——借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
- 链式存储结构——借助指示元素存储地址的指针表示数据元素间的逻辑关系
数据类型:是一个值的集合和定义在这个值集上的一个操作的总称。
a.原子类型:其值不可以分解。
b.结构类型:可分解其值由若干成分按某种结构组成其成分可以是结构的,也可以是非结构的。
抽象数据类型(Abstract Data Type,ADT):一般由用户定义、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
1.2课后测验:
数据结构在计算机内存中的表示是指数据的存储结构。
在数据结构中,与所使用的计算机无关的是数据的逻辑结构。
通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致。
一些表面上很不相同的数据可以有相同的逻辑结构