2014-12-04 104 views
0

我有一组100,000个ID需要散列到具有50个存储桶的数组中。在Python中实现散列函数

该ID的格式为:AA00000 ... AA99999。我知道有像md5这样的函数可用,但是这些函数产生的摘要不会索引到数组中。我怎么能实现一个散列,以便为每个ID它返回一个索引到我的数组?

在此先感谢。 (Python实现这一点)

回答

2

只需使用内置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: ************************************************* 
+0

为什么不'减少(operator.xor,地图(ORD,my_string))%50':P(+1) – 2014-12-04 17:47:56

+0

Thanks Martijn; hash()函数是否会生成均匀分布? – 2014-12-04 17:49:29

+1

@JoranBeasley:为什么有一只狗,然后吠叫自己,是我想知道的.. – 2014-12-04 17:49:39