散列表的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.
散列表的ASL计算的更多相关文章
- Java学习笔记(二十)——Java 散列表_算法内容
[前面的话] 周末,本来打算找人去玩,结果没找到,所以我只好有学习了. 为什么会学习散列表,因为要使用HashMap?因为在做项目的时候,在服务器和客户端需要传输DTO,而传输的属性是动态增加的,所以 ...
- Python与数据结构[4] -> 散列表[0] -> 散列表与散列函数的 Python 实现
散列表 / Hash Table 散列表与散列函数 散列表是一种将关键字映射到特定数组位置的一种数据结构,而将关键字映射到0至TableSize-1过程的函数,即为散列函数. Hash Table: ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- HashTable(散列表)
最近都在研究数据结构,关于hashtable,或者叫做散列表,过去一直不了解是什么东西,现在终于明白了. 所谓hashtable,就是某组key,通过某个关系(函数),得到一个与之对应的映射值(在计算 ...
- [转载] 散列表(Hash Table)从理论到实用(上)
转载自:白话算法(6) 散列表(Hash Table)从理论到实用(上) 处理实际问题的一般数学方法是,首先提炼出问题的本质元素,然后把它看作一个比现实无限宽广的可能性系统,这个系统中的实质关系可以通 ...
- [转载] 散列表(Hash Table) 从理论到实用(下)
转载自: 白话算法(6) 散列表(Hash Table) 从理论到实用(下) [澈丹,我想要个钻戒.][小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱.] ——自扯自蛋 无论开发一个程序还 ...
- JavaScript数据结构——集合、字典和散列表
集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...
- 散列表 (Hash table,也叫哈希表)
散列表是根据关键字(Key value)而直接访问在内存存储位置的数据结构.也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度.这个映射函数称做散列函数,存放记录 ...
- Python数据结构——散列表
散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的 ...
随机推荐
- python_魔法方法(五):描述符和定制序列
描述符(property的原理) 描述符(descripto),用一句话来解释,描述符就是某种特殊的类的实例指派给另一个类的属性.那么什么是特殊类型的类呢?就是至少要在这个类中定义__get__(). ...
- 转 mysql 下载 以及安装
https://blog.csdn.net/kerafan/article/details/78001849 一.MySQL 各个版本区别 ,(都需要编译的 ) 1.MySQL Community S ...
- A -- A. Quailty and Playing Cards 模拟 + 思考
http://www.ifrog.cc/acm/problem/1036?contest=1005&no=0 分类,考虑Q神出的是第一张或者是第二张,然后对手出那些牌来应付. Q神出第一张和第 ...
- IIS下FTP服务器的PASV端口范围修改方法
应该有不少使用IIS自带的FTP服务器,IIS的FTP里的PASV模式下默认端口范围1024 - 65535,连接时会从中随机选择到响应.这样的超大范围就给服务器安全带来的隐患. 虽然可以通过一些方法 ...
- OracleJDK与OpenJDK的区别和联系
OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码.OracleJDK里面包含的JVM是HotSpotVM,HotSpot ...
- over partition by与group by
over partition by与group by 的区别 http://www.cnblogs.com/scottpei/archive/2012/02/16/2353718.html 今天看到一 ...
- JSP的使用
JSP全称为(Java server page),之所以出现JSP,最主要的目的是抽离出Servlet中输出HTML的部分,由于之前响应客户端的时候,是直接在Servlet中利用response.ge ...
- LeetCode(605,581,566)
LeetCode(605,581,566) 摘要:605盲改通过:581开始思路错误,后利用IDE修改(多重循环跳出方法):566用C语言时需要动态内存分配,并且入口参数未能完全理解,转用C++. 6 ...
- Tomcat8
一.Apache Tomcat 8介绍 Tomcat 8.0.0-RC3 (alpha) Released ...
- Linux 下查找指令
原文链接:http://www.cnblogs.com/sunleecn/archive/2011/11/01/2232210.html whereis <程序名称>查找软件的安装路径-b ...