- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 查找与散列结构;主要内容; 查找; 查找; 查找; 查找; 查找;静态查找
顺序表的查找:顺序查找
有序表的查找:折半查找
索引顺序表的查找:分块查找;查找表
可用线性表表示L1=(45,61,12,3,37,24,90,53,98,78)
顺序查找
从最后一个(第一个)记录开始,逐个进行比较
查找不成功的标记
用顺序表表示静态查找表
用线性链表表示静态查找表;第 * 页;第 * 页;第 * 页;顺序查找特点
无排序要求;
算法简单;
存储结构:顺序、链式;
效率不高
;查找表:用有序表表示
查找方法:???半查找(二分查找)
查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
例:有原始查找表
{45,61,12,3,37,24,90,53,98,78}
为进行折半查找,需要先进行排序:
L=(3,12,24,37,45,53,61,78,90,98);例:查找 Key=24 的记录。;bool Search_Bin ( SSTable ST, KeyType key )
{ //在有序表ST中折半查找法查找其关键字等于key的数据元素。若找到,则返回该元素在表中的位置,否则返回false。
low=1; high=ST.length;
while ( low=high )
{ mid=(low+high)/2;
if EQ ( key, ST.elem[mid].key ) return mid;
else
if LT ( key, ST.elem[mid].key ) high=mid-1;
else low=mid+1;
}
return false; //表中不存在待查元素
};例2:在下表中查找 key = 5 的结点。;折半查找的特点
要求元素按关键字有序。
存储结构:顺序。
;查找表的组织:分块有序,除表本身以外,尚需建立一个“索引表”。
查找方法:查找索引表;在数据块内顺序查找;查找方法比较;动态查找
二叉排序树:或者是一棵空树;或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于根结点的值;
(3)根结点的左、右子树也分别为二叉排序树。 ;二叉排序树的查找过程;在查找过程中,生成了一条查找路径:;性能分析
查找表:{3,12,24,37,45,53,61,78,90,98}; 一般情况下,没有对二叉排序树的深度进行控制。
在构造二叉排序树的过程中进行“平衡化”处理,成为平衡二叉树(AVL树)。
平衡二叉树:左子树和右子树的深度之差的绝对值不超过1。;二叉排序树的特点
动态查找 (插入删除的时机)
含有n个结点的二叉排序树不唯一,与结点插入的顺序有直接关系。
删除某个结点后,二叉排序树要重组。
可得到平衡二叉树。
二叉排序树的适用范围
用于组织规模较小的、内存中可以容纳的数据。对于数据量较大必须存放在外存中的数据,则无法快速处理。;问题引入:前面讨论的各种结构,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。;理想情况是希望不经过任何比较,一次存取就能得到所查记录
解决方法:在记录的存储位置和其关键字之间建立一个确定的对应关系f,使每个关键字和结构中的唯一的存储位置相对应。
在查找时,只要根据该对应关系f可找到给定值K的存储位置f(K)。若结构中存在关键字和K相等的记录,则一定在f(K)的存储位置上,所以不需要进行比较即可直接得到所查记录。; 哈希表; 基本思想:
在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法。即:通过简单计算直接得到数据的地址。
1) 哈希(Hash)函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。
哈希函数可写成:addr(ai)=H(ki)
ai是表中的一个元素
addr(ai)是ai的存储地址
ki是ai的关键字。;
2) 由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1? key2,而 f(key1) = f(key2)。
3) 很难找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。; 哈希表;
文档评论(0)