• 哈希表(等概率情况下)查找成功与查找不成功的平均查找长度


      继续小结,做到一道求 哈希表查找成功与查找不成功 情况下平均查找长度的计算问题,迷惑了好一会,在这里总结下来:

      首先,你要明白的是平均查找长度求的是期望,那么你就按照求期望的方法来求平均查找长度吧,千万记着期望怎么求平均查找长度就怎么求啊。

      题目:

    在地址空间为0~16的散列区中,对以下关键字序列构造两个哈希表:
    {Jan, Feb, Mar, Apr, May,  June, July, Aug, Sep, Oct, Nov, Dec}
    (1) 用线性探测开放地址法处理冲突;
    (2) 用链地址法(开散列存储)处理冲突
    并分别求这两个哈希表在等概率情况下查找成功和查找不成功时的平均查找长度。设哈希函数为
    H(key) = i/2,其中i为关键字中第一个字母在字母表中的序号,如下:
    A B C D E F G H I  J    K   L  M  N  O   P   Q   R  S  T   U   V   W  X  Y   Z
    1 2 3 4  5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

      解决如下:

    (1) 线性探测进入散列区的次序如下,X 代表冲突,要找下一个空格
    Jan -> 5
    Feb -> 3
    Mar -> 6
    Apr -> 0
    May -> 6X -> 7
    June -> 5X -> 6X -> 7X -> 8
    July -> 5X -> 6X -> 7X -> 8X -> 9
    Aug -> 0X -> 1
    Sep -> 9X -> 10
    Oct -> 7X -> 8X -> 9X -> 10X -> 11
    Nov -> 7X -> 8X -> 9X -> 10X -> 11X -> 12
    Dec -> 2

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    Apr

    Aug

    Dec

    Feb

    Jan

    Mar

    May

    Jun

    July

    Sep

    OCt

    Nov



      很明显,查找成功时,查找Jan、Feb、Mar等仅需要一次,其余的也可以由上面看出来
      所以查找成功时平均查找长度 (ASL) = (1 + 1 + 1 + 1 + 2 + 4 + 5 + 2 + 2 + 5 + 6 + 1) / 12 = 31/12 = 2.58 为什么是除以12呢?因为查找成功的情况总共有12种啊

      查找不成功时呢?什么是查找不成功呢?查找不成功就是从查找位置开始直到一个位置为空需要比较的次数。

      首先,26/2=13,也就是说查找不成功的情况也只能出现在0~13之间,只有这14种情况。

      举个例子来说,查找Aay吧,根据hash表,与Apr比较不匹配,接着与Aug比较又是不匹配,接着与Dec比较又是不匹配,又与Feb比较又是不匹配,到了4位置的时候为空了,即4上内容与nullkey比较,结果为空,所以查找Aay失败,查找长度为5。同理也能计算其他的。

      最终平均查找失败时平均查找长度为(5+4+3+2+1+9+8+7+6+5+4+3+2+1)/14=60/14。注意啊,这里是除以14啊。(这是求期望的方法啊)

    (2) 链地址法
    0 之下有 Apr, Aug
    2 之下有 Dec
    3 之下有 Feb
    5 之下有 Jan, June, July
    6 之下有 Mar, May
    7 之下有 Oct, Nov
    9 之下有 Sep
    查找成功时候,查 Apr, Dec, Feb, Jan, Mar, Oct, Sep 各需 1 次,查 Aug, June, May, Nov 各需 2 次,查 July 需 3 次。

    所以查找成功时平均查找长度 (ASL) = (1 * 7 + 2 * 4 + 3 * 1) / 12 = 18/12 = 1.5

    查找失败时平均查找长度:举个例子吧,查找Boy,2/2=1,而1的地方的指针为空,就不用比较就可以知道不存在,查找产度为0。查找Aay,与Apr比较不匹配,与Aug比较不匹配,同时,Aug指向下一个节点的指针为空,就可以知道查找失败,查找长度为2。

     所以查找失败的平均查找长度:(2+1+1+3+2+2+1)/14=12/14。

     
  • 相关阅读:
    OAF_开发系列26_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(案例)
    OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)
    OAF_开发系列24_实现OAF更新记录显示Record History(案例)
    OAF_开发系列23_实现OAF数据格式CSS和CSS库(案例)
    OAF_开发系列22_实现OAF条形码BarCode
    OAF_开发系列21_实现OAF事物控制TransactionUnitHelper(案例)
    OAF_开发系列20_实现OAF打印功能
    OAF_开发系列19_实现OAF对话框提示dialogPage(案例)
    OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
    OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
  • 原文地址:https://www.cnblogs.com/wangaohui/p/2820974.html
Copyright © 2020-2023  润新知