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

  • 1881 Animation

    1881 Animati

    5 EKİM 2013
  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • Truc Minh

    Truc Minh

    23 Ocak 2011