• 链地址法查找成功与不成功的平均查找长度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

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

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

  • 相关阅读:
    qq客服不需要加好友
    mysql中表名为关键字的处理方法
    DIV+CSS最小高度(兼容IE6\IE7\FF)(转载)
    Js%26String添加加+trim()方法
    MS Sql 定期自动备份
    MySQL 中文显示乱码
    SQL Server 2005 中的Row_Number()函数
    Jquery中使用setInterval和setTimeout
    fieldset 居中
    script language="JavaScript" defer
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13562735.html
Copyright © 2020-2023  润新知