Bootstrap

第一章 绪论

第一章 绪论

在这里插入图片描述

1.1 基本概念

  • 数据
    -是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并能被计算机程序识别和处理的符号的集合。数据是计算机加工的原料

  • 数据元素
    -是数据的基本单位,通常作为一个整体进行考虑,可由若干个数据项组成。有些情况下数据元素也称为元素、节点、顶点、记录

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

  • 数据对象
    具有相同性质的数据元素的集合,是数据的一个子集。

  • 数据结构
    相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素之间相互的关系称为结构

  • 数据类型
    是一个值的集合和定义在此集合上的一组操作的总称。
    1)原子类型:其值不可再分的数据类型。例如整型(int)。
    2)结构类型:其值可以再分解为若干成分(分量)的数据类型。例如结构体。
    3)抽象数据类型(ADT)

  • 抽象数据类型
    抽象数据组织及与之相关的操作。与数据的存储结构无关()。可以用于定义一个完整的数据结构。

    1, 抽象数据类型 = 逻辑结构+数据运算。逻辑结构不涉及数据在计算机中具体的实现和存储,这些操作是由存储结构决定的,这就是说,抽象数据类型只需考虑问题本身即可。

    2,类型是指一类数据。基本数据类型被人做是最基本地,不可再划分的数据,一般就是整形、浮点型、以及字符型。抽象数据类型是由若干基本数据类型归并之后形成的一种新的数据类型,这种类型由用户定义,功能操作比基本数据类型更多,一般包括结构体和类。

    3,抽象数据类型是在在不涉及具体的,和计算机系统相关的细节情况下,优先理解问题本身,在此基础上,实现用计算机求解问题的过程。这就是使用抽象数据类型的目的。

参考文章:数据结构与算法——十分钟理解抽象数据类型

1.2 数据结构三要素

1.2.1 逻辑结构

  • 集合
  • 线性结构
  • 树形结构
  • 网状结构(图结构)

1.2.2 数据的运算

1.2.3 物理结构(存储结构)

加粗样式

  • 顺序存储:逻辑上相邻的元素物理上的存储位置也相邻。
    优点:随机存取,占用存储空间少。
    缺点:只能使用相邻一整块的存储单元,因此易产生外部碎片。
  • 链式存储:逻辑上相邻的元素物理上不一定相邻,借用指针表示元素之间的逻辑关系。
    -优点:不会出现碎片现象,充分利用存储单元。
    缺点:智能顺序存储,指针占用额外存储单元。
  • 索引存储:建立额外的索引表,索引表中有索引项(关键字,地址)。
    优点:检索速度快。
    缺点:索引表占用存储空间,修改数据时也要修改索引表,花费额外时间。
  • 散列存储:根据元素的关键字直接计算出该元素的存储地址。
    优点:检索、增加和删除结点的操作都很快。
    缺点:如果散列函数不好,则可能出现冲突,解决冲突会增加时间和空间开销。

1.3 算法的基本概念

1.3.1 什么是算法

是对特定问题求解步骤的一种描述。它是指令的有限序列,其中每条指令表示一个或多个操作。

1.3.2 算法五特性

  • 有穷性:执行有穷步,在有穷时间内完成。
  • 确定性:算法中每条指令必须有确切含义,相同的输入得出相同的输出。
  • 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来完成。
  • 输入:零个或多个输入。
  • 输出:一个或多个输出。

1.3.3 “好”算法特性

  • 正确性:正确求解问题。
  • 可读性:易于理解,有良好的可读性。
  • 健壮性:输入数据非法,能做出适当的反应或者处理。
  • 高效率与低存储量需求:时间复杂度低,空间需求少。

1.4 算法的评价指标

1.4.1 时间复杂度

1、加法规则
T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O (max ( f(n),g(n) ) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))
2、乘法规则
T ( n ) = T 1 ( n ) ∗ T 2 ( n ) = O ( f ( n ) ) ∗ O ( g ( n ) ) = O ( f ( n ) ∗ g ( n ) ) T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O (f(n) * g(n)) T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)g(n))
3、常见时间复杂度
c < l o g 2 n < n < n ∗ l o g 2 n < n 2 < n 3 < 2 n < 3 n < n ! < n n ( c 是一个常量) c < log2n < n < n*log2n < n2< n3 < 2n < 3n < n! <n^n(c是一个常量) c<log2n<n<nlog2n<n2<n3<2n<3n<n!<nnc是一个常量)
4、时间复杂度计算要点
1)关注循环(时间复杂度本质上是和循环的次数有关)。
2)如有嵌套循环,则关注最深层。
3)忽略循序循环的常数项。

1.4.2 空间复杂度

算法空间复杂度是算法所耗费的存储空间。一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。
算法原地工作是指算法所需的辅助空间为常量,即O(1).

;