• 散列技术之哈希


    给定的数据为:39, 38, 12, 28, 15, 42, 44, 6, 25, 36 ,散列函数为hash(x)=x MOD 13,用线性探测法解决哈希冲突的问题,

    试建立哈希表,计算出查找成功和不成功时的平均查找长度(ASL)。

    解析:所谓的线性探查法是将散列表看成是一个环形表,若在地址d(即hash(k)=d)发生冲突,则依次探查下述地址单元:d+1,d+2,...,M-1,...d-1

    直到找到一个空闲地址或查找到关键码为K的结点位置。

     地址:         0    1    2   3    4   5    6   7   8   9   10  11  12

     数据:        39  12  28  15  42  44   6  25  -  -   36   -   38

     成功次数:    1   3   1    2    2    1    1   9               1          1

    不成功次数:  9   8   7   6   5   4   3   2   1   1    2    1          10

    查找成功时的平均查找长度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2

    查找不成功时的平均查找长度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54

    0 1 2 3 4 5 6 7 8 9 10 11 12
    39 12 28 15 42 44 6 25     36   38

    说明:

    第n个位置不成功时的比较次数为,第n个位置到第1个没有数据位置的距离。

    ( 之所以是到第一个没有数据的位置是因为,
      假如检索数据存在则存放位置应为取模后的值,但是如果存在冲突,则顺次向后查找第一个空的位置放入其中。然而查找不成功时,意味着带查找的值
      并不在散列当中,否则,在第一个空位置之前就应该能检索到。)

    至少要查询多少次才能确认没有这个值。

    (1) 查询hash(x)=0,至少要查询9次遇到表值为空的时候,才能确认查询失败。

    (2) 查询hash(x)=1,至少要查询8次遇到表值为空的时候,才能确认查询失败。

    (3) 查询hash(x)=2,至少要查询7次遇到表值为空的时候,才能确认查询失败。

    (4) 查询hash(x)=3,至少要查询6次遇到表值为空的时候,才能确认查询失败。

    (5) 查询hash(x)=4,至少要查询5次遇到表值为空的时候,才能确认查询失败。

    (6) 查询hash(x)=5,至少要查询4次遇到表值为空的时候,才能确认查询失败。

    (7) 查询hash(x)=6,至少要查询3次遇到表值为空的时候,才能确认查询失败。

    (8) 查询hash(x)=7,至少要查询2次遇到表值为空的时候,才能确认查询失败。

    (9) 查询hash(x)=8,至少要查询1次遇到表值为空的时候,才能确认查询失败。

    (10)查询hash(x)=9,至少要查询1次遇到表值为空的时候,才能确认查询失败。

    (11)查询hash(x)=10,至少要查询2次遇到表值为空的时候,才能确认查询失败。

    (12)查询hash(x)=11,至少要查询1次遇到表值为空的时候,才能确认查询失败。

    (13)查询hash(x)=12,至少要查询10次遇到表值为空(循环查询顺序表)的时候,才能确认查询失败。

    Fight fight fight ! 你有你的奇迹 ! Fight fight fight ! Just to be yourself !
  • 相关阅读:
    逆向技术汇总
    绕过安全软件设置注册表
    内存空间中的句柄,指针,对象,类
    COM组件的逆向
    组策略设置隔离文件夹
    VS2015驱动环境配置
    python批量提取eml附件
    反沙箱——SetErrorMode
    CrypMic分析报告
    反调试——jmp到那个地址
  • 原文地址:https://www.cnblogs.com/sjlove/p/3110526.html
Copyright © 2020-2023  润新知