0
我有一组100,000个ID需要散列到具有50个存储桶的数组中。在Python中实现散列函数
该ID的格式为:AA00000 ... AA99999。我知道有像md5这样的函数可用,但是这些函数产生的摘要不会索引到数组中。我怎么能实现一个散列,以便为每个ID它返回一个索引到我的数组?
在此先感谢。 (Python实现这一点)
我有一组100,000个ID需要散列到具有50个存储桶的数组中。在Python中实现散列函数
该ID的格式为:AA00000 ... AA99999。我知道有像md5这样的函数可用,但是这些函数产生的摘要不会索引到数组中。我怎么能实现一个散列,以便为每个ID它返回一个索引到我的数组?
在此先感谢。 (Python实现这一点)
只需使用内置hash()
function和使用模量限制结果,以50:
hash(yourid) % 50
从文档:
返回的哈希值该对象(如果有的话)。哈希值是整数。
了给定的输入,这均匀采插槽足够:
>>> from collections import Counter
>>> histogram = Counter(hash('AA{:05d}'.format(i)) % 50 for i in range(100000))
>>> for i in range(50):
... print '{:4d}: {}'.format(histogram[i], '*' * (histogram[i] // 40))
...
1932: ************************************************
1932: ************************************************
1941: ************************************************
1941: ************************************************
1908: ***********************************************
1908: ***********************************************
1974: *************************************************
1974: *************************************************
2012: **************************************************
2012: **************************************************
1898: ***********************************************
1898: ***********************************************
1954: ************************************************
1954: ************************************************
1925: ************************************************
1925: ************************************************
1995: *************************************************
1995: *************************************************
1982: *************************************************
1982: *************************************************
2023: **************************************************
2023: **************************************************
2025: **************************************************
2025: **************************************************
2070: ***************************************************
2070: ***************************************************
2042: ***************************************************
2042: ***************************************************
2028: **************************************************
2028: **************************************************
2120: *****************************************************
2120: *****************************************************
2064: ***************************************************
2064: ***************************************************
2100: ****************************************************
2100: ****************************************************
2057: ***************************************************
2057: ***************************************************
2039: **************************************************
2039: **************************************************
1981: *************************************************
1981: *************************************************
1956: ************************************************
1956: ************************************************
2000: **************************************************
2000: **************************************************
1982: *************************************************
1982: *************************************************
1992: *************************************************
1992: *************************************************
为什么不'减少(operator.xor,地图(ORD,my_string))%50':P(+1) – 2014-12-04 17:47:56
Thanks Martijn; hash()函数是否会生成均匀分布? – 2014-12-04 17:49:29
@JoranBeasley:为什么有一只狗,然后吠叫自己,是我想知道的.. – 2014-12-04 17:49:39