求哈希表失败查找长度

 

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

Question1: 函数

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

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

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

Ans: table

(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。

相关文章
相关标签/搜索