查找的目的是从给定的同一类型的数据集合中,找出人们所需要的数据元素(或记录)/
基本术语:
记录(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)左、右子树本身又都是一颗二叉排序树。
首先要构造二叉排序树,给定一组顺序。。然后开始构造。
二叉排序树的效率高于顺序但低于二分。
后来发明了平衡二叉树,效率高了一些。。
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)拟订解决冲突的方案。
///待更新。。