数据结构和算法的概述
1 参考教材
主要参考的教材:《Java数据结构和算法(第2版)》 [美] 拉弗,计晓云 等
2 数据结构
- 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
- 数据结构包括数据的逻辑结构、数据的存储结构以及数据的运算
2.1 数据的逻辑结构
- 反映数据元素之间的关系
- 有集合、线性结构、树型结构、图型结构
2.2 数据的存储结构
- 逻辑结构在计算机内存中的实现,它包括数据元素的表示和元素之间关系的表示
- 有顺序存储结构(数组)、链式存储结构(链表)、索引存储结构、散列存储结构等
2.3 数据的运算
对数据施加的操作,这种一系列的操作就是算法
3 基本的数学概念的复习
3.1 函数的定义
给定一个数集 A,假设其中的元素为 x。现对A中的元素 x 施加对应法则 f,记作 f(x),得到另一数集 B。假设 B 中的元素为 y。则 y 与 x 之间的等量关系可以用 y=f(x) 表示。把这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域 A、值域 C 和对应法则 f。其中核心是对应法则 f,它是函数关系的本质特征
3.2 极限
初等数学研究的对象是不变的量,高等数据研究的对象是变动的量。比如极限。“极限”是数学中的分支——微积分的基础概念,广义的“极限”是指“无限靠近而永远不能到达”的意思。极限是一种“变化状态”的描述。此变量永远趋近的值A叫做“极限值”
3.3 对数
- 在数学中,对数是对求幂的逆运算,正如除法是乘法的倒数,反之亦然
- 如果 a 的 x 次方等于 N(a>0,且a不等于1)a^x=N,那么数 x 叫做以 a 为底 N 的对数(logarithm),记作 x=logaN。其中,a 叫做对数的底数,N 叫做真数
4 算法
- 按照某种逻辑关系组织起来的一批数据,按一定的方式把它存放在计算机的内存里,在这个基础上为了实现某个功能(比如查找某个元素,删除某个元素,给所有元素排序等等)而进行的一些列操作,我们把这一些列的操作步骤描述出来就是算法
- 算法也可以解释为:计算机求解一个问题所需的一系列步骤
4.1 算法的基本特性
- 输入:一个算法有0个或者多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身给出了初始条件
- 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
- 有穷性:算法必须能在执行有限个步骤之后终止
- 确切性:算法的每一步骤必须有确切的定义
- 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成
4.2 算法设计的要求
- 正确性:设计的算法能满足具体问题的需求,并且任何合法的输入都会得出正确的输出
- 可读性:是指算法被写好之后,该算法理解的难易程度,一个算法可读性的好坏十分重要。如果一个算法比较抽象且难以理解,那么这个算法就不利于交流和推广使用,对于修改、扩展、维护来说都十分不方便,因此,在追求高效的同时,也应是算法尽量简明易懂
- 健壮性:当输入数据非法时,算法也会做出相应的判断,而不会因为输入的错误而造成瘫痪
- 高效性:时间效率高(时间复杂度)和需要的存储空间少(空间复杂度)
4.3 时间复杂度和空间复杂度是衡量算法优劣的重要指标
- 时间复杂度:是用程序执行的次数来衡量,不是程序执行的时间
- 空间复杂度:用程序执行所需要的最大内存
算法问题实质上就是数学问题,计算时间复杂度和空间复杂度远远没这么简单