暴雪哈希算法
暴雪哈希算法
参考文章:《Inside MoPaQ》chapter two
适用场合:存在一个庞大的字符串数组,给定一个字符串,判断其是否在字符串数组中;
主要思想:
代码实现:
#include
unsigned seed = , index1 = , index2 =
(index1 = ; index1 < ; index1++ (index2 = index1, i = ; i < ; i++, index2 += unsigned seed = (seed * + ) % temp1 = (seed & ) << seed = (seed * + ) % temp2 = (seed & cryptTable[index2] = (temp1 |
unsigned HashString( *lpszString, unsigned unsigned *key = (unsigned * unsigned seed1 = , seed2 =
(*key != ch = toupper(*key++
seed1 = cryptTable[(dwHashType << ) + ch] ^ (seed1 + seed2 = ch + seed1 + seed2 + (seed2 << ) +
unsigned MPQHashTableInit( **ppHashTable, i = *p = MPQHASHTABLE *_pHashTable =
p = malloc(nTableLength * (p == printf( *ppHashTable = _pHashTable = (MPQHASHTABLE *
(i = ; i < nTableLength; i++ (_pHashTable + i)->nHashA = - (_pHashTable + i)->nHashB = - (_pHashTable + i)->bExists =
MPQHashTableFree( * (pHashTable != pHashTable =