hashmap

hashmap

  1. haspmap是啥

  2. haspmap什么时候用

  3. 运用场景及后续

    hash函数的构造方法

    1. 直接定制法:所谓直接定址法就是说,取关键字的某个线性函数值为散列地址,即img

      ​ 优点:简单、均匀,也不会产生冲突。 缺点:需要事先知道关键字的分布情况,适合查找表较小且连续的情况。

      ​ 由于这样的限制,在现实应用中,此方法虽然简单,但却并不常用。

    2. 数字分析法:如果关键字时位数较多的数字,比如11位的手机号"130****1234",其中前三位是接入号;中间四位是HLR识别号,表示用户号的归属地;后四为才是真正的用户号。如下图所示。

      img

    3. 平方取中法: 这个方法计算很简单,假设关键字是1234,那么它的平方就是1522756,再抽取中间的3位就是227,用做散列地址。

      平方取中法比较适合不知道关键字的分布,而位数又不是很大的情况。(常用)

    4. 除留余数法:用关键字取余(常用)

    5. 折叠法:将关键字分割成位数相同的几部分(最后一部分的可以不相同)然后取这几部分的叠加和(舍去进位)作为hash地址。关键字位数很多,而且关键字中的每一位上数字分布大致均匀时,可以采用折叠法得到hash地址[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eohzn1QE-1590744897747)(D:\图片\博客图片\1B3D10EC5EF5B7A6FDF1903B4A1E4FCC.jpg)]

    6. 随机数法:选择一个随机函数,取关键字的随机函数值为他的hash地址即H(key)=random,其中random为随机函数。通常关键字长度不等时采用这种方法。

      
      

解决冲突

    1. 线性探测



​ 3. 链地址(拉链法)

       ## 哈希查找
   
       (构造hash函数用什么方法就用什么函数查找)
       
       1. 判断是否为空
       2. 运用hash函数算出hash地址比较关键字是否相等
       3. 冲突解决:线性探测,二次探测,拉链法
       4. 直至end
       
       #### (1)线性探测
       
       顾名思义就是按照线性探测一个一个探测,算出hash的地址然后比较关键字是否相等,不相等的将hash地址加一直至结束。
       
       ### (2)二次探测
       
       求出hash地址将地址上的关键字相比较,不等加1^2再不等加-1^2再不等加2^2.....直至结束
       
       ### (3)拉链法
       
       求出hash地址将地址上的链表关键字相比较,不等的话再看相同哈希地址上的下一位关键字直至结束。
       
          ### ASL
       
       ​      为平均查找长度
       
        决定ASL的因素:散列函数,处理冲突的方法,散列表的装填英子。
       
          装填因子=填入记录数/hash长度(见书260页)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值