散列表(哈希表)

散列表,又称哈希表,是通过数组和散列函数实现的key-value存储结构,类似Java中的Map。其特性包括一致性、输入不同映射不同且返回有效索引。散列函数在处理冲突时可能造成性能下降,如链表解决冲突可能导致查找慢。装填因子是衡量散列表满载程度的指标,当超过0.7时,需要扩容。良好的散列函数能均匀分布键,减少冲突,提高查找、插入和删除的效率。
摘要由CSDN通过智能技术生成

散列表

也叫哈希表

数组+散列函数

类比Java中的Map

key-value键值对

应用:

DNS域名解析,你输入 www.baidu.com 就会映射到相应的IP

防止重复,key值是唯一的,投票系统,每个人只能投一次

缓存,Web服务器存一些经常使用的数据到内存中,如Redis

散列函数

特性:

1.一致性,输入apple得到4,那么再次输入apple得到的还是4

2.输入不同,映射得到的也不同,如果输入不同的数得到相同的结果,说明这个散列函数不是好的

3.散列函数返回的索引是有效的,不会超过数组长度

冲突

散列函数不可能总是将不同的键映射到数组的不同位置,几乎不可能编写出这样的散列函数

如果apple在数组第一个位置,而此时把avocados(鳄梨)也放入散列表,但函数给你分配的第一个位置

这时候就有了冲突,apple可能会被覆盖

解决办法:在数组的第一个位置存一个链表,apple -> avocados 这样存起来

问题:如果这个链表元素少,还可以,但是如果存多了,读取起来就跟链表一样慢了(O(n))

所以说散列函数很重要

糟糕的散列函数让值扎堆分布,导致大量冲突

良好的散列函数会均匀分不到不同的位置

性能

散列表(平均情况)散列表(糟糕情况)数组链表
查找O(1)O(n)O(1)O(n)
插入O(1)O(n)O(n)O(1)
删除O(1)O(n)O(n)O(1)

装填因子

装填因子 = 散列表包含的元素 / 位置总数

值越小,说明空位置越多,发生冲突可能性越小,值越大,说明越饱满,没有足够位置,发生冲突可能性越大

阀值:0.7

当装填因子大于0.7 ,需要调整数组长度,通常将数组长度增长一倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王景清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值