数据结构的基本概念
基本概念
数据:
数据:信息的载体,所有能输入到计算机中并被计算机程序识别和处理的符号。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
数据元素:数据的基本单位。
数据项:构成数据元素的不可分割的最小单位。
数据类型:一组数据的集合和定义在该集合上的操作的总和。(集合+操作)
原子类型:不可再分(int, char, float等)
结构类型:list, map, set等
抽象数据类型:所有可以抽象出的模型。
结构:
结构:数据不是孤立的,它们存在着某种关系,这种关系叫做结构。
数据结构:
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构的三要素
逻辑结构:
数据元素之间的逻辑关系。独立于计算机。
线性结构:
集合:
树形结构:一对多的关系
图状结构:多对多的关系
存储结构(物理结构):
数据结构在计算机内的表示。包含数据元素本身的表示和数据元素之间的关系的表示。
顺序存储:物理地址相邻
链式存储:地址用指针定位
索引存储:索引表(关键字+地址)
散列存储:通过计算求得物理地址
数据的运算:
运算包含运算的定义和实现,运算的定义针对逻辑结构,运算的实现针对存储结构(存储结构不同,运算不同)。
算法的基本概念
定义:
对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。
特性:
有穷性
确定性
可行性
输入
输出
算法的评价
评价标准
正确性:正确解决问题
可读性:能够被人们阅读
健壮性:输入非法数据是,算法能适应的做出反应或进行处理。
效率与存储量:效率是指算法执行时间,存储量需求是指算法执行过程中所需最大存储空间。分别对应时间复杂度和空间复杂度。
时间复杂度
- 时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,花费的时间就多。一个算法中的语句执行次数被称为语句频度或时间频度。记为T(n)。
- 时间复杂度:一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)(时间频度)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/F(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
由时间频度T(n)计算时间复杂度f(n)的方法:
(1)将常数项设为1,然后尝试忽略常数项,如果是 3n2+2n+20,当n很大时,20可忽略不计;如果是 3,则将 3 改为 1。
(2)尝试忽略低次项,如果是 3n2+2n,当n很大时,2n可忽略。
(3)尝试忽略系数,如果是 3n2,最后只保留n2 即可。 - T(n)不同,但时间复杂度可能相同。如:T(n)=3n2+2n+20 与 T(n)=n2+5n,它们的时间复杂度都相同,都为O(n2)。
- 常见的算法时间复杂度
O(1) < O(log(n)) < O(n) < O(n2) < O(n3) < O(nk) < O(2n)
(1)常数阶 O(1)
无论代码执行了多少行,只要没有循环等复杂结构,那么这段代码的时间复杂度就是 O(1)。
(2)线性对数阶 O(nlogN)
将时间复杂度为O(logN)的代码循环执行了N边 - 平均时间复杂度
平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,该算法的运行时间。 - 最坏时间复杂度
最坏情况下的时间复杂度。算法在任何实例上的运行时间都不会比最坏情况更长。
空间复杂度
- 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。
- 一般算法的设计更注重时间复杂度而不是空间复杂度。