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

  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • POGProductionz

    POGProductio

    27 NİSAN 2012
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010