数据结构--查找

参考青岛大学–王卓老师
在这里插入图片描述

一、查找的基本概念

查找表:是由同一类型的数据元素(或者记录)构成的集合。
主关键字:可唯一标识一个记录的关键字是主关键字。
次关键字:用以识别若干记录的关键字成为次关键字。
查找表分为:静态查找表、动态查找表。
平均查找长度(ASL):关键字的平均比较次数。

二、线性表的查找

1.顺序查找

静态查找表,表内的元素是无序的
在这里插入图片描述
改进:
将key作为监视哨放在头部,当数组较长的时候,能够使进行一次的查找所需的平均时间几乎减少一半。
在这里插入图片描述
平均查找长度:(n+1)/2

2.折半查找(二分或者对分查找)

仅适用于有序表,相当于二分算法,仅限于顺序存储结构
非递归算法:
在这里插入图片描述
递归算法:
在这里插入图片描述
将这种性能用树来表示:
在这里插入图片描述
平均查找长度:
在这里插入图片描述

3.分块查找(索引顺序表查找)

将最大值写入一个索引表儿,将目标值与索引表中这 部分的最大值进行比较,应用于动态的
在这里插入图片描述
平均查找长度:对索引表的查找+对块内的查找

在这里插入图片描述
三种查找方式比较:
在这里插入图片描述

三、树表的查找

动态查找表

1.二叉排序树

左子树小于根节点,右子树大于根节点
在这里插入图片描述
对该树进行中序遍历,得到:3,12,24,37,45,53,61,78,90,100
递增有序
与查找的值与根节点比较,小到左子树,大到右子树
算法:利用递归思想进行查找在这里插入图片描述
比较关键词的次数=树的层数
最大次数=树的深度
平均查找长度:与树的形态有关
在这里插入图片描述
解决方式:对树进行平衡
插入:
看一下是不是空,若空,则为根节点
非空:树中已经有则不再插入,树中没有,查找直到某个叶子结点的左子树或者右子树为空为止,插入结点为叶子结点的左孩子或者右孩子
生成:
将无序的树进行排序生成有序的,第一个为根结点,其他的往中间插入。
删除:

  • 叶子结点直接删除
  • 只有左子树或者右子树,则直接去除,将双亲结点的指针域的值指向被删除结点的左子树或者右子树
  • 既有左子树,又有右子树,前驱替换:寻找左子树上的最大结点,替换它,将左子树中最大的删掉;后继替换:寻找右子树中最小的结点,替换它,将左子树中的最小删除了

举例:
在这里插入图片描述

2.平衡二叉树

平衡因子:左子树的高度-右子树的高度
定义:AVL树,平衡二叉树的平衡因子只能是-1,0,1
在这里插入图片描述
原则:降低高度,保持二叉排序树的性质(左子树比根小,右子树比根大)
如果两个点都失衡,则找最小的失衡子树
在这里插入图片描述

四、散列表(哈希)的查找

1.基本概念

对应关系–hash函数 H(key)=k
如果 H(key1)= H(key2)则出现冲突,key1和key2称为同义词
地址空间尽量少,排列尽量均匀

2.构造方法

散列函数的构造方法:

  1. 直接定址法
  2. 数字分析法
  3. 平方取中法
  4. 折叠法
  5. 除留余数法
  6. 随机数法

直接定址法(不会冲突):
hash(key)=a*key+b
除留余数法:
hash(key)=key mod p

3.处理冲突的方法

a.开放定址法

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
同理,伪随机探测法,di是伪随机数

b.链地址法

相同的散列地址的记录链成一个单链表,m个散列地址就设m个单链表
在这里插入图片描述

c.再散列法
d.建立一个公共溢出区

4.散链表的查找

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值