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

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Film Riot

    Film Riot

    16 NİSAN 2006
  • george sarintzotis

    george sarin

    2 Aralık 2007