2021/04/16 数据结构 (重学)

数据结构

  • 前言
  • 第一章 就绪
    • 算法分析
  • 第二章 线性表
  • 第三章 栈和队列
  • 第四章 串/数组和广义表
  • 第五章 树
  • 第六章 图
  • 第七章 查找技术
    • 线性表的查找
      • 一、顺序查找(线性查找)
      • 二、折半查找(二分或对分查找)
      • 三、分块查找(索引顺序查找)
    • 树表的查找
      • 二叉排序树
      • 平衡二叉树
    • hash(哈希或散列)表的查找
  • 第八章 排序技术
    • 插入排序
      • 直接插入排序
      • 折半插入排序
      • 希尔排序(不稳定)
    • 交换排序
      • 冒泡排序
      • 快速排序(不稳定)
    • 选择排序
      • 直接选择排序(不稳定)
      • 堆排序(不稳定)
    • 归并排序
    • 基数排序(桶排序或箱排序)
    • 各种排序方法比较

前言

学习视频来源于 B站 青岛大学-王卓
2021/04/16 数据结构 (重学)_第1张图片

第一章 就绪

算法分析

时间复杂性 T(n) 所有执行时间之和
时间渐进复杂性(数量级) O(n) 最高时间次数数量级
空间渐进复杂性 S(n)

第二章 线性表

一对一的模式
顺序存储:数组
链式存储:链表
(环状表)

第三章 栈和队列

栈:先进后出
队列:先进先出
(环状)

第四章 串/数组和广义表

串:字符类型
广义表:表中表(套娃)

第五章 树

二叉树:一个根结点,与两个子节点(可空集)
满二叉树:节点个数为 2的i(深度)次方 减1 (可空集)
完全二叉树: 满二叉树的最后一层叶节点从左到右必须连续,右边可缺失 (可空集)
线索二叉树:左右子树为空时,指向前倾和后继。
最优二叉树:哈夫曼树
哈夫曼算法口诀:1、构造森林全是根;2、选用两小造新树;3、删除两小添新人;4、重复2、3剩单根。
哈夫曼编码:前缀编码

第六章 图

有向图:
无向图:
带权:
强连通、极强连通、极小连通
顺序存储:邻接矩阵
链式存储:十字链表、邻接表、邻接多重表
DFS(深度优先搜索):堆(递归)需要visited[n]数组通过置1表示已被检索过
BFS(广度优先搜索):队列


图的应用:最小生成树、最短路径、拓扑排序、关键路径
生成树:不存在回路得图
深度优先生成树、广度优先生成树
最小生成树(MST 无向网络):权值相加最小(n点间)
算法:prim算法(选择点)、kruskal算法(选择边)

最短路径:寻找一条各边权值之和最小的路径(两点间)
算法:单源最短路径(dijkstra算法)、所有顶点间的最短路径(floyd算法)

拓扑排序(AOV网):排课先后问题(前置学习)
1.在有向图中选择一个没有前驱的定点
2.从图中删除该定点和所有以它为尾的弧
3.重复有1、2

关键路径(AOE网):工程计划问题(路径长度最长的路径)

第七章 查找技术

ASL(平均查找长度)

线性表的查找

一、顺序查找(线性查找)

设置监视哨的顺序查找;
时间效率O(n);
空间复杂度O(1);(哨兵)
如何提高查找效率:进行查找频度排序

二、折半查找(二分或对分查找)

性能分析——判定树(查找次数所表示的树)
ASL(成功时):log2(n+1)-1
优点:查找效率比顺序高
缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)。

三、分块查找(索引顺序查找)

分块有序:先确定所在块(顺序或二分查找),再在块内查找(顺序查找)
查找效率:ASL:Lb+Lw(对索引表与块内查找)
优点:插入和删除方便,无需进行大量移动
缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。
适用情况:如果线性表既要快速查找又经常动态变化,则可采用分块查找。

树表的查找

二叉排序树、平衡二叉树、红黑树、B-树、B+树、键树

二叉排序树

左孩子比根小,右孩子比根大;
查找分析:最好为二分查找效率,最差为顺序查找效率,与树的形态有关

平衡二叉树

又叫AVL树
平衡因子:左子树高度减右子树高度
平衡调整的四种类型:LL型、LR型、RL型、RR型(老二提上来)

hash(哈希或散列)表的查找

散列存储:Loc(i)= H(keyi)
散列函数:H(key)= k
冲突:H(key1)=H(key2)

构造方法:
1.直接定址法
Hash(key)=a*key+b (a、b为常数)
2.数字分析法
3.平方取中法
4.折叠法
5.除留余数法
Hash(key)=key mod p (p是一个整数(最好是小于等于表长的质数))
6.随机数法

处理冲突的方法
1.开放定址法(开地址)
线性探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为1,2,3,4…
二次探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为12,-12,22,-22…,q2
伪随机探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为伪随机数
2.链地址法(拉链法)
相同散列地址的记录链成一个单链表
3.再散列法(双散列函数法)
4.建立一个公共溢出区

散列表的查找效率分析
1.散列函数
2.处理冲突的方法
3.散列表的装填因子a=表中填入的记录数/哈希表的长度

第八章 排序技术

插入排序

顺序法定位插入位置——直接插入排序
二分法定位插入位置——二分插入排序
缩小增量多遍插入排序——希尔排序

直接插入排序

采用顺序查找法查找插入位置

折半插入排序

查找插入位置时采用折半查找法
减少了比较次数

希尔排序(不稳定)

Hibbard增量序列
Dk=2k-1相邻元素互质
Sedgewick增量序列
{1,5,19,41,109,…}——94i-92i+1或4i-3*2i+1

交换排序

冒泡排序

每趟不断将记录两两比较,并按“前小后大”规则交换。

两个相邻元素比较,移动元素。

快速排序(不稳定)

任取一个元素(如:第一个)为中心
所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表;
对各子表重新选择中心并依此规则调整
直到每个子表的元素只剩一个

选择排序

直接选择排序(不稳定)

再待排序的数据中选出最大(小)的元素放在其最终的位置。

堆排序(不稳定)

若再输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值(次大值)……如此反复,便能得到一个有序序列,这个过程称之为堆排序。

归并排序

将两个或两个以上的有序子序“归并”为一个有序序列。

需要额外辅助空间。

基数排序(桶排序或箱排序)

分配+收集
设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再按序号将非空的连接

各种排序方法比较

2021/04/16 数据结构 (重学)_第2张图片

你可能感兴趣的:(#,计算机基础知识,其他)