哈希表

哈希表就类似于字典 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

 

posted @ 2021-07-22 00:30  不想拖累他人  阅读(58)  评论(0)    收藏  举报