散列表的ASL计算

题目: 已知关键字序列为{30,25,72,38,8,17,59},设散列表表长为15.散列函数是H(key)=key MOD 13,处理冲突的方法为二次探测法Hi= ( H(key) + di )mod 15 ( di=12,-12,22,-22,… ),请写出构造散列表的详细计算过程,填写散列表,并计算在等概率的情况下查找成功和失败时的平均查找长度ASL。

地址 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
关键字                              

解: 首先,根据散列函数进行计算  H(30)=30%13=4    在地址4处填入30;

H(25)=25%13=12    在地址12处填入25;

   H(72)=72%13=7    在7处填入72;

H(38)=38%13=12,与H(25)冲突,此时使用处理冲突函数,即H(38)=(H(38)+1)%15=13,无冲突。在13处填入38;

H(8)=8,在8处填入8;

   H(17)=4,与H(30)冲突,使用处理冲突函数,H(17)=(H(17)+1)%15=5,无冲突。在5处填入17;

H(59)=7,与H(72)冲突,使用处理冲突函数,H(59)=(H(59)+1)%15=8,又与H(8)冲突,继续使用处理冲突函数,

H(59)=(H(59)-1)%15=6,无冲突,在6处填入59.    散列表填写如下:

地址 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
关键字         30 17 59 72 8       25 38  
比较(计算)次数         1 2 3 1 1       1 2  

于是:ASL(success)=(比较总次数)/(元素总数)  =(1+2+3+1+1+1+2)/ 7 = 11/7

要计算ASL(failure) 则需要增加一个东西,即各元素到它后面第一个单元为空的位置的步数(距离)D。

如30到它后面第一个单元为空的位置9的步数为6;

其它的依次类推,注意因为散列为mod13,对应地址为0~12,超过12则在从0开始。得:

  D(0)=NULL=1; D(1)=NULL=1; D(2)=NULL=1; D(3)=NULL=1; D(4)=30=6; D(5)=17=5; D(6)=59=4;

  D(7)=72=3; D(8)=8=2; D(9)=NULL=1; D(10)=NULL=1; D(11)=NULL=1; D(12)=25=2;(从12到0走两步)

再往后就没有了。因此ASL(failure)= (6+5+4+3+2+2+1*7)/13 = 29/13.

原文地址:https://www.cnblogs.com/DSYR/p/9130287.html

时间: 2024-10-11 09:21:27

散列表的ASL计算的相关文章

数据结构之散列表总结

散列表的概念 注意:    ①由同一个散列函数.不同的解决冲突方法构造的散列表,其平均查找长度是不相同的.     ②散列表的平均查找长度不是结点个数n的函数,而是装填因子α(填入表中的记录个数/散列表的槽数    n/m).因此在设计散列表时可选择α以控制散列表的平均查找长度.(平均查找长度=总查找(插入)/记录个数)          通过链接法解决冲突:成功查找的期望查找长度O(1+a), 不成功查找的平均查找长度也为O(1+a).         开放寻址解决冲突:引入探查序列,对于a<

散列表查找的一个实例

这里解决冲突的方法是开放地址法:“开放地址指的是表中尚未被占用的地址,开放地址法就是当冲突发生时候,形成一个地址序列,沿着这个序列逐个进行探测,直到找到一个空的开放地址,将发生冲突的关键字存放到该地址中去,即Hi=(H(key)+di)%m,i=1,2,..k(k<=m),其中H(key)为散列函数,m为散列表长,di为增量序列. 例题:选取散列函数H(K)=(3K)%11,用开放地址处理冲突,d1=H(K);di=(di+(7K)%10+1)%11(i=2,3,..),试着在HT[0,..10

查找 之 散列表查找(哈希表)

基础概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数. 采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table). 散列技术既是一种存储方法,也是一种查找方法. 散列技术最适合的求解问题是查找与给定值相等的记录.不适合一对多的查找,也不适合范围查找. 散列技术中的两个关键问题: 设计一个简单.均匀.存储利用率高的散列函数

hash函数查找和ASL计算

Hash表的"查找成功的ASL"和"查找不成功的ASL" ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数: H(Key) = (key x 3) MOD 7 装载因子: 0.7 处理冲突:线性探测再散列法 查找成功的ASL计算方法: 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考真题

Python数据结构——散列表

散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的推广.如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术. 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效.在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标,这种 关键字与下标之间的映射就叫做散列函数. 1.散列函数

散列表

散列表的基本思想通过键来直接计算出数据的存放地址,而避免了数组或者其他数据结构的逐个比较查找. 可以在常数时间内实现查找.插入和删除操作,代价是不支持任何有关排序的操作. 键到地址的映射,称作散列函数.散列函数需要满足两个要求:计算简单:冲突少. 不同的情况,可以有不同的散列函数,在此不对散列函数做过多介绍. 冲突:相同的键,通过散列函数,被映射到了相同的地址.下面主要介绍下解决冲突的一些简单方法. 分离链表法:把散列到同一个地址的数据保存在一个链表中.在查询数据时,先通过散列函数求出链表地址,

散列表(数据结构学习笔记)

散列 散列表的一般实现叫散列.是一种以常数平均时间执行插入.删除.查找的技术.理想的散列表结构是一个包含关键字具有固定大小的数组.典型情况是,一个关键字就是一个带有相关值的字符串.把表大小记MaxSize,通常使表在0-MaxSize之间变化.每个关键字都被映射到0-MaxSize之间的某个单元中.这个映射关系就是散列函数.理想情况函数保证任何关键字都映射到不同单元里,实践是不可能的.因数组有限大小,而关键字可无限多.因此要找德散列函数尽可能的使关键字均匀的分布在单元中.如图 git在0号单元,

十三、散列表(哈希表)

散列表 散列表插入分两步: 1. 根据散列函数找到索引 2. 处理索引冲突情况:拉链法和线性探测法 散列表是时间上和空间上作出权衡的一个例子.散列表采用函数映射找索引,查找很快,但是键的顺序信息不会保存(HashSet HashMap的本质) 散列函数 对于每种类型的键我们都学要一个与之对应的散列函数 正整数散列: 常用取余散列:k%M 浮点数散列: 例如0-1之间可以乘以一个M得到0-M-1之前的索引值,但是高位影响比低位大(0.12的1比2的影响更大,不符合均匀性),所以可以将键表示为二进制

大话数据结构—散列表查找(哈希表)

一.基本概念 散列技术:在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key). f:散列函数/哈希函数: 采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表. 关键字对应的记录存储位置称为散列地址. 散列技术既是一种存储方法,也是一种查找方法. 散列技术适合求解问题是查找与给定值相等的记录.查找速度快. 散列技术不适合范围查找,不适合查找同样关键字的记录,不适合获取记录的排序,最值. 冲突:关键字key1不等于k