码迷,mamicode.com
首页 > 其他好文 > 详细

哈希表

时间:2015-05-02 16:29:24      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

哈希法概述:
哈希法构造出的查找表称为哈希表,这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,使得
p=H(k),H称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为H(k)的单元;以后当查找关键字为k的元素时,在利用哈希函数
计算出该元素的存储位置p=H(k),从而达到按关键字直接存取元素的目的。当关键字集合很大时,关键字值不同的元素可能映射到哈希表的
同一地址上,即k1!=k2,但H(k1)=H(k2),这种现象称为冲突,此时称k1和k2为同义词。实际上冲突时不可避免的,只能通过改进哈希函数的
性能来减少冲突。
综上所述,哈希法主要包括以下两个方面的内容:
1.如何构造哈希函数。
2.如何处理冲突。
哈希函数的构造方法:
构造哈希函数的原则是首先要是函数本身便于计算,其次计算的出来的地址均匀分布,即对任一关键字key,H(key)对应不同的地址的概率
相等,目的是尽可能的减少冲突。
下面介绍构造哈希函数常用的5种方法。
1.数字分析法
2.平方取中法
3.分层叠加法
4.除留余数法(最常用)
设哈希表的表长为m,p为<=m的最大素数,则除留余数的哈希函数为:
H(key)=key%p,%为取余运算为了减少冲突可取较大值m和p。
5.伪随机法
处理冲突的方法:
通过构造性能优良的哈希函数,可以减少冲突,但是一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题。
创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法是一致的。下面就以创建哈希表为例,说明解决冲突的
方法,常用的解决冲突的方法有以下四种。

技术分享

............................................................................................

3.链接地址法

这种方法的基本思想是将所有哈希地址为i的元素构成一个同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找,插入和删除

主要在同义词链中进行。显然,在这样的单链表中查找时所需的比较次数就是待查元素在链表中的位序。链地址法适用于经常进行插入和删除的情况。

一般在链地址法中m大约为数据元素数目的1/5或者1/10,这样每个地址链长度的期望值为5~10,但空间不是关键资源时,不妨选择较大的m,以使搜索接近常数。

哈希表

标签:

原文地址:http://www.cnblogs.com/leijiangtao/p/4472095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!