哈希表--HashTable(散列表)

哈希表定义

是根据关键字(key)而直接访问内存存储位置的一种数据结构
访问数据的方法是通过一个函数,映射到key值对应的位置,进行数据访问
这个映射函数成为散列函数/哈希函数,存放记录的数组称为散列表/哈希表


构造哈希表的几种方法

一般常用的就是这两种,其它的就不介绍了

  1. 直接定址法–取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A*Key + B,A、B为常数。
  2. 除留余数法–取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址。Hash(Key)= Key % P。

1)第一种方法很简单,但是有很大的缺陷,
这里写图片描述
当我们的数据特别的散列,数与数之间差距特别大时,就会造成许多的空间浪费,比如1,10000,400000只有三个数据,可是我们开空间却需要开很多;
2)第二种就比第一种好,但又会有新的问题——“哈希冲突”
就是当我们取模后,两个或多个数取模得到的数相同,那么它们要对应的位置就冲突了,当然我们也有相应的办法处理


解决哈希冲突的方法

1. 线性探测&二次探测

2.哈希桶——开链法


应用:位图&布隆过滤器

如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢。

那如何解决呢?

我们都知道一个字节=8个比特位,我们可以用比特位的0/1来标识这个元素在没在集合里。这样可以节省很多空间,检索时,我们只要看看对应位置是不是都是 1 就(大约)知道它在不在集合中了,而形成的这个位列表(Bit array),也就是位图


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值