散列表

散列表是紧接布隆过滤器后我所要了解的,因为HasMap以及Dictionary等都与其有关。

没有计算机我们也会用散列表,比如查字典的时候我们都会根据首字母以及部首偏旁来帮助我们快速查找。

散列表的关键就是散列函数,也叫哈希函数。它的目的就是输入一个Key(比如 baidu)计算出一个散列值。

K -> hash value

我们在存取值的时候,根据value去到其映射的地方存取值

散列函数有一个问题,就是不同的Key有可能算出同一个散列值,如此一来,1 对 1 的地址映射就会器冲突了,因为你也不想你通过 Key(Baidu)存进去和通过Key(google)存进去最后拿出来的东西是一模一样的。那么要解决这个冲突问题之前我想得先了解计算散列值的方法

1.直接地址法

线下函数取值

2.折叠法

你的散列值会被切割成多个同等位数的部分(最后部分的不一定同等),通过位运算折叠成一部分

3.除留余数法

找到一个数P,然后用你的值直接除以它,然后取余数(细品)。P一般取素数或者列表长度

细想一下,以上的方法其实都可能不同key算出同一散列值。怎么解决冲突呢?

1.开放地址法

这种其实就是,发生冲突了,直接取指向地址的下一个地址,一直取到没有别占有为止。

2.单独链表

冲突了,就让地址指向一个链表,每次冲突了就往链表里面加,链表一般使用栈结构。

3.再散列

冲突了嘛,那冲突地址再散列一遍呗,直到不冲突为止嘛。效率差的情况真的很差。

载荷因子概念:

载荷因子 = 元素个数/长度

载荷因子衡量了散列表的冲突可能性,载荷因子越大,冲突可能性越高。

最后

可以看出,散列表都是以随机的方式存储的,一个值存在哪个地址是根据算法而定的,它的存储位置是随机的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文的学习是通过:现代魔法学院——散列表 1. 散列表 散列表区分于顺序表,顺序表的查找是依次遍历查询,而散列表是...
    AceCream佳阅读 418评论 0 0
  • HashMap是Map接口的一个实现。Map的实现都是一个容器,用于存储键值对。 Map并不一定要通过散列表实现,...
    刘惜有阅读 688评论 0 1
  • 本篇将介绍散列表(哈希表)的相关基础知识。 一、简介 散列表(Hash table,也叫哈希表)是根据关键码值(K...
    齐舞647阅读 240评论 0 0
  • 1.定义 Hash Table又叫做散列表是数据结构里非常重要的一种,其设计构想是把需要保存的数据当作唯一的key...
    TanzeyTang阅读 471评论 0 0
  • 级别: ★☆☆☆☆标签:「算法」「Hash」「散列表」「哈希表」作者: MrLiuQ审校: QiShare团队 本...
    QiShare阅读 875评论 0 6