考研之数据结构028_算法查找_散列查找
一、散列表/哈希表的定义(Hash Table)
== 散列表==,又称“哈希表”,是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关。
每个数据的关键字,和实际存储地址,有一个映射关系。
通过“散列函数(哈希函数)”:Addr=H(key)
二、解决冲突
1、拉链法
一、成功案例:
查找长度等于三说明,要查找27这个数据,需要对比三次关键字。
1、用27对13取余,等于1.
2、然后进行拉链法,在数组1中,进行一一比对。
二、失败案例
查找长度是0,没有进行比对。
三、ASL查找长度:
第一行个数+第二行个数…整体除以总数=ASL
四、失败的查找长度:
三、设置更好的散列方法
1、除留余数法 ——H(Key) = key%P
散列表,表长为m,取一个不大于m单最接近或等于m的质数p
(质数:除了1,和它本身之外,不能被其他整除,3,7,11,13)
2、直接定址法——H(Key) = key 或 H(Key)=a*key+b
3、数字分析法
4、平方取中法:
四、处理冲突的方法——开放定址法:
数组中依然是一个个元素,而空闲的地址,既可以向同义词开放,也可以非同义词开放。
一、线性探测法【012345…m-1】
在线性探测法,对存储的地址,可能落在1-15当中区间内,而哈希函数是0-12
1、查找成功
2、查找失败:(空位置算一次比较,但是拉链法没有算)
3、删除操作,不能直接删除,而是标记
4、ASL
1.查找成功:
每个数字查找成功比较的次数进行相加,然后除以总共的数字.
2.查找失败:
二、平方探测法【0,1,-1,4,-4,9,-9】