数据结构与算法基础(第一章)

在这里插入图片描述
链接: bilibili-数据结构与算法基础(青岛大学-王卓)

数据

1. 数据

  • 数据:是能输入计算机且能够别计算机处理的各种符号的集合。
  • 信息的载体,是对客观事物符号化的表示,能够被计算机试别、存储和加工

包括:== 数值型的数据 == ,== 非数值型的数据 ==

2. 数据元素和数据项

数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。也称为元素,记录、结点或者顶点。
一个数据元素可由若干个数据项组成。

3. 数据项

数据项是构成数据元素的不可分割的最小单位

  • 数据、数据元素、数据项三者的关系:
    数据 > 数据元素 > 数据项
    例:学生表 > 个人记录 > 学号、姓名

4. 数据对象

是性质相同的数据元素的集合,是数据的一个子集。
例如:

  • 整数数据对象是集合N={…, -2, -1, 0, 1, 2, …}

数据结构

数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构
是指相互之间存在一种或多种特定关系的数据元素集合。或者说,数据结构是带结构的数据元素的集合。

数据结构包括以下三个方面的内容:

  1. 数据元素之间的逻辑关系,也称为逻辑结构
  2. 数据元素及其关系在计算机内存中的表示(又称为映像),称为数据结构的物理结构或数据的存储结构
  3. 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。

逻辑结构
物理结构(存储结构)

逻辑结构与存储结构的关系:

  • 存储结构是逻辑关系的映象与元素本身的映象。
  • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现。
  • 两者综合建立起了数据结构的结构关系。

逻辑结构的种类

划分方法一

(1)线性结构
有且仅有一个开始和终端结点,并且所有结点最多只有一个前趋和一个后继。

  • 例如:线性表、栈、队列、串

(2)非线性结构
一个结点可能有多个直接前趋和**直接后继
**

  • 例如:树、图

划分方法二——四类基本逻辑结构

(1)集合结构:结构中的元素之间除了同属于一个集合的关系外,无任何其他关系。
(2)线性结构:结构中的数据元素之间存在着一对一的线性关系。
(3)树性结构:结构中的数据元素之间存在着一对多的层次关系。
(4)图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。

在这里插入图片描述

存储结构的种类

四种基本的存储结构:

  • 顺序存储结构:
    用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系又元素的存储位置来表示。
    C语言用数组来实现顺序存储结构。

  • 链式存储结构
    用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。
    C语言中用指针来实现链式存储结构。

  • 索引存储结构
    在存储结点信息的同时,还建立附加的索引表

  • 散列存储结构
    根据结点的关键字直接计算出该结点的存储地址。

数据类型和抽象数据类型

  • 在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型
    • 例如,C语言中:
    • 提供int,char,float,double等基本数据类型
    • 数组、结构、共用体、枚举等构造数据类型
    • 指针、空(void)类型
    • 用户也可以用typedef自己定义数据类型
  • 高级语言中的数据类型明显地或隐含地规定了在程序执行期间变量和表达的所有可能的取值范围,以及在这些数值范围上所允许进行的操作。
    • 例如,C语言中定义变量i为int类型,就表示i时[-min, max]范围地整数,在这个整数集上可以进行+,-,*,\,%等操作。

数据类型的作用

  1. 约束变量或常量的取值范围。
  2. 约束变量或常量的操作。

数据类型

定义:数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。

数据类型 = 值的集合 + 值集合上的一组操作

抽象数据类型

抽象数据类型是指一个数学模型以及定义在此数学模型上的一组操作。

抽象数据类型的形式定义:

抽象数据类型可以用(D, S, P)三元组表示。
其中:D是数据对象;SD上的关系集;P是对D的基本操作集。

一个抽象数据类型的定义格式如下:

ADT 抽象数据类型名{
		数据对象:<数据对象的定义>
		数据关系:<数据关系的定义>
		基本操作:<基本操作的定义>
ADT 抽象数据类型名
  • 数据对象、数据关系的定义用伪代码描述
  • 基本操作的定义格式为:
    • 基本操作名(参数表)
    • 初始条件:<初始条件描述>
    • 操作结果:<操作结果描述>

在这里插入图片描述
在这里插入图片描述

概念小结

在这里插入图片描述
在这里插入图片描述

算法和算法分析

算法

算法的描述:

  • 自然语言:英语、中文
  • 流程图:传统流程图、NS流程图
  • 伪代码:类语言:类C语言
  • 程序代码:C语言,JAVA

算法与程序:

  • 算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
  • 程序是用某种程序设计语言对应算法的具体实现。

程序 = 数据结构 + 算法

  • 数据结构通过算法实现操作
  • 算法根据数据结构设计程序

算法特性:一个算法必须具备以下五个重要特性

  • 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
  • 确定性:算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。
  • 可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
  • 输入:一个算法有零个或多个输入。
  • 输出:一个算法有一个或多个输出。

算法设计的要求

  • 正确性
  • 可读性
  • 健壮性(鲁棒)
  • 高效性

算法分析

算法效率用以下两个方面来考虑:

  1. 时间效率:指的是算法所耗费的时间;
  2. 空间效率:指的是算法执行过程中所耗费的存储空间。
  • 时间效率和空间效率有时候是矛盾的。

时间效率的度量

依据算法编制的程序在计算机上执行所消耗的时间来度量。

两种度量方法

  • 事后统计:测算
    • 缺点:编写程序实现算法将花费较多的时间和精力,所得实验结果依赖于计算机的软硬件等环境因素,掩盖算法本身的优劣
  • 事前分析:估算
    • 一个算法的运行时间是指一个算法在计算机上运行所耗费的时间大致可以等于计算机执行一种简单的操作(如赋值、比较、移动等)所需的时间于算法中进行简单操作次数乘积
      算法运行时间 = 一个简单操作所需的时间(又称为语句频度) x 简单操作次数

每条语句执行一次所需的时间,一般是随机器而异的。取决于机器的指令、速度以及编译的代码质量。是有机器本省软硬件环境决定的,它与算法无关。
所以,我们可假设执行每条语句所需的时间均为单位时间。此时对算法的运行时间的讨论就可以转化为讨论该算法中所有语句的执行次数,即频度之和了。
算法时间复杂度的渐进表示法

  • 为了便于比较不同算法的时间效率,我们仅比较它们的数量级
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

算法时间复杂度

  • 最坏时间复杂度:指在最坏情况下,算法的时间复杂度。
  • 平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
  • 最好时间复杂度:指在最好的情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

在这里插入图片描述
在这里插入图片描述

空间效率的度量

渐进空间复杂度

  • 空间复杂度:算法所需存储空间的度量。
    在这里插入图片描述
  • 算法要占据的空间
    • 算法本身要占据的空间,输入/输出,指令,常数,变量等。
    • 算法要使用的辅助空间。
      在这里插入图片描述
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_71290816/article/details/128771577