我使用MurmerHash为同一个键生成一堆哈希值,如下所示。它为 50 个不同的种子输出 50 个不同的哈希值。
for(int seed=0; seed<50; seed++)
MurmurHash3_x86_32(key, strlen(key), seed, &hash);
但是当我有大量密钥(即 1000 万个密钥)时,时间效率并不高。有没有其他方法可以让它更快?
我使用MurmerHash为同一个键生成一堆哈希值,如下所示。它为 50 个不同的种子输出 50 个不同的哈希值。
for(int seed=0; seed<50; seed++)
MurmurHash3_x86_32(key, strlen(key), seed, &hash);
但是当我有大量密钥(即 1000 万个密钥)时,时间效率并不高。有没有其他方法可以让它更快?
已经有一段时间了,但看到这个并认为我会为其他需要它的人提供答案。
注意——我不记得我在哪里读到这个,或者把公式归因于谁。如果有人知道,请告诉我,以便我可以正确归因,以便其他人可以验证此解决方案的正确性。
您可以通过组合 2 个独立散列来生成 n 个独立散列。
for (i = 0; i < n; i++) {
(hash1 + i * hash2) % max_hash_size;
}
加法、乘法和调制应该比生成一个全新的散列更快。
我将 MurmurHash 与两个不同的种子一起使用,然后将它们组合起来生成我需要的额外哈希值。
我希望我能记得我在哪里读到这个......