如何解决散列函数中的均匀分布
我编写了以下基本散列函数来处理散列图数据结构:
static int ht_hash(const char* s,int prime,int num_buckets)
{
long hash = 0;
size_t len_s = strlen(s);
for (int i=0; i < len_s; i++)
{
// 1. left-most digit should be prime^^len-1,right-most should be prime^^0
long prime_to_power = (long) pow(prime,len_s - (i+1));
// 2. multiple that value for the digit times the code (asci code in this case) for that char
hash += prime_to_power * s[i];
}
// 3. hash / modulo
hash %= num_buckets;
return (int) hash;
}
如何确定上述基本散列函数的“好”桶大小或“素数”?我知道目标是均匀分布。但是,除了使用 100k 值进行蛮力之外,还有其他方法可以做到这一点,例如:
for (int num_buckets=0; num_buckets < 100000; num_buckets++)
// for (int prime=1; prime < 10000; prime=get_next_prime())
// or,if we want to grab all numbers,not just prime and see for ourselves
for (int number=1; number < 100000; number++)
// ... store some histogram-like data
或者,这是否更像是一个抽象的数学领域,其中有证据显示均匀分布的可能条件/约束?换句话说,什么是了解散列函数及其实现方式的好方法?以及如何确认它们是统一的?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。