哈希表

哈希表就是一种以 键-值(key-indexed) 存储数据的结构
插入和删除接近常量时间级O(1)
将键映射成索引,这种映射函数就是哈希函数

避免哈希冲突

拉链法 (Separate chaining with linked lists)
直接的办法就是,将大小为M 的数组的每一个元素指向一个条链表,链表中的每一个节点都存储散列值为该索引的键值对,这就是拉链法

Paste_Image.png

线性探测法
基本原理为,使用大小为M的数组来保存N个键值对,其中M>N,我们需要使用数组中的空位解决碰撞冲突

Paste_Image.png

散表函数
(1)若函数为h(k)=k,就是直接寻址表



(2)除法散列法:h(k) = k mod m
(3)乘法散列法:h(k) = m * (k * A mod 1) (0<A<1)
(4)全域散列:从一组仔细设计的散列函数中随机地选择一个。(即使对同一个输入,每次也都不一样,平均性态较好)
3.冲突解决策略
(1)链接法
(2)开放寻址法
a.线性探测:h(k, i) = (h'(k) + i) mod m
b.二次探测:h(k, i) = (h'(k) + c1*i + c2 *i^2) mod m
c.双重散列:h(k, i) = (h1(k) + i * h2(k)) mod m
(3)完全散列:设计一个较小的二次散列表

int h(int k)  
{  
    return k % m;  
}  
int h2(int k)  
{  
    return 1 + k % (m-1);  
}  
//线性探测  
int Linear_Probing(int k, int i)  
{  
    return (h(k) + i) % m;  
}  
//二次探测  
int Quadratic_Probint(int k, int i)  
{  
    int c1 = 1, c2 = 3;  
    return (h(k) + c1 * i + c2 * i * i) % m;  
}  

链接
http://www.cnblogs.com/yangecnu/p/Introduce-Hashtable.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也...
    SparkLiu阅读 25,286评论 2 13
  • 基本概念 基于线性表、树表结构的查找方法,这类查找方法都是以关键字的比较为基础的。在查找过程中只考虑各元素关键字之...
    官先生Y阅读 570评论 0 2
  • “真水无香”原来佛教用语,源自印度梵文,意思是将散乱的心神凝聚一处。人们不断寻找自我的智慧与内在的和平,真...
    三爷_8bd4阅读 2,713评论 0 2
  • 被情感里的这些那些纠缠不清 我没空去看看风景 我没有自由的时间 我未能脱俗的生活 更做不到放下 一个偶然成为一顿教...
    半片世界阅读 192评论 0 0
  • 今天开始看,李笑来的《七年就是一辈子》。 他的第一小节讲的是复利。什么叫复利呢?举个最简单的例子,就是我们存钱。1...
    风之壹把刀阅读 200评论 0 1

友情链接更多精彩内容