`

散列表(Hash)概述

 
阅读更多

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置(f(key))。查找时,根据这个确定的对应关系找到给定值key的映射f(key)。这里的对应关系f称为散列函数。

散列技术既是一种存储方法,也是一种查找方法。

 

散列函数的构造方法

散了函数的构造原则:1.计算简单,2.散列地址分布均匀

构造方法:

1.直接定址法:需要预先知道关键字的分布情况,适合查找表较小且连续的情况。

f(key)=a*key+b        直接取关键字的么讴歌线性函数值为散列地址。

2.数字分析法:通常适合处理关键字位数比较大的情况,也要事先知道关键字的分布和关键字若干位分布较均匀。

抽取关键字的一部分来计算散列存储位置的方法。

3.平方取中法:适合不知道关键字的分布情况,而位数又不是很大的情况。

将关键字平方然后取其中的数位作为散列函数。

4.折叠法:适合不知道关键字的分布,且关键字位数较多的情况。

将关键字从左到右分割成位数相等的几部分,然后将这几部分叠加求和,并按散列表表长,取后几位作为散列地址。

5.除留余数法:

f(key)=key mod p (p<<m)

6.随机数法:关键字唱的不等时,采用这个方法交合适。

f(key)=random(key)

构造散列函数需要考虑的因素:

1.计算散列地址的时间

2.关键字的长度

3.散列表的大小

4.关键字的分布情况

5.记录查找的频率

 

散列函数冲突处理方法

1.开发定址法:一旦发生了冲突,就去寻找下一个空散列地址,只要列表足够大,空散列地址总能找到,并记录存入,这种方法也叫线性探测法。

f'(key)=(f(key)+d') mod m (d'=1,2,...,m-1)

2.再散列函数法

f'(key)=RH'(key)  RH'就是不同的散列函数

3.链接地址法

4.公共溢出区法:为所有冲突的关键字建立了一个公共的溢出区来存放。

更加详细的讲解一定要看http://www.partow.net/programming/hashfunctions/以及一个中文的翻译http://blog.csdn.net/wwwsq/article/details/1526595

0
5
分享到:
评论

相关推荐

    hash散列表的三种实现

    散列的C语言实现:链地址法、线性探测法、双重散列表

    线性散列表(linear hash)

    英文的讲线性hash的 ............ ............

    hashtable hash表 散列表 C源代码

    hashtable hash表 散列表 C++ 源代码。还是非常不错的资源。

    白话算法之散列表(Hash Table)从理论到实用.doc

    白话算法之散列表(Hash Table)从理论到实用.doc

    c++,散列表的实现

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组...

    hash表的应用

     设计散列表实现身份证查找系统,对身份证号进行Hash。 [基本要求] (1) 设每个记录有下列数据项:身份证号码(虚构,位数和编码规则与真实一致即可)、姓名、地址; (2) 从键盘或文件输入各记录,以身份证...

    java 散列表原理

    就是java的散列表示意图 很清晰易懂 比枯燥额文字好多了

    散列表C++源程序代码

    开散列表C++源程序代码,有调试界面,散列存储

    C++散列表实现电话本存储及查找功能

    利用开散列表实现电话本存储和查找功能,可用于计算机专业学生数据结构课程设计

    关于分布式散列表DHT的前世今生的故事(上)

    关于分布式散列表DHT的前世今生的故事:包括单机hash、分布式一致性hash

    C语言实现散列表(哈希Hash表)实例详解

    C语言实现散列表(哈希Hash表) 实例代码: //散列表查找算法(Hash) #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define SUCCESS 1 #define UNSUCCESS 0 #define HASHSIZE...

    数据结构实验-散列表实验报告.docx

    背景 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录...

    散列表(HashMap)

    利用Double hashing解决散列表的冲突,完美实现Hash Map

    Hash函数与消息认证

    5.1 Hash函数概述 5.1.1 Hash函数定义 5.1.2 Hash函数的安全性 5.1.3 Hash函数的迭代构造法 5.2 Hash函数MD5 5.2.1 MD5算法 5.2.2 MD5的安全性 5.3 安全Hash算法SHA-1 5.3.1 SHA-1算法步骤 5.3.2 SHA-1和MD5的...

    算法基础-散列表的原理及基础操作

    文章目录前言正文什么是散列表Hash的数据结构存储数据的数组散列函数Hash的负载因子开放寻址法链表法Hash结构的几个操作读操作开放寻址法的读操作链表法的读操作写操作开放寻址法的写操作链表法的写入扩容总结 ...

    uthash开源的hash函数实现

    uthash开源的hash函数实现,里面的uthash.h可用

    C开源hash代码uthash

    uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...

    hashcat-6.2.6(hash爆破工具)

    内容描述:用于crypto中hash爆破的强大工具。 优势:相较于其他hash工具,具有更快的算力,使用方便简洁。 适用:适用于md5,sha256等典型hash加密方式,反推出所需的源码。

    高运算性能,低碰撞率的hash算法MurmurHash算法.zip

    MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...

Global site tag (gtag.js) - Google Analytics