python hash表

在查找过程中不经过关键字的比较.
在待查的关键字值和它的存储位置之间建立一个确定的对应关系,则查找时不必再进行关键字值间的比较.

根据设定的哈希函数以及处理冲突的方法将查找表中各个数据元素存储在一段有限的连续空间中.即获得哈希表.

简单理解把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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值