散列表查找平均长度
概念:
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表
处理冲突的方法分为两种,一是开放定址法,二是拉链法。
开放定址法有四种:线性探测法,平方探测法,再散列法,伪随机序列法
拉链法:链接法
开放定址法主要学习两种:线性探测法,平方探测法,这也是常考察的知识点。
线性探测法:冲突发生时,顺序查看表中的下一个单元,直到找到一个空闲单元或查遍全表。
实例:使用散列函数H(key)=key%11,把一个整数值转化为散列表下标,现把数据{1,13,12,34,38,33,27,22}依次插入到散列表中。 1)使用线性探测构建散列表 2)确定查找成功的平均查找长度以及不成功的平均查找长度
解:散列表的地址范围为0-10,因为key%11,余数为0-10
H(1)=1 无冲突
H(13)=2 无冲突
H(12)=1 有冲突,根据线性探测,H1=2,发生冲突,继续探测,H2=3.无冲突,于是12放在了地址为H3中。
依次类推,有冲突,继续找下一个不为空即可。无冲突,直接放下。
成功:冲突的总次数/关键字的个数
ASL(sucss)=(1+1+1+3+4+1+2+8)/8=21/8
失败:直接看表格,从前往后,每一个关键字开始指导下一个地址为空结束 ,即为失败的次数。除以地址的个数。
ASL(unsucss)=(9+8+7+6+5+4+3+2+1+1+1)/11=47/11