哈希查找基础介绍

顺序,二分,二叉排序树和平衡二叉树的四种查找均是建立在关键字比较的基础上,查找效率依赖于查找过程中进行关键字的比较。哈希的查找就是在理想情况下不需要比较找到待查找的关键字期望的时间为O(1)。

哈希定义
我们将结点的关键字与结点的存储位置的对应关系称为哈希函数,通常用H表示,其
自变量是结点的关键字key,即 H=H(key)
哈希函数的函数值称为哈希地址;而根据哈希函数建立的表就成为哈希表。

在哈希表中存储结点时,首先以结点的关键字为自变量,根据哈希函数,计算出对应的哈希地址,然后将该结点存储在该地址上;当进行查找时,首先根据给定的关键字,用同一个散列函数计算出对应的存储地址,随后到该地址处进行随机访问。

哈希函数的冲突
哈希技术通过哈希函数建立了从结点的关键字集合到哈希表的地址集合的一个映射,当两个不同的关键字计算出了相同的H那么需要存储在同一个位置上,这种现象称为冲突collision,key1和key2成为同义词。
采用哈希技术需要考虑两个主要问题
1,散列函数的设计,如何设计一个高效率的哈希函数
2,冲突的处理,如何采取合适的处理冲突方法解决冲突

哈希函数—采用除留余数法
哈希函数H(key)=key mod p ,若散列表长度为m,那么p<=m的质数 ,233是质数
长度m的选取要大于存入的数的个数,要存200个数,长度m的值要比200大。

冲突处理—拉链法
拉链法解决冲突的做法,是将所有关键字为同义词的结点连接在同一个单链表中。若选定哈希表的长度为m,则可将哈希表定义为一个有m个头指针组成的指针数组t[0…m-1],凡是哈希地址为i的结点,均插入到t[i]为头指针的单链表中,t中各分量的初值均为空指针。

拉链法的优点:
1.处理冲突简单,无堆积现象,
2.各链表的结点空间是动态申请的,故更适合造表前无法确定表长的情况
3.删除结点操作易于实现,
缺点:指针需要额外的空间,

代码实现

猜你喜欢

转载自blog.csdn.net/weixin_44789333/article/details/89511136