1 comment

[ 3.7 ms ] story [ 14.4 ms ] thread
This paper starts off describing a hash algorithm reminiscent of quake3's inv_sqrt() function (few lines, magic numbers):

    int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
        int64_t b = 1,
                j = 0;
        while (j < num_buckets) {
            b = j;
            key = key * 2862933555777941757ULL + 1;
            j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1));
        }
        return b;
    }
That wraps up by the second page, though. I'll try implementing it myself when I get home (it looks promising).