SORU
9 ŞUBAT 2011, ÇARŞAMBA


Boost sihir numarası: hash_combine

boost::hash_combine şablon işlevi, karma (seed) denilen ve bir nesne v için bir referans alır. docs göre v karma seed birleştirir

seed ^= hash_value(v)   0x9e3779b9   (seed << 6)   (seed >> 2);

Bu deterministik olduğunu görüyorum. Bir XOR kullanılır neden görüyorum.

Buna ek olarak benzer değerleri eşleme yaygın olarak birbirinden çok karışık tablolar bozulmayacağını, ama birisi sihirli sabiti nedir açıklayabilir misiniz? sondalama yardımcı olur eminim

CEVAP
9 ŞUBAT 2011, ÇARŞAMBA


Sihirli sayı her 0 veya 1, bit arasında basit bir ilişki ile eşit derecede olası olduğu 32 rasgele bit olması gerekiyor. Bu bit bir dize bulmak için ortak bir yol irrasyonel bir sayı ikili genişleme kullanmaktır; bu durumda, bu sayı altın oran karşılıklı

phi = (1   sqrt(5)) / 2
2^32 / phi = 0x9e3779b9

Yani bu sayı "rastgele" tohum her değiştirir; sizin de dediğiniz gibi, bu ardışık değerleri birbirlerinden uzak olacağı anlamına gelir. Eski tohum kaymıştır sürümleri de dahil olmak üzere, eğer hash_value() değerleri oldukça küçük bir aralık varsa bile, farklılıklar yakında tüm bitlerin yayılmış olmasını sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bigky226

    bigky226

    11 HAZİRAN 2006
  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • RocketJump

    RocketJump

    22 ŞUBAT 2006