zoukankan      html  css  js  c++  java
  • 链地址法查找成功与不成功的平均查找长度ASL

    晚上,好像是深夜了,突然写到这类题时遇到的疑惑,恰恰这个真题只让计算成功的ASL,但我想学一下不成功的计算,只能自己来解决了,翻了李春葆和严蔚敏的教材没有找到相关链地址法的计算,于是大致翻到两篇不错的博客,辗转了牛客面试题,做个小总结。

    题目1

    将关键字序列{1 13 12 34 38 33 27 22} 散列存储到散列表中。散列函数为:H(key)=key mod 11,处理冲突采用链地址法,求在等概率下查找成功和查找不成功的平均查找长度

    1 mod 11=1,所以数据1是属于地址1
    13 mod 11=2,所以数据13是属于地址2
    12 mod 11=1,所以数据12也是属于地址1(这个数据是数据1指针的另一个新数据)
    34 mod 11=1,所以数据34是属于地址1(这个数据是数据12指针的另一个新数据)
    38 mod 11=5,所以数据38是属于地址5
    33 mod 11=0,所以数据33是属于地址0
    27 mod 11=5,所以数据27是属于地址5,(这个数据是数据38指针的另一个新数据)
    22 mod 11=0,所以数据22是属于地址0,(这个数据是数据33指针的另一个新数据)

    链地址法处理冲突构造所得的哈希表如下(采用头插法):
    链地址法

    查找成功时: ASL=(3×1+2×3+1×4)/8=13/8, 其中红色标记为查找次数。也就是说,需查找1次找到的有4个,其它以此类推… 牛客中京东的一道面试题就是这个,成功的解法绝对唯一。

    我就通俗解释了,计算时貌似是竖着看,查找次数×个数,然后除以关键字个数,记为n=8

    查找不成功时:ASL=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11

    这里注意:

    链接法关于这个失败长度有两种观点,一种算空结点,一种不算。据说王道408数据结构例题是算的,我没入手暂不晓得。

    该篇博客选择计算,通俗解释:计算时就横着看,数所有查找次数,然后除以哈希表表长,记为m=11

    题目2

    假设散列表的长度是13,三列函数为H(K) = k % 13,给定的关键字序列为{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。画出用拉链法解决冲突时构造的哈希表,并求出在等概率情况下,该方法的查找成功和查找不成功的平均查找长度。

    img

    查找成功时的平均查找长度:

    ASL = (1×6+2×4+3×1+4×1)/12 = 7/4

    结合上个题,这里的成功算法很容易就理解了

    查找不成功时的平均查找长度:

    ASL = (4+2+2+1+2+1)/13

    这里就不算空指针。。。了

    注意:查找成功时,分母为哈希表元素个数,查找不成功时,分母为哈希表长度

    友情提示:别纠结不成功的计算了,深夜了,该睡了

    参考:

    链地址法和线性探测法求查找成功与不成功的平均查找长度ASL

    哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

    计算用链地址法作为解决冲突方法的平均查找长度是

  • 相关阅读:
    Knockout.js之初印象
    GroupBy之后加ToList和不加ToList有什么区别吗?
    值类型前加ref和out的区别
    引用类型前需要加ref?
    KEPServerEX连接SQLServer数据库操作
    nginx发布网站常用指令
    ASP.NET Core 布局 _Layout.cshtml
    ASP.NET Core-------appsettings.json文件配置与加载
    ASP.NET Core 入门程序
    ASP.NET.Core网站centerOS上部署发布
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13562735.html
Copyright © 2011-2022 走看看