散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)

散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)

ID:35226837

大小:814.95 KB

页数:29页

时间:2019-03-22

散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)_第1页
散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)_第2页
散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)_第3页
散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)_第4页
散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)_第5页
资源描述:

《散列表实验报告(不同装载因子下的链表法和开放寻址法的对比)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1概述22原理介绍22.1散列表介绍22.2直接寻址表32.3散列函数32.3.1除法散列42.3.2乘法散列42.3.3全域散列42.4解决碰撞问题52.4.1链接法52.4.2开放寻址法52.4.2.1线性探查62.4.2.2二次探查62.4.2.3双重散列73算法说明73.1概述73.2使用链接法解决碰撞问题83.2.1算法思想83.2.2伪代码描述93.2.3算法分析与证明103.3使用开放寻址法的双重散列解决碰撞问题123.3.1算法思想123.3.2伪代码描述123.3.3算法分析与证明143.4两个算法的比较144实验设计与分析

2、165C++实现与结果分析185.1C++实现与结果185.2结果分析266实验总结和感想271概述该实验报告主要是通过介绍散列表的各种技术,包括散列函数、解决碰撞的机制等技术,并对两种解决碰撞的机制:链接法和开放寻址法进行分析和证明,并通过实验分析两者在不同的规模下的运行时间和空间占用的对比,来证明在“算法说明”一章中的理论分析。2原理介绍2.1散列表介绍散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数

3、叫做散列函数,存放记录的数组叫做散列表。它实际上是是普通数组概念的推广,因为可以对数组进行直接寻址,故可以而在O(1)时间内访问数组的任意元素。如果存储空间允许,我们可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。  基本概念  若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hashfunction),按这个思想建立的表为散列表。对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。

4、具有相同函数值的关键字对该散列函数来说称作同义词。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。若对于关键字集合中的任一个关键字,经散列函数映射到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(UniformHashfunction),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。常用的构造散列函数的方法散列函数能使对

5、一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位当实际存储的关键字数比可能的关键字总数较小时,此时采用散列表就会较直接数组寻找更为有效,因为散列表通常采用的数组尺寸与所要存储的关键字数十成比例的。在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标。名词解释:碰撞:就是指多个关键字映射到同一个数组下标位置1.1直接寻址表当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,2,…}的关键字,此外M是一个不很大的数。另假设没有两个元

6、素具有相同的关键字。此时动态集合中的元素可以放在直接寻址表中。亦即不把每个元素的关键字及其卫星数据都放在直接讯指标外部的一个对象中,再由表中某个槽的指针指向该对象,而是直接把对象放在表的槽中,从而节省了空间。此外,通常不需要存储对象的关键字域,因为如果我们有了一个对象的在表中的下标,就可以得到它的关键字。但是,如果不存储关键字,我们必须有某种办法来确定某个槽是否为空。一般来说,直接寻址法比较浪费存储空间,而且容易发生碰撞(当有关键字相等的时候)。这里不与讨论。1.2散列函数好的散列函数的特点:一个好的散列函数应(近似地)满足简单一致散列的假设

7、:每个关键字都等可能地散列到m个槽位的任何一个之中去,并与其他得到关键字已被散列到哪一个槽位中无关。不幸的是,一般情况下不太可能检查这一条件是否成立,因为人们很少能知道关键字所符合的概率分布,而各关键字可能并不是完全相互独立的。有时,我们偶尔也能知道关键字的概率分布。例如,如果已知各关键字都是随机的实数k,他们独立地、一致地分布于范围0<=k<1中,那么散列函数:h(k)=[km]就能满足简单一致散列这一假设条件。将关键字解释为自然数:一个字符串关键字可以被解释为按适当的基数记号表示的整数。一般来说按照ASCII码来翻译字符。后面的所有算法和

8、实现都是按照自然数来做的。1.1.1除法散列在用来设计散列函数的除法散列函数中,通过取k除以m的余数,来将关键字k映射到m槽的某一个当中去。亦即,散列函数为:h(k

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。