大二汪的期末复习-算法与数据结构(时间复杂度)

算法与数据结构-1.绪论

  • 1.1基本概念和术语
  • 1.2 算法和算法分析
    • 1.2.1 算法的特性
    • 1.2.2 评价算法优劣的基本标准
    • 1.2.3 时间复杂度
    • 1.2.4 空间复杂度

1.1基本概念和术语

  1. 数据:客观事物的符号表示。
  2. 数据元素(元素/记录/结点):数据的基本单位。
  3. 数据项:组成数据元素的、有独立含义的、不可分割的最小单位/域。
  4. 数据对象:性质相同的数据元素的集合,是数据的一个子集。
  5. 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。

逻辑结构:从逻辑关系上描述数据,和数据的存储无关,是独立于计算机的。有两个要素:数据元素关系
1.集合结构:除了属于同一集合外,无其他关系。
2.线性结构:一对一关系。
3.树结构:一对多关系。
4.图结构/网状结构:多对多关系。

可分为:

  • 线性结构:线性表、栈、队列、字符串、数组、广义。
  • 非线性结构:树、二叉树、有向图、无向图

存储结构:也称为物理结构。指数据对象在计算机中的存储表示。把数据对象存储到计算机时,通常要求既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系数据元素在计算机内用一个结点来表示

  • 顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。要求所有的元素依次存放在一片连续的存储空间中。通常借助数组类型来描述。
  • 链式存储结构:借助指针类型来描述。
  1. 数据类型:一个值的集合和定义在这个值集上的一组操作的总称。
  2. 抽象数据类型:一般指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。包括数据对象、数据对象上关系的集合、对数据对象的基本操作的集合。如下。
tpedef struct Lnode{
	int data;
	struct Lnode *next;
}Lnode,*LinkList;

1.2 算法和算法分析

1.2.1 算法的特性

  • 有穷性
  • 确定性
  • 可行性
  • 输入:一个算法有零个或多个输入。
  • 输出:一个算法至少有一个输出。

1.2.2 评价算法优劣的基本标准

  • 正确性
  • 可读性:便于人们理解与交流。
  • 健壮性
  • 高效性:包括时间和空间两个方面。时间高效是指算法设计合理、执行效率高,可用时间复杂度来衡量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度空间复杂度是衡量算法的两个主要指标。

1.2.3 时间复杂度

  • 算法效率分析的目的是看算法实际是否可行。
  • 衡量算法效率的方法:事后统计法和事前分析估算法。
  • 影响算法时间代价最主要的因素是问题规模
  • 问题规模是算法求解问题输入量的多少,是问题大小的本质表示。
  • 一条语句的重复执行次数称作语句频度
  • 随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。

T(n)=O(f(n))

常见的时间复杂度按数量级递增排序为:常量阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、……、k次方阶O(nk)、指数阶O(2n)等。

举例:

方法:
①用1代替运行时间中所有的加法常数
②只保留最高阶项
③如果最高阶项存在且不是1,则去除与这个项相乘的常数。

x=90; y=100;
while(y>0){
	if(x>100){
		x=x-10;
		y--;
	}else{
		x++;
	}
}

常量阶:T(n)=O(1)

for(int i=0;i<n;i++){
	x++;
	s=0;
}

线性阶:T(n)=O(n)

x=0; y=0;
for(int i=0;i<n;i++)
	x++;
for(int i=0;i<n;i++)
	for(int j=0;j<n;j++)
		y++;

平方阶:T(n)=O(n²)

for(int i=0;i<n;i++)
	for(int j=0;j<m;j++)
		a[i][j]=0;

平方阶:T(n)=O(mn)

for(int i=0;i<n;i++)
	for(int j=0;j<m;j++)
		for(int k=0;k<o;k++)
			a[i][j][k]=0;

立方阶:T(n)=O(n³)

for(int i=1;i<=n;i=i*2){
	x++;
}

对数阶:设语句频度为f(n),则2f(n)≤n,即f(n)≤log₂ⁿ
∴ T(n)=O(log₂ⁿ)

1.2.4 空间复杂度

是算法所需存储空间的量度。
记作:S(n)=O(f(n))

你可能感兴趣的:(算法,数据结构,c++)