数据结构与算法概述

  • 算法
  1. 定义:正确而完整问题处理方案。
  2. 算法的三种基本特征:
    • 可行性(可以通过编译)
    • 确定性(算法拆分的每一步皆有意义)
    • 有穷性(算法必需在有限(步骤)时间内完成)
  3. 算法的两大基本要素:
    • 四类对数据的运算和操作:
      1. 算术运算(加减乘除取余运算)
      2. 逻辑运算(逻辑与或非)
      3. 关系运算(比较运算符)
      4. 数据传输(赋值运算,按位运算)
    • 三种算法的控制结构(算法各个步骤之间的执行顺序):
      1. 顺序结构
      2. 选择结构
      3. 循环结构
  4. 三种算法的描述工具:
    • 传统流程图(框加线)
    • N-S结构化流程图(框加线加列表)
    • 算法描述语言(编程语言加自然语言)
  5. 两类算法复杂度:
    • 时间复杂度:
      1. 概念:执行算法所需要的计(运)算工作量
      2. 计算公式:算法的工作量=f(n)[n表示问题的规模,由基本运算次数决定]
    • 空间复杂度:
      1. 概念:执行这个算法所需要的内存空间
  6. 疑难解答:算法的工作量用什么来计算?
    • 算法的工作量用算法所执行的基本运算次数来计算,而算法所执行的基本运算次数是问题规模的函数,即算法的工作量=f(n),其中n是问题的规模。

 

  • 数据结构
  1. 定位:关于计算机数据的运算与存储的一门学科。
  2. 两大方向:
    • 逻辑结构:指数据结构中数据集合里数据元素之间固有的逻辑关系。
      1. 计算公式:
        1. B=(D,R)[B表示数据结构,D表示数据集合,R表示数据集合的关系]
    • 存储结构(物理结构):指数据结构中数据集合里的数据元素存储时,各元素在计算机中的存储空间的存储关系。
    • 三大关系:
      1. 逻辑结构与存储(物理)结构具有相对独立性。
      2. 逻辑结构与存储(物理)结构具有一对多的关系,不同关系的执行效率不同,常用关系有顺序、链接、索引。
      3. 对各种数据结构之间进行运算。
  3. 三大名词解析:
    • 数据:所有可以输入到计算机运算的客观事物的符号表现。
    • 数据元素:通常将整个程序视为一个整体,其中数据元素被称为数据结构的最基本单位。
    • 数据对象:具有相同性质的数据元素的集合,是数据的子集。
  4. 三类数据结构分类:
    • 线性结构:
      1. 非空数据结构。
      2. 有且只有一个根结点。
      3. 每一个结点最多有一个前件,也最多有一个后件。
      4. 特征:
        1. 在任意一个结点插入或删除一个结点,结构不变。
      5. 类型(代表):
        1. 栈结构:
          1. 概念定义:“先进后出,后进先出”,栈顶插删。
          2. 储存空间表示公式:
            1. S(1:m)[1栈对多素]。
          3. 关系式:
            1. s(top)表栈顶,s(button)表栈底,top=m栈满,top=0栈空。
          4. 运算关系:
            1. “指针随顶,运算不改,仅赋变量”
          5. 基本运算:
            1. 入栈。
            2. 退栈。
            3. 读栈。
    • 非线性结构:
      1. 任何一个不满足线性结构的数据结构都是非线性结构。
      2. 类型(代表):
        1. 树:
          1. 定义:有且只有一个根结点,每个结点有且只有一个前件,但允许有多个后件。
          2. 名词解析——“度”:一个结点拥有的后件。在树中,所有结点中的最大的度称为树的度
          3. 特殊的树——二叉树:
            1. 定义:有且只有一个根结点,每个结点最多只能有两个子树,分别为左树与右树
            2. 四种基本性质:
              1. 性质1:在二叉树的第k层上,最多有2k-1(k≥1)个结点;
              2. 性质2:深度为m的二叉树最多有2m-1个结点;
              3. 性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
              4. 性质4:具有n个结点的二叉树,其深度至少为[log2 n]+1,其中[log2 n]表示取log2 n的整数部分。
            3. 满二叉树与完全二叉树
              1. 完全二叉树允许最后一层右边的结点不是2度
              2. 满二叉树要求除了最后一层结点外其他必需是2度
                1. 两大基本性质:
                  1. :具有n个结点的完全二叉树的深度为[log2 n]+1。
                  2. 设完全二叉树共有n个结点。如果从根结点开始,按层次(每一层从左到右)用自然数1,2,……,

