在查找过程中不经过关键字的比较.
在待查的关键字值和它的存储位置之间建立一个确定的对应关系,则查找时不必再进行关键字值间的比较.
根据设定的哈希函数以及处理冲突的方法将查找表中各个数据元素存储在一段有限的连续空间中.即获得哈希表.
简单理解把key值通过函数映射为一个数组的下标.
python内部的字典数据类型就是hash表实现的.
哈希函数方法:
1.直接定址法
H(key)=key-1
2.数字分析法
3.折叠法
4.除留余数法
H(key)=key%q(这里q必须为质数,否则冲突比较多)
处理冲突方法:
若按给定的哈希函数求得的哈希地址已被占用,则按一定规则求下一哈希地址,如此重复直到找到可以保存的地址
1.开方定址法,做增量
2.链地址法
将所有按给定的哈希函数求得的哈希地址相同的关键字存储在同一线性链表中,且使链表按关键字有序.
3.公共溢出区
拖关键字所对应的哈希地址已被占用,则保存到公共溢出区中
哈希表查找元素方法
1.根据待查关键字值,按给定的哈希函数,求哈希函数
2.若该地址上有数据元素,则进行关键字值间的比较(因为有可能冲突)
2.1若相等,则查找成功
2.2若不等,则按冲突处理方法求下一个可能存储的地址.
class hashMap(object):
def __init__(self,n):
self.len=n
self.maps = [0]*n # 总表
def find_map(self, k): # 通过hash函数计算索引值
index = hash(k) % self.len
return index
def add(self, k, v):
index = self.find_map(k)
self.maps[index]=v
def get(self, k):
index = self.find_map(k)
return self.maps[index]
参考:
https://www.bilibili.com/video/av17500428?from=search&seid=12479221487256522030
https://www.cnblogs.com/cjyfff/p/3536525.html
https://www.cnblogs.com/linxiyue/p/3795396.html