【发布时间】:2016-04-11 02:23:43
【问题描述】:
我之前一直在使用adler32 生成一个 32 位的文本块哈希(然后我将其用作文件名,以保存该文本的处理版本的缓存)。例如
hashed_file_name = adler32(pragraph.encode())
我希望增加哈希大小,以减少冲突的可能性 [即两个不同的文本块获得相同的哈希码,考虑到我有大约 1000 万个文本块,我认为在大约 0.2% 的情况下会产生冲突 - 即 1000 万 / 2^32]
我的问题是,产生至少 64 位哈希的最快哈希生成器是什么? sha1 会是一个有效的选项[产生 160 位哈希]?即
hashed_file_name = hashlib.sha1(pragraph.encode()).hexdigest()
虽然这对我来说有点过头了,但其他版本/选项在处理时间方面是否更有效?
【问题讨论】:
-
看看PyHash library。它包括 MurmurHash 3(具有 32 位和 128 位变体)和 Google 的 CityHash(具有 64 位和 128 位变体)。
-
这是一个不错的列表。 en.wikipedia.org/wiki/…
-
为什么不用python内置的hash()函数呢?它在我的 64 位机器上生成了 64 位数字。我认为它非常快。
-
hash()在 32 位 Python 上是 32 位,看起来,虽然这是一个可能会改变的实现细节。 -
@kindall hash() 将为每个程序运行产生不同的值。对于检查文件不是很有用。