(3)散列函数设计:直接定址法
来源:互联网 发布:淘宝客入门视频教程 编辑:程序博客网 时间:2024/06/10 10:18
上一篇说到了,设计一个简单、均匀、存储利用率高的散列函数是散列技术中最关键的问题。那么我们今天开始就看看,如何去设计散列函数。散列函数的设计原则
1. 计算简单
你说设计一个算法可以保证所有的关键字都不会产生冲突,但是这个算法需要很复杂的计算,会耗费很多时间,这对于需要频繁地査找来说,就会大大降低査找的效率了。因此散列函数的计算时间不应该超过其他査找技术与关键字比较的时间。
2. 散列地址分布均匀
我们前面也提到冲突带来的问题,最好的办法就是尽量让散列地址均匀地分布在存储空间中,这样可以保证存储空间的有效利用,并减少为处理冲突而耗费的时间。
下面我们逐个介绍一些常用的散列函数构造方法。估计设计这些方法的前辈们当年可能是从事间谍工作,因为这些方法都是将原来数字按某种规律变成另一个数字而已。首先是直接定址法。
直接定址法
如果我们现在要对0-100岁的人口数字统计表,那么我们对年龄这个关键字就可以直接用年龄的数字作为地址。此时f(key) = key。
如果我们现在要统计的是80后出生年份的人口数,那么我们对出生年份这个关键字可以用年份减去1980来作为地址。此时f (key) = key-1980。
也就是说,我们可以取关键字的某个线性函数值为散列地址,即:
f(key) = a × key + b
这样的散列函数优点就是简单、均匀,也不会产生冲突,但问题是这需要事先知道关键字的分布情况,适合査找表较小且连续的情况。由于这样的限制,在现实应用中,直接定址法虽然简单,但却并不常用。
0 0
- (3)散列函数设计:直接定址法
- (3)散列函数设计:直接定址法
- 散列(开放定址法)
- 处理散列冲突:开放定址法
- 散列 开放定址法 C实现
- 【算法设计-散列表】散列表的直接定址法与位向量
- 【散列表-直接定址法】含有卫星数据的直接定址法
- 开放定址散列算法
- 散列 - 数据结构 (分离链接法、开放定址法)
- (5)散列冲突处理:开放定址法
- (转载)散列冲突处理:开放定址法
- (5)散列冲突处理:开放定址法
- 哈希表(二)(散列)开放定址法(平方)
- 哈希表——直接定址法
- 哈希表——直接定址法
- 直接定址表
- 汇编语言-直接定址表
- 哈希(散列)表之开放定址法的C++类模板实现
- 2016-02-01 FFC
- Java初涉之9--二叉树及其前序,中序,后序的JAVA实现
- 单例的创建方法
- Linux脚本入门
- spotlight on windows 破解
- (3)散列函数设计:直接定址法
- tomcat+memcached集群
- 用 Swift、Foursquare API 和 Realm 創建一個咖啡屋 App
- 【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合
- linux yum命令详解
- (4)散列函数设计:除留余数法
- ROS 运动规划 (Motion Planning): MoveIt! 与 OMPL
- ftruncate函数详解
- android 控件布局