JavaScript哈希表


 哈希表(散列表)
 
 * 散列的思想,就是用key对应着一个value。将key转换为value的方法叫做散列函数,而散列函数得到的value就是散列值,
 * 散列值也叫做哈希值。这个value就对应着数组的下表,然后根据value去数组中对应的位置存取数据。
 * 
 * 散列函数,hash(key),其中key表示着元素的键值,has(key)-》value就是经过散列函数计算得到的散列值(哈希值)。
 * 
 * 散列函数设计的基本要求
 *  a.散列函数计算得到的散列值是一个非负整数
 *  b.如果key1 = key2 ,has(key1) = has(key2)
 *  c.如果key1 != key2,has(key1) != has(key2)
 * 
 * 
 * 散列冲突:就是两个不同的key 得到了一样的哈希值,就是散列冲突。
 * 
 * 常用的解决散列冲突的方法
 * 
 * (一) 开放寻址法:如果出现了散列冲突,重新探测一个空闲位置,将其插入。适合数据量较少,装载因子比较小的情况
 * 
 * 那么如何来探测是否有空闲位置,先来说一个
 * 
 * (1).线性探测的方法:当我们往散列表中插入数据的时候,如果发生了散列冲突,就从当前位置开始,依次往后面查找,查看是否有空闲位置,直到找到为止。
 * 
 * 
 * 
 * 就是当你从散列函数中得到一个哈希值,然后根据这个哈希值去找到数组的下标,发现已经存放数据了,那么就从这个位置开始,按顺序地往后一个一个点着,看还有没有空位置,如果到了数组尾部,
 * 还是没有空闲位置,那么就从数组开头再往后查找,直到查找到了一个位置,于是插入元素。
 * 
 * 
 * 查找的过程也是这样,先通过散列函数求出哈希值,然后对比这个哈希值下标对应位置点数据是否和查找的元素一致,如果相等就找到了,如果不等,就按顺序往后依次查找。
 * 如果找到了一个空闲位置还是没有找到这个元素,证明查找元素不在散列表中。
 * 
 * 散列表删除一个元素的时候,不是直接把这个数据从散列表中提出掉,而是将其标志为deleted,当查找一个元素的时候,遇到deleted的元素块点时候,直接往下走,而不是
 * 认定为空。
 * 
 * 
 * 
 * (2).二次探测的方法:
 * 二次探测和线形探测的区别就是,
 * 线形探测每次往下走的时候是一步,而二次探测原来的二次方,比如当你遇到了散列冲突,需要往下查找位置插入元素的时候,第一次是hash(key)+0 ,第二次就是hash(key) + 1*1,
 * 第三次就是hash(key) + 2*2 ...以此类推
 * 
 * (3).双重散列:不仅使用一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值