n给结点进行编号,则对于编号为k【层数】(k=1,2,……,n)的结点有以下结论:

①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2)。

②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点)。

③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。

              1. 所以满二叉树一般是完全二叉树,但是完全二叉树一般不是满二叉树
            1. 二叉树的历遍:
              1. 前序历遍:根->左树->右树
              2. 中序历遍:左树->根->右树
              3. 后序历遍:左树->右树->根
    1. 特殊结构——链表:
      1. 定义:
        1. 既可以是线性结构也可以是非线性结构。
        2. 数据结构的存储(物理)空间可以是不联系的。
        3. 各个数据结点的存储顺序与各个数据元素的逻辑关系可以不一致。
        4. 数据之间的存储关系由指针域决定。
      2. 结点组成:
        1. 数据元素的数据域。
        2. 指向前件(前一个结点)或后件(后一个结点)的指针域。
      3. 分类:
        1. 线性链表:每个结点有两个指针,左指针指向前件(前一个结点),右指针指向后件(后一个结点)。
        2. 带链的栈:在栈顶加入链表收集所有空闲的存储结点,也称可利用栈。
    2. 疑难解答:空的数据结构是线性结构还是非线性结构?
      1. 一个空的数据结构究竟是属于线性结构还是属于非线性结构,这要根据具体情况来确定。如果对该数据结构的算法是按线性结构的规则来处理的,则属于线性结构;否则属于非线性结构。

 

  • 查找技术

 

  1. 顺序查找:
    • 定义:从线性表的首索引到线性表的末索引查找,找到则退出,找不到则失败。
    • 应用场景:
      1. 无序线性表的,无论是顺序存储结构,还是链式存储结构,皆用顺序查找。
      2. 有序线性表中使用链式结构。
    • (最差情况)查找速度:n
  2. 二分法查找
    • 定义:有序顺序结构,中间索引,不断减半。
    • 应用场景:
      1. 有序的顺序结构。
    • (最差情况)查找速度:log2 n

 

  • 排序技术
  1. 冒泡排序:
    • 定义:由头到尾,两两比较
    • (最差情况)排序速度:n(n-1)/2
  2. 快速排序:
    • 定义:确定基准点,左右比较,左小右大。
    • (最差情况)排序速度:nlog n

 

  • 程序设计基础
  1. 结构化程序设计:
    • 定义:
      1. 自顶向下,逐步求精,模块化,限制goto语句的使用。
      2. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
    • 疑难解答:如何进行自顶向下设计方法?
      1. 程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标;不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
  2. 面向对象程序设计:
    • 特性:继承、多态、封装、抽象.
    • 对象:类的实例.
    • 类:具有相同特征的事物抽象的集合.
    • 消息:对象的传值传递。

 

 

  • 软件工程基础
  1. 软件工程基本概念
    • 软件定义和软件特点
      1. 定义:
        1. 计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。
        2. 程序和数据是计算机可以执行的,文档是计算机不能处理的。
      2. 包含内容:
        1. 程序:
          1. 软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列
        2. 数据:
          1. 使程序能正常操纵信息的数据结构
        3. 文档:
          1. 与程序的开发、维护和使用有关的图文资料
      3. 特点:
        1. 软件是逻辑实体,而不是物理实体,具有抽象性。
        2. 没有明显的制作过程,可进行大量的复制。
        3. 使用期间不存在磨损、老化问题。
        4. 软件的开发、运行对计算机系统具有依赖性。
        5. 软件复杂性高,成本昂贵。
        6. 软件开发涉及诸多社会因素。
      4. 应用目标:
        1. 应用软件。
        2. 系统软件。
        3. 支撑软件(或工具软件)。
    • 软件工程过程与软件生命周期
      1. 定义阶段:
        1. 软件可行性研究。
        2. 软件需求分析。
          1. 使用数据流程图。
      2. 开发阶段:
        1. 软件概要设计。
        2. 软件详细设计。
        3. 软件实现。
        4. 软件测试。
      3. 维护阶段:
        1. 软件使用。
        2. 软件维护。
        3. 软件退役。
  2. 结构化设计方法:
    • 软件设计的基础:
      1. 技术观点构成:
        1. 软件结构设计:
          1. 定义软件系统各主要部件之间的关系。
        2. 数据设计:
          1. 将分析时创建的模型转化为数据结构的定义。
        3. 接口设计:
          1. 描述软件内部、软件和协作系统之间以及软件与人之间如何通信。
        4. 过程设计:
          1. 把系统结构部件转换为软件的过程性描述。
      2. 工程管理划分:
        1. 概要设计:
          1. 软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。
        2. 详细设计:
          1. 确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。
    • 软件设计的基本原理:
      1. 抽象:
        1. 软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。
      2. 模块化:
        1. 模块是指把一个待开发的软件分解成若干小的简单的部分。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
      3. 信息隐蔽:
        1. 信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。
      4. 模块独立性:
        1. 由内聚度与耦合度组成,一般设计原则是“高内聚,低耦合”,增强程序的健壮性。
          1. 内聚度:
            1. 定义:
              1. 程序内功能联系。
            2. 分类(由弱到强排列):
              1. 偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚
          2. 耦合度:
            1. 定义:
              1. 多个程序之间的联系
            2. 分类(由高到低排列):
              1. 内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合
  3. 详细设计:
    • 定义:为软件结构图中的每个模块确定实现算法和局部数据结构,用某种选定的表达表示工具算法和数据结构的细节。
    • 常用工具:
      1. 图形工具:
        1. 程序流程图:
        2. N-S
        3. PAD
        4. HIPO
      2. 表格工具:
        1. 判定表
      3. 语言工具:
        1. PDL

 

  • 软件测试
  1. 软件测试的目的:
    • 在运行中发现软件的错误
  2. 软件测试的实施:
    • 单元测试:
      1. 定义:
        1. 对软件设计的最小单位--模块(程序单元)进行正确性检验测试
      2. 分类:
        1. 动态测试(运行效果测试)
        2. 静态测试(语法与结构测试)
    • 集成测试:
      1. 定义:
        1. 测试和组装软件的过程,主要目的是发现与接口有关的错误,主要依据是概要设计说明书
      2. 分类:
        1. 软件设计内容测试:
          1. 软件单元的接口测试。
          2. 全局数据结构测试。
          3. 边界条件测试。
          4. 非法输入测试。
        2. 软件模块组装成程序测试:
          1. 非增量方式组装
          2. 增量方式组装
    • 验收测试:
      1. 定义:
        1. 验证软件的功能和性能,以及其他特性是否满足了需求规格说明中确定的各种需求,包括软件配置是否完全、正确
      2. 分类:
        1. 黑盒测试:对软件进行有效性测试,即验证被测软件是否满足需求规格说明确认的标准
    • 系统测试:
      1. 定义:
        1. 通过测试确认软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支撑软件、数据和人员等其他系统元素组合在一起,在实际运行(使用)环境下对计算机系统进行一系列的集成测试和确认测试。
      2. 分类:
        1. 功能测试
        2. 性能测试
        3. 操作测试
        4. 配置测试
        5. 外部接口测试
        6. 安全性测试

 

  • 软件的调试
  1. 定义:
    • 在软件开发环节中在软件测试结束后对软件进行调试,找出软件潜在问题的步骤。
  2. 步骤过程:
    • 错误定位。从错误的外部表现形式入手,研究有关部分的程序,确定程序中出错位置,找出错误的内在原因。
    • 修改设计和代码,以排除错误。
    • 进行回归测试,防止引进新的错误。
  3. 原则:
    • 尽量避免试探法,减少甚至不加入新代码。
    • 调试改错后还应进行再测试,因为经调试后有可能产生新的错误,而且测试是贯穿生命周期的整个过程

 

  • 数据库系统的基本概念
  1. 数据、数据库、数据库管理系统:
    • 数据:一切可以输入计算机的客观事物的抽象。
    • 数据库:
      1. 可储存型。
      2. 可组织性——统一结构形式。
      3. 共享性。
    • 数据库管理系统(DBMS,Database Management System):
      1. 地位:数据库的核心。
      2. 作用:
        1. 数据组织
        2. 数据操作
        3. 数据维护
        4. 数据控制
        5. 数据保护
        6. 数据服务
      3. 功能:
        1. 数据模式定义
        2. 数据存取的物理构建
        3. 数据操纵
        4. 数据的完整性、安全性定义和检查
        5. 数据库的并发控制与故障恢复
        6. 数据的服务
      4. 实现功能所需的语言:
        1. 数据定义语言。
        2. 数据操纵语言。
        3. 数据控制语言。
      5. 数据库管理员的主要工作:
        1. 数据库设计
        2. 数据库维护
        3. 改善系统性能
        4. 提高系统效率
  2. 数据库系统的基本特点:
    • 数据独立性:
      1. 数据与程序间的互不依赖性,独立于应用程序。
      2. 分类:
        1. 物理独立性:
          1. 用户更改设备时,用户的数据不变。
        2. 逻辑独立性:
          1. 数据库逻辑结构改变时,用户数据不变。
    • 数据统一管理与控制:
      1. 数据的完整性检查。
      2. 数据的安全性保护。
      3. 并发控制。
  3. 数据库系统的内部结构体系:
    • 数据统系统的3级模式:
      1. 概念模式:
        1. 一个数据库只有一个概念模式。
        2. 处于中间层,它反映设计者的数据全局逻辑要求。
        3. 也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述。
        4. 全体用户(应用)公共数据视图。
      2. 外模式(子模式):
        1. 一个概念模式可以有若干个外模式。
        2. 处于最外层,它反映用户对数据的要求。
        3. 由概念模式推导而出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
        4. 数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。
      3. 内模式(物理模式):
        1. 数据库物理存储结构与物理存取方法。
        2. 处于最底层,它反映数据在计算机物理结构中的实际存储形式。
    • 数据库系统的两级映射:
      1. 概念模式到内模式的映射:
        1. 给出了概念模式中数据的全局逻辑结构到数据的物理存储结构间的对应关系。
      2. 外模式到概念模式的映射:
        1. 概念模式是一个全局模式而外模式是用户的局部模式。一个概念模式中可以定义多个外模式,而每个外模式是概念模式的一个基本视图。
  4. 数据库应用系统的结构(由顶层到底层):
    • 应用系统工具。
    • 应用开发工具软件。
    • 数据库管理系统。
    • 操作系统。
    • 硬件。

 

  • 数据模型
  1. 分类:
    • E-R模型:实体抽象模型(实体、属性、码、域、联系)。
    • 关系模型:二维表模型。
    • 层次模型:(树状结构模型)。
  2. 数据模型的基本概念:
    • 定义:
      1. 用来抽象、表示和处理现实世界中的数据和信息。
      2. 两个阶段:把现实世界中的客观对象抽象为概念模型;把概念模型转换为某一DBMS支持的数据模型。
    • 分类:
      1. 数据结构。
      2. 数据操作。
      3. 数据约束。
  3. E-R模型:
    • E-R模型的基本概念:
      1. 实体:
        1. 现实世界中的事物可以抽象成为实体,实体是概念世界中的基本单位,它们是客观存在的且又能相互区别的事物。
      2. 属性:
        1. 现实世界中事物均有一些特性,这些特性可以用属性来表示。
      3. 码:
        1. 唯一标识实体的属性集称为码。
      4. 域:
        1. 属性的取值范围称为该属性的域。
      5. 联系:
        1. 在现实世界中事物间的关联称为联系(1:1,1:N,N:N,N:1)。
    • E-R模型的图示法:
      1. 实体表示法:
        1. 在E-R图中用矩形表示实体集,在矩形内写上该实体集的名字。
      2. 属性表示法:
        1. 在E-R图中用椭圆形表示属性,在椭圆形内写上该属性的名称。
      3. 联系表示法:
        1. 在E-R图中用菱形表示联系,菱形内写上联系名。
  4. 层次模型:
    • 定义:
      1. 有且只有一个结点没有双亲结点,这个结点称为根结点。
      2. 除根结点以外的其他结点有且仅有一个双亲结点。
      3. 树形结构表示实体之间的联系。
  5. 关系模型:
    • 定义:
      1. 关系模式采用二维表来表示。
      2. 一个关系对应一张二维表。
      3. 一个关系就是一个二维表,但是一个二维表不一定是一个关系。
    • 性质:
      1. 二维表中元组个数是有限的--元组个数有限性。
      2. 二维表中元组均不相同--元组的唯一性。
        1. 二维表中惟一标识元组的最小属性值称为该表的键或码。
          1. 二维表中可能有若干个健,它们称为表的侯选码或侯选健。
            1. 从二维表的所有侯选键选取一个作为用户使用的键称为主键或主码。表A中的某属性集是某表B的键,则称该属性值为A的外键或外码。
      3. 二维表中元组的次序可以任意交换--元组的次序无关性。
      4. 二维表中元组的分量是不可分割的基本数据项--元组分量的原子性。
      5. 二维表中属性名各不相同--属性名唯一性。
      6. 二维表中属性与次序无关,可任意交换--属性的次序无关性。
      7. 二维表属性的分量具有与该属性相同的值域--分量值域的统一性。
    • 关系操纵:
      1. 数据查询。
      2. 数据删除。
      3. 数据插入。
      4. 数据修改。
    • 关系模型允许定义三类数据约束:
      1. 实体完整性约束。
      2. 参照完整性约束。
      3. 用户定义的完整性约束。
    • 关系模式与E-R图的互换:
      1. 实体与联系都可以表示成关系。
      2. E-R图中属性也可以转换成关系的属性。
      3. 实体集也可以转换成关系。

 

  • 关系代数
  1. 关系模型的基本操作:
    • 插入。
    • 删除。
    • 修改。
    • 查询:
      1. 投影运算:
        1. 从R中选择出若干属性列组成新的关系。
      2. 选择运算:
        1. 。选择运算是一个一元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。设关系的逻辑条件为F,则R满足F的选择运算可写成:σF(R)。
      3. 笛卡尔积运算:
        1. 设有n元关系R及m元关系S,它们分别有p、q个元组,则关系R与S经笛卡尔积记为R×S,该关系是一个n+m元关系,元组个数是p×q,由R与S的有序组组合而成。
  2. 关系代数中的扩充运算
    • 交运算:
      1. 关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。
    • 除运算:
      1. 如果将笛卡尔积运算看作乘运算的话,除运算就是它的逆运算。当关系T=R×S时,则可将除运算写成:T÷R=S或T/R=S。
      2. S称为T除以R的商。除法运算不是基本运算,它可以由基本运算推导而出。
    • 连接与自然连接运算:
      1. 连接运算又可称为θ运算,这是一种二元运算,通过它可以将两个关系合并成一个大关系。设有关系R、S以及比较式iθj,其中i为R中的域,j为S中的域,θ含义同前。则可以将R、S在域i,j上的θ连接记为:
        1. R |×| S

