什么是hash,什么是hash表,为什么hash表查询快

什么是可哈希(hashable)的?


一个 object 是可哈希的(hashable),是指这个 object 在其生存期内有一个不变的哈希值(hash value),也就是说同一个object用hash(object)计算出来的值是一样的, 如list 对象,改变了一个元素值之后,同一个list计算出来的hash值就不同,所以list不是可哈希的。


什么是hash算法?


哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,经过hash算法计算以后都将产生不同的值。


python中hashlib库提供的hash算法有'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'  sha是安全散列算法的缩写, sha1 sha224是不同位数的实现,看一个hash算法和hash值的例子:
hashlib.md5('1').hexdigest()  
'c4ca4238a0b923820dcc509a6f75849b'
hashlib.md5('nihao').hexdigest()
'194ce5d0b89c47ff6b30bfb491f9dc26'
hashlib.sha1('nihao').hexdigest()
'23fcf96d70494b81c5084c0da6a6e8d84a9c5d20'
即对一个对象进行hash算法的计算,得到一个不太可能重复的值。


什么是hash表?


哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。简单理解为,一个通过key计算出来的hash值 和 一个存储的对象组成的一个表, 如python中的dict。


哈希表存储和查找为什么快呢(O(1))?


哈希算法存取之所以快,是因为其直接通过关键字key得到要存取的记录内存存储地址,从而直接对该地址进行读或写。
整个散列过程其实就是两步:
(1) 在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记录。
(2) 当查找记录时,我们通过同样的散列函数计算记录的散列地址,按此散列地址访问该记录。由于存取用的是同一个散列函数, 因此结果当然也是相同的。
简单理解:
将你传入的key通过hash算法运算成一个地址值,就像指针那样,指向内存中的某块区域,存的时候根据该地址值,将value存到这个地址值映射的内存区域里,读的时候同样用key作hash运算得出地址值,直接读取所对应的内存区域中取出结果,所以时间复杂度是O(1)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值