哈希表asl - wolai 笔记
在非链式法解决冲突的哈希表,会用一个无穷大的关键字标识空白存储单元。如果在探测时遇见了空白存储单元,关键字都会与一个无穷大的关键字进行比较,与之关键字的比较次数就需要加一
在链式法解决冲突的哈希表中,使用空指针表示空结点,而空指针非关键字类型,所以不纳入比较次数。

1.查找成功ASLsucASL_{suc}

只有对哈希表中已经插入的关键字进行查找才能查找成功。
哈希表查找成功的比较次数等价于查找表中每个关键字的比较次数之和。还处理方式绕过无限关键字导致的无限查找问题,在求解查找成功的平均比较次数等于总的比较次数除以关键字数量kNum,而不是P,更不是tLength。

2.查找失败ASLfailASL_{fail}

2.1 查找失败的定义

  • 遇到了空白单元,就说明关键字不存在该哈希表中;
  • 哈希表查找一圈,未找到,那么key一定不存在这个表中。
key是无穷无尽的,但是key映射到0~p-1的单元,如果将每个0~p-1的单元失败的情况穷举一下,那么就能获得所有失败情况。

3.Sample

3.1 Sample 1

已知一组关键字序列为{10,24,32,17,31,30,46},采用哈希函数H(key)=keyMOD13H(key)=key MOD 13,表长m=20,采用二次探测再散列法解决冲突
地址0123456789101112 13——
key


3017313246

1024


成功次数


31111

11


失败次数1113445211321

成功ASL计算
10%13 = 10
24%13 = 11
32%13 = 6
17%13 = 4
31%13 = 5
30%13 = 4 → (4+1)%13 = 5 → (4-1)%13 = 3
46%13 = 7
ASLsucASL_{suc} = (3+1+1+1+1+1+1)/7 = 9/7
失败ASL计算
3 → 3+1=4 → 3-1=2
4 → 4+1=5 → 4-1=3 → 4+4=8
5 → 5+1=6 → 5-1=4 → 5+4=9
6 → 6+1=7 → 6-1=5 → 6+4=10 → 6-4=2
7 → 7+1=8
10 → 10+1=11 → 10-1=9
11 → 11+1=12
ASLfailASL_{fail} = (1+1+1+3+4+4+5+2+1+1+3+2+1)/13 = 30/13

3.2 Sample 2

选取哈希函数H(key)=key%7H(key)=key\%7,用链地址法解决冲突,对关键字{31,23,17,27,19,11,13,91,61,41}构造哈希表
ASLsuc = (1+1+1+2+1+1+2+1+2+3)/10 = 1.5
ASLfail = (1+0+1+2+1+2+3)/7=10/6
注意:链地址法解决冲突,在计算失败查找长度时,结点指针为空不算一次查找。


Comment