h**o 发帖数: 548 | 1 我大致明白这段程序是把一个字符串 hash 成一个值。就是不知道这里的 31 和 7951
是 随便定的那, 还是由什么著名的算法规定的。求教:
static unsigned int bm_Hash(const void *key, unsigned int size1)
{
unsigned long hashval=0, hv;
unsigned char *s=(unsigned char *)key;
for (hashval = 0; (s != NULL) && (*s != '\0'); s++)
hashval = (*s) + 31*hashval;
hv = hashval*7951;
return (size1)?(hv % size1):0;
} |
T*****9 发帖数: 2484 | 2 我觉得可能是随便定的想搞随机值?
不是狠了解这个。。。
7951
【在 h**o 的大作中提到】 : 我大致明白这段程序是把一个字符串 hash 成一个值。就是不知道这里的 31 和 7951 : 是 随便定的那, 还是由什么著名的算法规定的。求教: : static unsigned int bm_Hash(const void *key, unsigned int size1) : { : unsigned long hashval=0, hv; : unsigned char *s=(unsigned char *)key; : for (hashval = 0; (s != NULL) && (*s != '\0'); s++) : hashval = (*s) + 31*hashval; : hv = hashval*7951; : return (size1)?(hv % size1):0;
|
g*****g 发帖数: 34805 | 3 估计都是质数,有兴趣可以去读AOCP
7951
【在 h**o 的大作中提到】 : 我大致明白这段程序是把一个字符串 hash 成一个值。就是不知道这里的 31 和 7951 : 是 随便定的那, 还是由什么著名的算法规定的。求教: : static unsigned int bm_Hash(const void *key, unsigned int size1) : { : unsigned long hashval=0, hv; : unsigned char *s=(unsigned char *)key; : for (hashval = 0; (s != NULL) && (*s != '\0'); s++) : hashval = (*s) + 31*hashval; : hv = hashval*7951; : return (size1)?(hv % size1):0;
|
k****f 发帖数: 3794 | 4 人家都这么问,肯定不知道什么是AOCP
knuth的著作
【在 g*****g 的大作中提到】 : 估计都是质数,有兴趣可以去读AOCP : : 7951
|