码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构——第七章 查找

时间:2018-01-27 21:12:43      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:相同   目的   blog   平衡   需要   img   大量   比较   内部排序   

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

基本术语:

记录(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)拟订解决冲突的方案。

 

///待更新。。

 

数据结构——第七章 查找

标签:相同   目的   blog   平衡   需要   img   大量   比较   内部排序   

原文地址:https://www.cnblogs.com/eret9616/p/8367042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!