微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

散列函数中的均匀分布

如何解决散列函数中的均匀分布

我编写了以下基本散列函数来处理散列图数据结构:

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 举报,一经查实,本站将立刻删除。