Giriş
Bu yöntem aynı zamanda Fibonacci Hashing olarak ta bilinir. Sabitin nereden geldiğinin açıklaması şöyle.
Şöyle yaparız
Şöyle yaparız.
C ile Şöyle yaparız. Burada % N işlemi ile bir bucket'a dönüştürme yok
Java ile şöyle yaparız.
Bu yöntem aynı zamanda Fibonacci Hashing olarak ta bilinir. Sabitin nereden geldiğinin açıklaması şöyle.
0x9e3779b9 is the integral part of the Golden Ratio's fractional part 0.61803398875… (sqrt(5)-1)/2, multiplied by 2^32.Bu denklemde kullanılan 0x9E3779B1 sabiti, boost içinde kullanılan 0x9E3779B9 değerine çok yakın. Açıklaması şöyle.
...
This method is often referred to as "Golden Ratio Hashing", or "Fibonacci Hashing" and was popularised by Donald Knuth (The Art of Computer Programming: Volume 3: Sorting and Searching).
Occasionally, you may also see 0x9e3779b1, which is the prime closest to 0x9e3779b9 (and appears to be a bit of "cargo cult" as this is not a modular hash). Similarly, 0x9e3779b97f4a7c15 and 0x9e3779b97f4a7c55 are the 64 bit equivalents of these numbers.Örnek - Asal Sayı
Şöyle yaparız
hash(i)=i*0x9e3779b1
mod 2^32
Örnek - Asal SayıŞöyle yaparız.
hash = n * 0x9e3779b1 >>> 24
Örnek - Asal SayıC ile Şöyle yaparız. Burada % N işlemi ile bir bucket'a dönüştürme yok
uint32_t hash(uint32_t v)
{
return v * UINT32_C(2654435761);
// do not comment about the lack of right shift. I'm not ignoring it. read on.
}
Örnek - Asal SayıJava ile şöyle yaparız.
public long hash(int key) {
long l = 2654435769L;
return (key * l >> 32) % N ;
}
Hiç yorum yok:
Yorum Gönder