什么是可哈希(hashable)的?
什么是hash算法?
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,经过hash算法计算以后都将产生不同的值。
hashlib.md5('1').hexdigest()
'c4ca4238a0b923820dcc509a6f75849b'
hashlib.md5('nihao').hexdigest()
'194ce5d0b89c47ff6b30bfb491f9dc26'
hashlib.sha1('nihao').hexdigest()
'23fcf96d70494b81c5084c0da6a6e8d84a9c5d20'
即对一个对象进行hash算法的计算,得到一个不太可能重复的值。
什么是hash表?
哈希表存储和查找为什么快呢(O(1))?
整个散列过程其实就是两步:
(1) 在存储时,通过散列函数计算记录的散列地址,并按此散列地址存储该记录。
(2) 当查找记录时,我们通过同样的散列函数计算记录的散列地址,按此散列地址访问该记录。由于存取用的是同一个散列函数, 因此结果当然也是相同的。
简单理解:
将你传入的key通过hash算法运算成一个地址值,就像指针那样,指向内存中的某块区域,存的时候根据该地址值,将value存到这个地址值映射的内存区域里,读的时候同样用key作hash运算得出地址值,直接读取所对应的内存区域中取出结果,所以时间复杂度是O(1)。