我使用的是Python-2.6。我对散列函数知之甚少。在
我想用一个CRC散列函数将一个像'128.0.0.5'这样的IP地址散列到[0,H]范围内。目前我正在考虑
zlib.crc32('128.0.0.5')%H.
这样可以吗?有几个问题。你可以试着回答。。。在
如果我散列“128.0.0.5”或其二进制文件“00011101010..”,不管是不是不带“.”,它是否会产生差异
在zlib.crc32型返回有符号整数。moding(%)是否为负。如果是正的H,总是给出pos no?
用H表示的%-ing是否影响哈希函数的性能?(我的意思是,在可用的空间内xlib.crc32号文件)
谢谢!在
你为什么要把一个IP地址杂凑成一个数字?它们已经有了本机整数表示。例如,使用netaddr:
ad 1)它将产生不同的结果,但不影响哈希的质量。在
ad2)它总是产生一个正数或零。在
ad 3)由于限制了可能的存储桶的数量,这确实会影响哈希的质量。在
总的来说:你的H有多大?请记住,IPv4地址只不过是一个32位的值。192.168.0.1只是一个更具可读性的字节表示。因此,如果H大于4294967295,就不需要散列。在
不是真的。在
是的。在
你最好使用校验和的所有位来弥补它们缺乏“雪崩效应”。如
192.168.1.1
、192.168.1.2
等的单个数字变体可能只在校验和的前几位产生差异,而且由于%
只关心最后一位,哈希将发生冲突。在相关问题 更多 >
编程相关推荐