7.5_1散列查找(上)

基于一种数据结构:
散列表(Hash Table),又称作哈希表

特点:数据元素的关键字与其存储地址直接相关

7.5_1散列查找(上)_第1张图片

 7.5_1散列查找(上)_第2张图片

 其实这个散列表也是基于数组实现的

加入19对13取余

 7.5_1散列查找(上)_第3张图片

 7.5_1散列查找(上)_第4张图片

 加入再次插入1的话,塞不进去

7.5_1散列查找(上)_第5张图片

 

 7.5_1散列查找(上)_第6张图片

数据元素不会直接存放到数组中

而是通过指针

 7.5_1散列查找(上)_第7张图片

这种方法也叫做拉链法(也叫做链接法,链地址法)来处理冲突

将如何基于这个数据结构进行查找操作

7.5_1散列查找(上)_第8张图片

 

 7.5_1散列查找(上)_第9张图片

在序号为1的链表中查找

 查找长度为3

7.5_1散列查找(上)_第10张图片

 7.5_1散列查找(上)_第11张图片

 7.5_1散列查找(上)_第12张图片

链表的头指针是空的(查找长度为0)

查找长度定义:在查找运算中需要对比关键字的次数(不包括开始的指针判断)

7.5_1散列查找(上)_第13张图片

 我们还可以算出平均查找长度:

7.5_1散列查找(上)_第14张图片效率非常高,比顺序查找高多了

如果没有同义词的话:

7.5_1散列查找(上)_第15张图片

 最理想情况:散列查找的时间复杂度可以达到O(1)

7.5_1散列查找(上)_第16张图片

 一共就这么多情况,这13中情况等可能发生

装填因子会影响查找效率

散列表越短,发生冲突的情况越多

那么为了效率更高

7.5_1散列查找(上)_第17张图片

 常见的散列函数

7.5_1散列查找(上)_第18张图片

设计目标:让不同关键字的冲突尽可能地少

7.5_1散列查找(上)_第19张图片

 7.5_1散列查找(上)_第20张图片

 与质数相反的概念就是合数

7.5_1散列查找(上)_第21张图片

7.5_1散列查找(上)_第22张图片

 7.5_1散列查找(上)_第23张图片

 7.5_1散列查找(上)_第24张图片

7.5_1散列查找(上)_第25张图片7.5_1散列查找(上)_第26张图片

 7.5_1散列查找(上)_第27张图片

 7.5_1散列查找(上)_第28张图片

 也可以直接使用直接定址法

7.5_1散列查找(上)_第29张图片

 但是并不实际,空间复杂度太高

 

你可能感兴趣的:(数据结构,哈希算法,散列表)