考研论坛

 
查看: 6574|回复: 4
打印 上一主题 下一主题

等概率情况下查找成功和不成功的平均查找长度

[复制链接]

30

主题

222

帖子

1134

积分

中级战友

Rank: 3Rank: 3

精华
0
威望
222
K币
912 元
注册时间
2011-4-1
跳转到指定楼层
楼主
发表于 2011-10-27 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于哈希表的求等概率情况下查找成功和不成功的平均查找长度,我想问的是查找成功和不成功是查找什么?对什么来说是成功不成功呢?是查位置还是关键字呢?
按照资料上的说明,查找成功是按着哈希函数构照每个关键字的位置的冲突次数来计算的,那么应该理解为查找位置喽?如果查找位置的话,所平均的应该是表长而不是关键字的个数才对,各位觉得呢?对于查找不成功,实在没理解。
    回复

    使用道具 举报

    9

    主题

    291

    帖子

    925

    积分

    中级战友

    Rank: 3Rank: 3

    精华
    0
    威望
    86
    K币
    839 元
    注册时间
    2011-7-21
    沙发
    发表于 2011-10-31 22:20 | 只看该作者
    查找成功的很好算,就是要是没有碰撞,那么肯定一次就能查找成功,碰撞一次,那么就需要查两次,才能成功,所以把所有的查找次数加起来再除以所有的数据个数。
    查找不成功的次数计算原则就是 假设不成功就是用碰撞算法进行计算,然后到该数字回到初始位置或者空项的次数,这个时候就是容量来算,比如说题目说装载容量为10,然后就从第一个开始算,他到后面第一个为空的距离或者回到它的初始位置的距离,最后算不成功的ASL结果的时候,分母也用装在容量。
    回复

    使用道具 举报

    30

    主题

    222

    帖子

    1134

    积分

    中级战友

    Rank: 3Rank: 3

    精华
    0
    威望
    222
    K币
    912 元
    注册时间
    2011-4-1
    板凳
     楼主| 发表于 2011-11-2 15:15 | 只看该作者
    gqxwolf 发表于 2011-10-31 22:20
    查找成功的很好算,就是要是没有碰撞,那么肯定一次就能查找成功,碰撞一次,那么就需要查两次,才能成功, ...

    说的有点乱。。能不能图示表示说明一下呢?
    回复

    使用道具 举报

    15

    主题

    163

    帖子

    475

    积分

    一般战友

    Rank: 2

    精华
    0
    威望
    49
    K币
    426 元
    注册时间
    2011-3-26
    地板
    发表于 2011-12-4 18:12 | 只看该作者
    最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的。现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅。

       下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题。

    Question1:

    将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为:      H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。

    (1) 请画出所构造的散列表。

    (2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

    Ans:

    (1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于 关键字总数/哈希表的长度。 根据题意,我们可以确定哈希表的长度为 L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。根据散列函数可以得到如下散列函数值表。

    H(Key) = (keyx3) MOD 7, 例如key=7时, H(7) = (7x3)%7 = 21%7=0,其他关键字同理。

    Key 7 8 30 11 18 9 14
    H(Key) 0 3 6 5 5 6 0

    (表1)

    采用线性探测再散列法处理冲突,所构造的散列表为:

    地址 0 1 2 3 4 5 6 7 8 9
    关键字 7 14   8   11 30 18 9   

    (表2)

    下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9, 11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所以要通过一定的冲突处理方法来解决这个问题。依题,采用线性探测再散列法处理冲突。下面详细介绍如何构建散列表:

           第一个key 7,它的地址是0,因此放到散列表的数组下表为0的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

           第二个key 8,它的地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

           第三个key 30,它的地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

           第四个key 11,它的地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;

           第五个key 18,它的地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6, 6这个位置上已经存在关键字30则继续增加步长1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;

           第六个key 9,它的地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7, 7这个位置上已经存在关键字18则继续增加步长1,因此现在的新地址应为8,位置8上没有关键字,放入即可;   

           第七个key 14,它的地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1, 位置1上没有关键字,放入即可;   

           到这一步所有关键字均已填入,散列表已经构造完成,如表2所示。

    (2)等概率情况下查找成功平均查找长度:

            这一问可以根据第一问的构造过程求解:

            key7一次就填入了表中,因此查找次数为1,同理8, 30, 11查找次数均为1; key18 进行了3次放入操作,探测位置分别是5,6,7 ,因此查找次数为3;key9也是3次;key14 进行了两次探测,因此查找次数为2。次数表如表3所示

    Key 7 8 30 11 18 9 14
    Count 1 1 1 1 3 3 2

    (表3)

            所以ASLsuccess= (1+1+1+1+3+3+2)/ 7 = 12/7。   

            等概率情况下查找不成功的平均查找长度:

            接下来讨论不成功的情况, 看表2,计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可, 但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置。等概率情况下,查找0~6位置查找失败的查找次数为:

       看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.      

            地址1, 到第一个关键为空的地址2的距离为2,因此查找不成功的次数为2.

            地址2,  到第一个关键为空的地址2的距离为1,因此查找不成功的次数为1.

            地址3,到第一个关键为空的地址4的距离为2,因此查找不成功的次数为2.

            地址4,到第一个关键为空的地址4的距离为1,因此查找不成功的次数为1.

            地址5,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为5,因此查找不成功的次数为5.

            地址6,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为4,因此查找不成功的次数为4.

            因此查找不成功的次数表如下表所示

    Key 7 8 30 11 18 9 14
    Count 3 2 1 2 1 5 4
    (表4)
           所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    本版积分规则   

    关闭

    您还剩5次免费下载资料的机会哦~

    扫描二维码下载资料

    使用手机端考研帮,进入扫一扫
    在“我”中打开扫一扫,
    扫描二维码下载资料

    关于我们|商务合作|小黑屋|手机版|联系我们|服务条款|隐私保护|帮学堂| 网站地图|院校地图|漏洞提交|考研帮

    GMT+8, 2025-12-24 05:59 , Processed in 0.075697 second(s), Total 7, Slave 8(Usage:6.75M, Links:[2]1,1_1) queries , Redis On.

    Powered by Discuz!

    © 2001-2017 考研 Inc.

    快速回复 返回顶部 返回列表
    × 关闭