散列的基本概念
【例子】现有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.位移法,示例如下:
转载请注明原文地址: https://ju.6miu.com/read-1312169.html