旧游无处不堪寻
无寻处,惟有少年心
数据结构(一)

数据结构和算法是计算机软件相关专业的基础课程,要想从事编程工作,无论是否是科班出身,都不可能绕过这部分知识。
从本篇开始,我会详细的复习一遍数据结构以及算法。

数据结构


数据结构: 是相互之间存在一种或多种特定关系的数据元素的集和。

基本概念

数据

数据: 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号的集和。
数据包括: 整型等数值类型,以及声音图片等非数值类型。

数据元素

数据元素: 是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。

数据项

数据项: 一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。

数据对象

数据对象: 性质相同的数据元素的集和,是数据的子集。

逻辑结构和物理结构

我们把数据结构划分为逻辑结构物理结构

逻辑结构

逻辑结构: 是指数据对象中数据元素之间的相互关系。

逻辑结构可分为以下四种:

  1. 集合结构: 集合结构中的数据元素除了同属于一个集合之外,他们之间没有其他关系
  2. 线性结构: 线性结构中的数据元素之间是一对一的关系
  3. 树形结构: 树形结构中的数据元素之间存在一种一对多的关系
  4. 图形结构: 图形结构的数据元素之间是多对多关系

物理结构(存储结构)

物理结构: 是指数据的逻辑结构在计算机中的存储形式。
根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中。存储器主要针对内存而言,外部存储器的数据组织通常用文件结构来描述。

物理结构可分为以下两种:

  1. 顺序存储: 是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
  2. 链式存储: 把数据元素放在任意的存储单元,这组存储单元可以是连续的,也可以是不连续的

抽象数据类型

数据类型

数据类型: 是指一组性质相同的值的集合以及在此集合上的一些操作的总称。
抽象是指抽取出事物具有的普遍性的本质。抽象是一种思考问题的方式,隐藏了繁杂的细节,只保留实现目标所必须的信息。

抽象数据类型

抽象数据类型(Abstruct Data Type,ADT): 指一个数学模型及定义在该模型上的一组操作。

算法


算法: 是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

算法的特性

算法具有五个基本特性: 输入输出有穷性确定性可行性

输入输出

算法具有零个或多个输入,算法至少有一个或多个输出。

有穷性

有穷性: 指算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每个步骤在可接受的时间内完成。

确定性

确定性: 算法的每一步骤都具有确定的含义,不会出现二义性。

可行性

可行性: 算法的每一步都必须是可行的。

算法的设计要求

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 时间效率高和存储量低

函数的渐进增长

函数的渐进增长: 给定两个函数 f(n) 和 g(n),如果存在一个整数 N,使得对于所有的 n > N,f(n) 总是比 g(n) 大,那么,我们就说 f(n) 的增长渐进快于 g(n)。

判断一个算法的效率时,函数中的常数和其他次要项可以忽略,而更应关注最高阶项的阶数。

算法的时间复杂度

在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模 n 的函数,进而分析 T(n) 随 n 的变化情况并确定 T(n) 的数量级。算法的时间复杂度,也就是算法的时间的度量,记作: T(n) = O(f(n))。他表示随问题规模 n 的增大,算法的执行时间的增长率和 f(n) 的增长率相同,称为算法的渐进时间复杂度,简称时间复杂度。

这样用大写 O 来体现算法时间复杂度的记法,称之为大 O 表示法

一般情况,随着 n 增大,T(n) 增长最慢的算法为最优算法。

推导大 O 阶方法

  1. 用常数 1 取代所有加法常数
  2. 只保留最高阶
  3. 如果最高阶存在且不是 1,则去除与这个项相乘的常数