关于哈希表的问题

时间:2014-05-30 11:04:33

标签: c++ hashtable

以下是一些预处理哈希表的代码:

unsigned long cryptTable[0x500];
void StringHash::InitCryptTable() 
{  
    unsigned long seed = 0x00100001, index1 = 0, index2 = 0, i; 

    for( index1 = 0; index1 < 0x100; index1++ ) 
    {  
        for( index2 = index1, i = 0; i < 5; i++, index2 += 0x100 ) 
        {  
            unsigned long temp1, temp2; 
            seed = (seed * 125 + 3) % 0x2AAAAB; 
            temp1 = (seed & 0xFFFF) << 0x10; 
            seed = (seed * 125 + 3) % 0x2AAAAB; 
            temp2 = (seed & 0xFFFF); 
            cryptTable[index2] = ( temp1 | temp2 );  
        }  
    }  
} 

有没有人可以告诉我为什么种子= 0x00100001和以下算法,为什么不做memset(cryptTable,0,sizeof(cryptTable)),这样做的好处是什么?

1 个答案:

答案 0 :(得分:1)

这部分代码有多个方面。首先,您应该阅读密码学和随机生成器。

  • 0x00100001 - 与其他任何
  • 一样好
  • 0x2AAAAB = 2796203是素数且迭代种子=(种子* 125 + 3)%0x2AAAAB将为您提供0到2796202的伪随机数字序列
  • 种子&amp; 0xFFFF将为您提供16位伪随机数

根据第二部分 - 它取决于它的使用位置......