散列表/哈希表的基础知识(上)

来源:互联网 发布:e店宝软件下载 编辑:程序博客网 时间:2024/06/08 05:43

散列的基本概念

【例子】现有11个数,分别是18,23,11,20,2,7,27,30,42,15,34。现定义一个函数h(key) = key mod 17。分别把这11个数存储到大小为17的整型数组(散列表)中。其结果为:







散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

(以上来自百度百科)

散列的基本思想


1.以关键字key为自变量,通过一个确定的函数h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址。
2.可能不同的关键字会映射到同一个散列地址上,造成散列冲突,因此这种冲突是散列表需要解决的一个问题。

一个好的散列函数应该考虑以下几个问题

1.计算简便,以便提高转换速度
2.关键词对应地址空间分布均匀,减少冲突。

数字关键词的散列函数构造

1.直接定值法:H(key) = a*key + b(a和b都为常数)
2.除留余数法:H(key) = key mod p(p一般取素数)
3.数字分析法:比如取手机号后5位作为地址
4.折叠法:把关键词拆成位数相同的几部分然后相加
5.平方取中法

字符关键词的散列函数构造

1.ASCII码加和法(冲突严重)
2.位移法,示例如下:


0 0
原创粉丝点击