python hashmap函数_为何在python中list不支持hashmap而tuple可以?

在日常使用python的过程中总是会遇到一个问题,python中的list是不支持hashmap的,唯一的用法是tuple,那么这个原因到底是为什么呢?

recap:哈希表的关键思想是使用哈希函数将键映射到存储桶。更确切地说,当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中;

当我们想要搜索一个键时,哈希表将使用相同的哈希函数来查找对应的桶,并只在特定的桶中进行搜索。

理想情况下,完美的哈希函数将是键和桶之间的一对一映射。

虽然在大多数情况下这个映射并不完美,但是这是设计哈希函数中要努力平衡的问题

我们尝试对于数组设计哈希函数:

case1:对于一个值value ∈ {0, 1}的数组,假定它的size n小于10,那么就是一个长度小于10的01序列,如何设计哈希函数能够映射数组唯一?

import random

codemain = random.randint(0, 1)

hashfunc = lambda x:2**x

hashmap = [codemain * hashfunc(i) for i in range(10)] #代表hash函数的值

也就是说通过上面的hashfunc,对于数组的每个取值求2的i次幂,i为值得index,这样一共可以得到1023个hashmap的取值,对于size n小于10,取值为0-1的数组,能够达到完美映射。

case2:对于一个值value∈{0, 1, 2, 3}的数组,假定它的size n仍然小于10,又应该如何设计一个哈希函数来讲这样的数组达到完美映射呢?

同理:

import random

codemain = random.randint(0, 3)

hashfunc = lambda x:4**x

hashmap = [codemain * hashfunc(i) for i in range(10)]

这个hashpmap可能的值有1398100种...

所以对于数组的哈希函数设计要清楚数组中取值的范围以及数组的长度,在python中tuple很容易满足这个要求,但是list是可变长度的,长度的变化往往会造成哈希函数取值急剧增长,可能这就是python中不让list支持hashmap,只支持了tuple。。。

其实数组的取值范围反而更加容易令哈希函数取值急剧增长,但是取值范围是一个不好约束的情况,所以对于仅限制对于范围固定的tuple进行哈希映射能够让哈希函数更加稳定。。。

以上内容为不负责任乱弹

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值