0
点赞
收藏
分享

微信扫一扫

学习笔记--数据结构与算法基础(青岛大学-王卓)--第七章查找算法

小布_cvg 2022-02-16 阅读 79

视频链接
在这里插入图片描述
数据结构与算法基础(青岛大学-王卓)–第七章查找

本章知识框架
在这里插入图片描述

目录:

1.查找的基本概念

  • 什么是查找表?
    在这里插入图片描述

  • 什么是关键字
    在这里插入图片描述

  • 什么是查找
    在这里插入图片描述

  • 查找是否成功?

  • 查找的目的?
    在这里插入图片描述

  • 查找的分类
    在这里插入图片描述

  • 如何评价查找算法
    在这里插入图片描述

  • 查找过程中我们需要研究什么?
    在这里插入图片描述

2.线性表的查找

对于这一部分,该视频讲解了顺序查找(线性查找),折半查找(二分或对分查找)和分块查找这三类查找。
在这里插入图片描述

顺序查找(线性查找)
在这里插入图片描述

  • 顺序查找
    在这里插入图片描述
    算法1:在这里插入图片描述
    算法2:
    在这里插入图片描述
    算法3:
    在这里插入图片描述

算法改进:

在这里插入图片描述
在这里插入图片描述
对改进算法的时间效率进行分析:
在这里插入图片描述
在这里插入图片描述

顺序查找的特点:
在这里插入图片描述

折半查找(二分或对分查找【查找表必须是有序表】)
什么是折半查找:
在这里插入图片描述
非递归算法:
在这里插入图片描述
在这里插入图片描述
递归算法:

int Search Bin(SSTable ST, KeyType key,int low ,int high){
	if(low > high) return 0;
	mid = (low + high)/2;
	if(key == ST.elem[mid].key) return mid;
	else if(key < ST.elem[mid].key)
		high = mid - 1;
	else
		low = mid + 1;
	Bin(ST,key,low,high);
}

折半查找的性能分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分块查找(索引顺序查找)
分块查找:
下面查38,先选择块(38大于22并且小于48所以在索引表序号7开始的块中即第二块),再从块内进行查找(通过顺序查找,即可找到38位于序号10)
在这里插入图片描述
分块查找性能分析:
在这里插入图片描述
分块查找优缺点:
在这里插入图片描述
顺序,折半和分块查找的方法比较
在这里插入图片描述

3.树表的查找

动态查找表:表结构在查找过程中动态生成
在这里插入图片描述

  • 二叉排序树
  • 平衡二叉树
  • 红黑树
  • B-树
  • B+树
  • 建树

二叉排序树

  • 什么是二叉排序树

在这里插入图片描述
二叉排序树
在这里插入图片描述
非二叉排序树
在这里插入图片描述

  • 二叉排序树的性质
    中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列。

在这里插入图片描述
中序遍历二叉排序树
在这里插入图片描述

  • 二叉排序树查找操作
    在这里插入图片描述
    查找105,过程红色箭头
    在这里插入图片描述
    二叉排序树的存储结构
    在这里插入图片描述
    二叉排序树算法思想
    在这里插入图片描述
    算法代码描述:
    在这里插入图片描述

  • 二叉排序树的查找分析
    在这里插入图片描述
    二叉排序树的平均查找长度:
    在这里插入图片描述
    最好情况和最坏情况:
    含有n个结点的二叉排序树的平均查找长度和树的形态有关
    在这里插入图片描述

  • 二叉排序树的插入操作
    在这里插入图片描述
    如果插入的结点为叶子结点
    在这里插入图片描述
    二叉排序树的生成
    在这里插入图片描述
    例子1:
    在这里插入图片描述
    在这里插入图片描述
    关键字的输入顺序不同,建立的不同二叉排序树:
    在这里插入图片描述

  • 二叉排序树删除操作
    在这里插入图片描述
    (1)被删除的结点是叶子结点:直接删去该结点。
    在这里插入图片描述
    在这里插入图片描述
    (2)被删除的结点只有左子树或者只有右子树,用其左子树或者右子树替换它(结点替换)。
    在这里插入图片描述
    在这里插入图片描述
    (3)被删除的结点既有左子树,也有右子树
    在这里插入图片描述在这里插入图片描述
    例子:
    在这里插入图片描述

  • 平衡二叉树
    在这里插入图片描述
    什么是平衡二叉树?
    在这里插入图片描述
    什么是平衡因子?
    根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是-1、0,或1
    在这里插入图片描述
    例子1(是一个平衡二叉树):
    下图是结点为40的平衡因子计算过程:
    在这里插入图片描述
    在这里插入图片描述
    例子2:
    在这里插入图片描述
    在这里插入图片描述

  • 失衡二叉排序树的分析和调整
    在这里插入图片描述
    平衡调整的四种类型:
    在这里插入图片描述
    调整(调整原则:1.降低高度;2.保持二叉排序树性质):
    在这里插入图片描述
    LL型调整:
    在这里插入图片描述
    在这里插入图片描述
    例子:
    在这里插入图片描述
    RR型调整:
    在这里插入图片描述
    在这里插入图片描述
    例子:
    在这里插入图片描述
    在这里插入图片描述
    LR型:
    在这里插入图片描述
    在这里插入图片描述
    例子:
    在这里插入图片描述
    RL型:
    在这里插入图片描述
    例子:
    在这里插入图片描述
    在这里插入图片描述

4.哈希表的查找

  • 散列表(哈希表)的基本概念
    在这里插入图片描述
    例1:
    在这里插入图片描述
    例2:
    在这里插入图片描述
    在这里插入图片描述
    散列表:
    在这里插入图片描述
    散列表的优缺点:
    在这里插入图片描述
    散列方法:
    在这里插入图片描述
    冲突:
    在这里插入图片描述
  • 构造散列函数
    使用散列表要解决好二个问题
    在这里插入图片描述
    构造散列函数考虑的因素:
    在这里插入图片描述
    构造的要求和相关构造方法:
    在这里插入图片描述
    直接定址法(一个x对应唯一的Y值):
    在这里插入图片描述
    除留余数法:
    在这里插入图片描述
  • 处理冲突的方法
    在这里插入图片描述
    开放定址法(开地址法)
    在这里插入图片描述
    线性探测法:
    在这里插入图片描述
    例子:
    在这里插入图片描述
    二次探测法:
    在这里插入图片描述
    伪随机探测法:
    在这里插入图片描述

链地址法(拉链法)
在这里插入图片描述
链地址法建立散列表步骤:
在这里插入图片描述
链地址法的优点:
在这里插入图片描述

  • 散列表的查找
    在这里插入图片描述
    例子1(线性探测法):
    在这里插入图片描述
    例子2(链地址法):
    在这里插入图片描述
  • 散列表的查找效率
    在这里插入图片描述
    在这里插入图片描述
举报

相关推荐

0 条评论