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

HashTable 及应用

时间:2016-07-01 22:56:49      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构。 它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫做散列表。


构造哈希表的几种方法
1. 直接定址法--取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A*Key + B,A、B为常数。

2. 除留余数法--取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址。Hash(Key)= Key % P。

3. 平方取中法

4. 折叠法

5. 随机数法

6. 数学分析法



哈希冲突/哈希碰撞
不同的Key值经过哈希函数Hash(Key)处理以后可能产生相同的值哈希地址,我们称这种情况为哈希冲突。任意的散列函数都不能避免产 生冲突。

技术分享

 

处理哈希冲突的闭散列方法:
1. 线性探测

2. 二次探测

技术分享

 

处理哈希冲突的开链法(哈希桶):

 技术分享

 

 

素数表(使用素数做除数可以减少哈希冲突) // 使用素数表对齐做哈希表的容量,降低哈希冲突 

// 使用素数表对齐做哈希表的容量,降低哈希冲突     
const int _PrimeSize = 28;     
static const unsigned long _PrimeList [_PrimeSize] =   
{        
  53ul,         97ul,         193ul,       389ul,       769ul,    
  
1543ul, 3079ul, 6151ul, 12289ul, 24593ul,

  49157ul, 98317ul, 196613ul, 393241ul, 786433ul,

  1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,

  50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,

  1610612741ul, 3221225473ul, 4294967291ul };

 


字符串哈希算法
http://www.cnblogs.com/-clq/archive/2012/05/31/2528153.html

 

 

哈希表的应用之布隆过滤器

当一个元素被加入集合时,通过 KHash 函数将这个元素映射成一个位阵列(Bit array)中的 K 个点,把它们置为 1。检索时,我们只要看看这些点是不是都是 1 就知道集合中有没有它了:

如果这些点有任何一个 0,则被检索元素一定不在

如果都是 1,则被检索元素很可能在。

技术分享

布隆过滤器的博文:

https://segmentfault.com/a/1190000002729689

http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html

 

相应的源代码请点击:https://github.com/shihaokiss

 

HashTable 及应用

标签:

原文地址:http://www.cnblogs.com/shihaochangeworld/p/5624078.html

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