数据结构——第七章 查找

查找的目的是从给定的同一类型的数据集合中,找出人们所需要的数据元素(或记录)/

基本术语:

记录(record)

关键字(keyword)

主关键字(Primarykey)

次关键字(Secondary Key)

查找表(Searching Table)

动态查找(Dynamic Searching)

静态查找(Static Searching)

内部排序(Internal Sorting)

外部排序(External Sorting)

稳定性(Stability)

 

1 静态查找

一、顺序查找

顺序查找是用待查找记录与查找表中的记录逐个比较,若找到相等记录,则查找成功,否则,查找失败。

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

折半查找的前提是表有序的而且是顺序存储

使用三个指针low mid和high。

 

二分查找的性能分析

为了分析二分查找的性能,可以用二叉树来描述二分查找的过程。

把当前查找区间的中点作为根节点,左子区和右子区间分别作为根的左子树和右子树,

左子区间和右子区间按类似的方法,由此得到的二叉树成为二分查找的判定树。

ASL是平均查找长度(或说平均比较次数)

 

 2 动态查找

在查找表中实施查找时,对于给定值key,若表中存在关键字段等于key的记录,则查找成功。

否则将带查找记录按规则插入查找表中。

下面我们介绍几种动态查找方法。

一、二叉排序树查找:前提是将查找表组织为一颗二叉排序树。

 

 

二叉排序树。它或是一颗空树,或是一颗具有如下特征的非空二叉树。

(1)若他的左子树非空,则左子树上所有结点的关键字均小于根节点的关键字。

(2)若他的右子树非空,则右子树上所有结点的关键字均大于等于根节点的关键字;

(3)左、右子树本身又都是一颗二叉排序树。

 

首先要构造二叉排序树,给定一组顺序。。然后开始构造。

 

 

二叉排序树的效率高于顺序但低于二分。

后来发明了平衡二叉树,让树变矮一些,效率高了一些。。

 构造过程:

求每一个结点的平衡因子,所有结点的平衡银子为0,1,-1时,为平衡二叉树

平衡因子: 左子树高度减右子树高度 

(1)LL型 

左 -> 左

 旋转

 

(2)LR型

 

左 -> 右

先变成LL 然后旋转

 (3)RR型

右->右

(4)RL型

边建边调整。

 

 

 

 

3 hash查找(其实可以看成是一种动态查找)

 介绍一种不通过大量无效的比较,就能直接找到待查关键字的位置的查找方法

基本术语:

1.hash方法:

在存放记录时,通过相同函数计算存储位置,并按此位置存放,这种方法成为hash方法。

2.hash函数:

指在hash方法中使用的函数。

3.hash表:

按hash方法构造出来的表称为hash表。

4.hash地址:

通过hash函数计算记录的存储位置,我们把这个存储位置称为Hash地址。

5.冲突:

不同记录的关键字经过Hash函数计算可能得到同一hash地址,即key1!=key2时,

H(key1)=H(key2)。这种现象叫做“冲突”。

 

对于hash方法需要讨论三个问题:

(1)装满因子

(2)对于给定的一个关键字集合,选择一个计算简单且地址分布比较均匀的Hash函数,避免或尽量减少冲突。

(3)拟订解决冲突的方案。

 

构造hash函数的常用方法:

(1)直接定址法(重点)

Hash(key) = a*key + b

(2)数字分析法

(3)除留取余法(重点)

 

处理冲突的方法:

1.开放地址法

 

///待更新。。

 

posted @ 2018-01-27 19:50  hh9515  阅读(216)  评论(0编辑  收藏  举报