关于暴雪的哈希算法与time33算法,小白有个问题不解

时间:2022-01-16 09:52:29
1.暴雪的一个哈希算法,请问seed1和seed2的初始值要这样定义呢?
以及seed1 = ((dwHashType << 8) + ch) ^ (seed1 + seed2);
与 seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; 
为什么要这样获取呢?谢谢各位大神了?

int HashKey(const char* key) 
{
    int dwHashType = 1;
    unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
    int ch;
    while(*key != 0)
    { 
        ch = toupper(*key++);
        seed1 = ((dwHashType << 8) + ch) ^ (seed1 + seed2);
        seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; 
    }
    return seed1; 
}


2.类似的time33算法的获取哈希值如下,为什么hash初始者要这样定义,以及为什么最后要(hash & 0x7FFFFFFF)呢?谢谢!

unsigned int time33(char *str){
    unsigned int hash = 5381;
    while(*str){
        hash += (hash << 5 ) + (*str++);
    }
    return (hash & 0x7FFFFFFF);
}

3 个解决方案

#1


hash算法的目的是为了什么, lz知道的话会发现这些问题没有意义。
最后那个&0x7FFFFFFF一般来说是可选的,要看具体应用,我是直接mod样本量 

#2


引用 1 楼 dustpg 的回复:
hash算法的目的是为了什么, lz知道的话会发现这些问题没有意义。
最后那个&0x7FFFFFFF一般来说是可选的,要看具体应用,我是直接mod样本量 
关于暴雪的哈希算法与time33算法,小白有个问题不解第二个还能想通,但是第一个确实理解不到位,为什么要这样?我知道肯定是散列更广点,但是第一个为什么这样做呢?

#3


hash算法的目的是什么?
衡量一个hash算法的好坏标准是什么?

#1


hash算法的目的是为了什么, lz知道的话会发现这些问题没有意义。
最后那个&0x7FFFFFFF一般来说是可选的,要看具体应用,我是直接mod样本量 

#2


引用 1 楼 dustpg 的回复:
hash算法的目的是为了什么, lz知道的话会发现这些问题没有意义。
最后那个&0x7FFFFFFF一般来说是可选的,要看具体应用,我是直接mod样本量 
关于暴雪的哈希算法与time33算法,小白有个问题不解第二个还能想通,但是第一个确实理解不到位,为什么要这样?我知道肯定是散列更广点,但是第一个为什么这样做呢?

#3


hash算法的目的是什么?
衡量一个hash算法的好坏标准是什么?