稀疏知识点总结 | 数据结构与算法

242 阅读6分钟

一.绪论

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

  2. 数据元素是数据的基本单位

  3. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合

  4. 一个数据元素可由若干个数据项组成

  5. 算法的特性:

    • 有穷性
    • 确定性
    • 可行性
    • 输入
    • 输出
  6. 数据结构包括三方面的内容: 逻辑结构、存储结构和数据的运算

    • 逻辑结构包括 线性结构和非线性结构
      • 线性结构包括 线性表 (一般线性表、栈、队列、串、数组)
      • 非线性结构包括 集合、树形结构、图形结构或网状结构

线性表

image.png

image.png

image.png

  1. n个不同元素进栈,出栈元素不同排列的个数为 CmnC_m^n/(n+1) 其中 m = 2n

  2. 对于共享栈 top0 + 1 = top1 image.png

  3. 链栈相比于顺序栈的优点

    • 链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满的情况
  4. 将一个递归算法改为对应的非递归算法时,通常需要使用(栈)

  5. 栈能适用于递归算法,表达式求值以及括号匹配等问题

队列

image.png

队列是一种操作受限的线性表,它与栈不同的是,队列中所有的插入操作均限制在表的一端进行,而所有的删除操作均被限制在另一端进行,允许插入的一段称为队尾,允许删除的一段称为队首,队列具有先进先出的特点

循环队列

image.png

image.png

image.png

  1. 树中的结点数等于所有结点的度数加1
  2. 度为m的树中第i层上至多有m2i-1个结点
  3. 高度为h的m叉树至多有(mh-1)/(m-1)个结点
  4. 具有n个结点的m叉树的最小高度为[logm(n(m-1)+1)]
  5. 什么是树的度? 所有结点度中的最大值

二叉树

  • 平衡二叉树(AVL) : 树上任一结点的左子树和右子树的深度之差绝对值不超过1
  • 线索二叉树 : 加上线索的二叉树

二叉树的性质

  • 非空二叉树上的叶子结点等于度为2的结点数加1,即n0=n2+1
  • 非空二叉树上第k层上至多有2k-1个结点
  • 高度为h的二叉树至多有2k-1个结点
  • 在含有n个结点的二叉链表中,含有n+1个空链域,含有n-1个非空链域

完全二叉树

  • 完全二叉树的度为1的结点的个数最多为1个
  • 完全二叉树的双亲结点为 [i/2] -> 向下取整
  • 具有n个结点的完全二叉树的深度必为[log2n]+1
  • 具有n(n>0)个结点的完全二叉树的高度为[log2(n+1)]或[log2n]+1
  • 对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2。

树的遍历

  1. 先根遍历的顺序和对应二叉树的先序遍历是一致的

    后根遍历的顺序和对应二叉树的中序遍历是一致的

二叉树的遍历

  • 若二叉树中各节点的值均不相同,则:
    • 由二叉树的前序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树
    • 由前序序列和后序序列却不一定能唯一地确定一棵二叉树。

哈夫曼树

  1. 概念:

    • 带权路径长度: 结点到根的路径长度与结点上权的乘积
    • 树的带权路径长度: 树中所有叶子结点的带权路径长度之和
    • 哈夫曼树: 带权路径长度最小的树
  2. 一棵有n个叶子结点的Huffman树有(2n-1)个结点

森林的遍历

  1. 先序遍历: 先根后子树
  2. 中序遍历: 先子树后根
  3. 森林的先序遍历序列和对应二叉树的先序遍历顺序是一致的 森林的中序遍历序列和对应二叉树的中序遍历顺序是一致的

二叉排序树

  1. 向二叉排序树中插入一个新节点时,新结点一定会成为二叉排序树的一个叶子节点
  2. 二叉排序树删除:若结点有左右两棵子树,则令该结点的直接后继(直接前驱)代替该结点,然后从二叉排序树中删除这个直接后继(直接前驱),就转化成了前两种情况

image.png

image.png

  1. 网: 带权的图称为网
  2. 极小连通子图:该子图是G 的连通子图,在该子图中删除任何一条边,子图不再连通。
  3. 包含图G所有顶点的极小连通子图(n-1条边)
  4. DFS:深度优先搜索
  5. BFS:广度优先搜索

最小生成树

image.png

Prim(普里姆)算法

  • 归并顶点,与边数无关,适于稠密网。

Kruskal(克鲁斯卡尔)算法

  • 归并边,适于稀疏网。

最短路径

image.png

Dijkstra算法

  • 时间复杂度:O(n2)

弗洛伊德算法

  • 时间复杂度:O(n3)

图的存储结构

邻接矩阵法

  • 特点
    1. 适合稠密图

邻接表法

  • 特点

    1. 若G为无向图,则所需的存储空间为O(|V| + 2|E|)

      若G为有向图,则所需的存储空间为O(|V| + |E|)

    2. 对于稀疏图,采用邻接表表示能极大地节省空间

    3. 图的邻接表表示不唯一

    4. 在有向图的邻接表表示中,求一个给定顶点的出度只需计算其邻接表中的结点个数

查找

image.png

  1. 平均搜索长度ASL

顺序表的查找

顺序查找

image.png

折半查找

非递归算法

image.png

递归算法

image.png

性能分析

image.png

二叉排序树

  • 中序遍历二叉排序树后的结果是一个递增的有序数列

image.png

  • 二叉排序树插入的结点一定在叶子节点上

  • 二叉排序树的删除操作 image.png

image.png

image.png

  • 二叉排序树的平衡

image.png

哈希查找

image.png

image.png

排序

image.png

image.png

image.png

image.png

image.png

插入排序

直接插入排序

image.png

image.png

折半插入排序

image.png

image.png

希尔排序

image.png

image.png

image.png

交换排序

冒泡排序

image.png

image.png

image.png

快速排序

image.png

image.png

image.png

image.png

  • 快速排序最好时间复杂度:nlog2n
  • 快速排序最坏时间复杂度:n2

选择排序

简单选择排序

image.png

image.png

树形选择排序

堆排序

image.png

归并排序

image.png