iθj

      1. 在θ连接中如果θ为"=",就称此连接为等值连接,否则称为不等值连接;如θ为"<"时称为小于连接;
      2. 如θ为">"时称为大于连接。
      3. 自然连接(natural join)是一种特殊的等值连接,它满足下面的条件:
        1. 两关系间有公共域。
        2. 通过公共域的等值进行连接。
          1. 设有关系R、S,R有域A1,A2,…,An,S有域B1,B2,…,Bm,并且,Ai1,Ai2,…,Aij,与B1,B2,…,
          2. Bj分别为相同域,此时它们自然连接可记为:
            1. R|×|S
          3. 自然连接的含义可用下式表示:
            1. R|×|S=πA1,A2,……An,Bj+1,……Bm(σAi1=B1^Ai2=B2^…^Aij=,Bj (R×S))
  1. 疑难解答:连接与自然连接的不同之处在什么?
    • 一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

 

  • 数据库设计与管理
  1. 数据库设计的两种方法;
    • 面向数据:
      1. 以信息需求为主,兼顾处理需求。
      2. 因为数据稳定性高,所以数据已成为系统的核心,所以面向数据的数据库设计方法已经成为主流。
    • 面向需求:
      1. 以处理需求为主,兼顾信息需求。
  2. 生命周期法:
    • 定义:
      1. 数据库设计的一般通用方法。
    • 步骤:
      1. 需求分析。
      2. 概念设计。
      3. 逻辑设计。
      4. 物理设计。

你可能感兴趣的:(计算机基础,数据结构,计算机基础,数据结构)