哈希表
哈希表就类似于字典 key value 在存储的时候会有一个哈希函数 类似于将给定一些限制条件 将所要存储的东西分成有限的份数
如何存储哈希 就如何去取哈希
哈希冲突:对于任何哈希函数 都会出现两个不同元素映射到同一位置上的情况,这种情况叫做哈希冲突
解决哈希冲突的方法:
开放寻址法:
线性探查:位置i被占用,则向i+1,i+2尝试存储,取的时候也一样 取不到就往后取,直到为空,说明不存在此数
二次探查:位置i被占用,则向i+1^2,,i-1^2探查,取与上同理
二度哈希:有n个哈希函数,第1个哈希函数h1发生冲突时,则尝试用h2,h3,.. 取的话第一个取不到则用第二个函数直到取到空
拉链法:
将存储位置变成一个列表 存只需要append即可 取的话也只需要先拿表再取
自定义简单的哈希表
import copy class HashTable: def __init__(self,size=228): self.size = size self.T = [copy.deepcopy([]) for i in range(self.size)] def h(self,k): return k%self.size def insert(self,k): if self.find(k): print("Duplicated Insert!") else: i = self.h(k) # print(l[i]) print(self.T[i]) self.T[i].append(k) def find(self,k): i = self.h(k) if not len(self.T[i])==0: for n in self.T[i]: if n == k: return True return False def __str__(self): return str(self.T) h = HashTable() h.insert(1) print(h)
需要提醒的使 如果不用深copy会在添加元素时给所有列表都添加值,具体参考深浅copy
浙公网安备 33010602011771号