Hash值、Hash表的使用和注意事项

Hash函数和Hash表一般被翻译为“散列”,也叫做哈希!

什么是散列表(哈希表):

基本概念

是根据key value而直接进行访问的一种数据结构!它可以通过把关键码映射到表中一个关键位置来访问记录,增加查找的速度!实际上,哈希表是算法在时间和空间上做出权衡的例子!
其中这个映射函数叫做哈希函数,存放记录的数组叫做哈希表
**详细解释:**就是把任意长度的输入,通过散列算法,变化为固定长度的输出,该输出值就是散列值!
而且,这种转化也是一种压缩映射!也就是说,散列值的空间一般情况下远远小于输入的空间,不同的输入可能会又散列相同的输出,(使用散列的查找算法就分俩步:第一步是用散列函数将被查找的键转化为数组的一个索引,,散列查找的第二步就是一个处理碰撞冲突的过程,

具体实现和做法

就是key value通过一个固定的算法(什么算法?也就是哈希函数,下列介绍)转换为一个整型数字,然后就将该数字对数组长度进行取余这个过程也就是将键key value转换为数组的索引

怎么找到散列函数?

我们要找的散列函数应该易于计算并且能够据暖分布所有的键,散列函数和键堵塞类型有关

  1. 正整数
    将整数散列最常用方法是除留余数法。我们选择大小为素数M 的数组, 423 23 35
    对于任意正整数k, 计算k 除以M 的余数。

  2. 浮点数
    我们可以将它乘以M并四舍五入得到一个0 至M-1 之间的索引值,但是有弊端,高位的作用更大,最低位对结果没有影响

  3. 字符串:
    c++中 to_string()函数!也就是能够返回一个非负16位整数

  4. 组合键

哈希表:

Hash Table的查询速度非常的快,几乎是O(1)的时间复杂度。
维护一个Key为Query字串,Value为该Query出现次数的HashTable,每次读取一个Query,如果该字串不在Table中,那么加入该字串,并且将Value值设为1;
如果该字串在Table中,那么将该字串的计数加一即可。最终我们在O(N)的时间复杂度内完成了对该海量数据的处理。
再并补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值