一、散列表的基本概念
二、散列函数的构造方法
1、除留余数法
下面那个散列表,因为取余的范围只能在0-12,所以最后那两个空了出来 这里出现一个疑惑,使用最大质数7进行取余,反而冲突更多了?
2、直接定址法
这种方式虽然分布的均匀,但还是可能发生冲突。
三、处理冲突的方法
1、拉链法
基于拉链法的查找 一共有12个元素,这些个链表第一层有6个,二层有4个。。。。 上面两个式子一样,但是下面的式子反映了冲突次数 理想状态下,没有冲突
下面是查找失败的平均查找次数and装填因子 ①装填因子,其越大表示装的约满 装填因子不仅会影响失败时的查找效率,也会一定程度上的查找成功时的效率(装填因子大,反映了冲突的次数增加,查找平均长度变长)
2、开放定址法
线性探测法
探测到2位置为空,不冲突,将其放到这
查找操作 首先使用哈希函数算出算出27的关键词,其次线性探测法。。。发现14、1和27是同义词,687和27不是同义词
疑惑?拉链法,空位置不算一次比较(这里只是存储的指针),而这里的查找操作就是存储的数,是同类型的,算作一次。 删除操作
这是线性探测法的一个弊端,看起来是满的,实际上是很空的,查找79需要有8次冲突。
查找效率 如果一个数被映射到了0这个位置,因为他是空的,直接比较一次就可以知道查找失败,当映射到1时,比较13次,。。。
平方探测法
查找71,先比较6这个位置,其次19,32,45,58,71 8不满足4j+3,所以不能探测所有
伪随机序列法
四、散列查找及性能分析
|