This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Proper (fast) Python implementations of Dan Bernstein's DJB2 32-bit hashing function | |
# | |
# DJB2 has terrible avalanching performance, though. | |
# For example, it returns the same hash values for these strings: "xy", "yX", "z7". | |
# I recommend using Murmur3 hash. Or, at least, FNV-1a or SDBM hashes below. | |
import functools | |
djb2 = lambda x: functools.reduce(lambda x,c: 0xFFFFFFFF & (x*33 + c), x, 5381) | |
sdbm = lambda x: functools.reduce(lambda x,c: 0xFFFFFFFF & (x*65599 + c), x, 0) | |
fnv1a_32 = lambda x: functools.reduce(lambda x,c: 0xFFFFFFFF & ((x^c)*0x1000193), x, 0x811c9dc5) |