数据结构-查找

本文详细介绍了几种常见的查找算法,包括顺序查找、折半查找和分块查找。在顺序查找中,平均查找长度约为表长的一半;折半查找在有序表中效率更高,平均查找长度与判定树的高度相关;分块查找结合了索引和块内顺序查找。此外,文章还讨论了二叉排序树和AVL树,强调了平衡二叉树在保持查找效率方面的重要性,以及如何通过旋转操作来维持平衡。
摘要由CSDN通过智能技术生成

目录

平均查找时间 

 ①顺序查找

②折半查找

③分块查找

树表的查找

1、二叉排序树

2、平衡二叉树 (AVL树)

3.1 平衡因子 BF

3.2 最小不平衡子树

 4. 二种旋转方式

4 种「旋转」纠正类型:


平均查找时间 

ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均 需要 和 待查找值比较的 关键字次数 称为平均查找长度。
它的定义是这样的:

在这里插入图片描述

其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数

  •  ①顺序查找

Ci(第i个元素的比较次数)在于这个元素在查找表中的位置,如第0号元素就需要比较一次,第一号元素比较2次…第n号元素要比较n+1次。所以Ci=i;所以

在这里插入图片描述

可以看出,顺序查找方法 查找成功平均比较次数为表长的一半

当待查找元素不在查找表中时,也就是扫描整个表都没有找到,即比较了n次,查找失败

在这里插入图片描述

  • ②折半查找
  1. 要求待查找表是有序表,顺序存储结构
  2. 用二叉树描述查找过程,查找区间中间位置作为根,左子表为左子树,右子表为右子树,因为这颗树也被称为判定树(decision tree)或比较树(Comparison tree)
  3. 查找方式为(找k),先与树根结点进行比较:
    若k小于根,则转向左子树继续比较;若k大于根,则转向右子树,递归进行上述过程,直到查找成功或查找失败。
    折半查找法在查找不成功时和给定值进行关键字的比较次数最多为树的高度。

  4.  在n个元素的折半查找判定树中,由于关键字序列是用树构建的,所以查找路径实际为树中从根节点到被查结点的一条路径,因为比较次数刚好为该元素在树中的层数

在这里插入图片描述

       

        而在这样的判定树中,会有n+!种查找失败的情况,因为将判定树构建为完全二叉树

        又有n+1个外部结点(用Ei(0<=i<=n)表示),查找失败,即为从根结点到某个外部结点

        也没有找到,比较次数为该内部结点的结点数个数之和

在这里插入图片描述

                qi表示查找属于Ei中关键字的概率,level(Ui)表示Ei对应外部结点的层次。

所以,在一颗有n个结点判定树中,总数在这里插入图片描述, 判定树高度为在这里插入图片描述(向上取整)的满二叉树,第i层上结点个数为在这里插入图片描述,查找该层上的结点需要进行i次比较。

因此,在等概率情况下ASL为 看个例子会更好理解。

例:给11个数据元素有序表(2,3,10,15,20,25,28,29,30,35,40)采用折半查找。则ASL成功和不成功分别是多少?

首先画出判定树,
在这里插入图片描述
查找成功时总会找到途中某个内部结点,所以成功时的平均查找长度

在这里插入图片描述


即25查找一次,成功,10,30要查找2次,成功.


 而不成功的平均查找长度在这里插入图片描述


为什么这么算呢,因为内部结点都能查找成功,而查找不成功的就是那些空的外部结点,所以到查询到2的左孩子,15的左孩子,

28的左孩子,35的左孩子,3的左右孩子,20的左右孩子,29的左右孩子,40的左右孩子时,都是查找不成功的时候。


如我要找1,比25小,转向左子树,比较一次,比10小,转左子树,2次,比2 小,转左子树,3次,此时2无左子树,所以失败。所以在这里插入图片描述

③分块查找
  • 建立一个索引表——索引项(关键字项<子表内最大的关键字>、指针项)
  • 块内:只能顺序查找
    • 平均查找长度:ASL=Lb(查找索引项确定所在块)+Lw(块内查找元素)
                             

树表的查找

1、二叉排序树

🎯 折半查找长度为n的顺序表的判定树是唯一的,而含有n个结点的二叉排序树不唯一

含有n个结点的二叉排序树平均查找长度树的形态有关

  • 树的高度越小,查找速度越快

维护表的有序性,二叉排序树更有效,无需移动记录,只需要修改指针

  • 插入:不存在关键字等于key的结点才进行插入,O(log2  n)
  • 创建:结束标志  n次插入操作:O(nlog2  n)
  • 删除:缺左子树,缺右子树,缺左右子树 ,O(log2  n)

2、平衡二叉树 (AVL树)

判断「平衡二叉树」的 2 个条件:

  • 1. 是「二叉排序树」
  • 2. 任何一个节点的左子树或者右子树都是「平衡二叉树」(左右高度差小于等于 1)

3.1 平衡因子 BF

定义:左子树和右子树高度差

计算:左子树高度 - 右子树高度的值

别名:简称 BF(Balance Factor)

一般来说 BF 的绝对值大于 1,,平衡树二叉树就失衡,需要「旋转」纠正

3.2 最小不平衡子树

距离插入节点最近的,并且 BF 的绝对值大于 1 的节点为根节点 的子树。

「旋转」纠正需要纠正「最小不平衡子树」即可

 4. 二种旋转方式

左旋
旧根节点为新根节点的左子树
新根节点的左子树(如果存在)为旧根节点的右子树
右旋:
旧根节点为新根节点的右子树
新根节点的右子树(如果存在)为旧根节点的左子树

4 种「旋转」纠正类型:

LL 型:插入左孩子的左子树,右旋
RR 型:插入右孩子的右子树,左旋
LR 型:插入左孩子的右子树,先左旋,再右旋
RL 型:插入右孩子的左子树,先右旋,再左旋

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值