О хэш-функции, используемой в hashmap (хэш)? - PullRequest
0 голосов
/ 01 марта 2019

Я вижу следующие хеш-функции.Но я не знаю, почему они определены таким образом.Кто-нибудь знает, где я могу найти объяснения для этих хэш-функций?Спасибо.

https://github.com/attractivechaos/klib/blob/master/khash.h#L368

#define kh_int64_hash_func(key) (khint32_t)((key)>>33^(key)^(key)<<11)

static kh_inline khint_t __ac_X31_hash_string(const char *s)
{
    khint_t h = (khint_t)*s;
    if (h) for (++s ; *s; ++s) h = (h << 5) - h + (khint_t)*s;
    return h;
}
static kh_inline khint_t __ac_Wang_hash(khint_t key)
{
    key += ~(key << 15);
    key ^=  (key >> 10);
    key +=  (key << 3);
    key ^=  (key >> 6);
    key += ~(key << 11);
    key ^=  (key >> 16);
    return key;
}
...