首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教hash值和数组下标对应的有关问题

2013-09-28 
求教hash值和数组下标对应的问题上班闲逛,在网上看到关于hash算法的东西,如下:对于32位整数值,hash算法为:

求教hash值和数组下标对应的问题
上班闲逛,在网上看到关于hash算法的东西,如下:
对于32位整数值,hash算法为:index = value * 2654435769 >> 28;
有如下value值和数组位置对应关系:
本地传图片半天都没传上去,我就手写吧,大家将就着看:
数组位置     value值(链表)
0           
1          26
2          31 353 387 
3          91
4          28 337
5
6          12
7          
8          140 496
9          1   111
10
11
12
13
14
15
[解决办法]
假设这个数组,可以放下97个元素,

那么我们只放 30个
int a[97];
int hash(int val){...return ...;};
a[hash(n)]= n;
这样,数值和表就建立了联系;

哈希算法可以确保哈希值在数组容量之内。
如果是空表,直接赋值就行。
否则要检查,是否有冲突,有冲突要处理哈希值的冲突。

[解决办法]

#include <stdio.h>
int d[12]={26,31,353,387,91,28,337,12,140,496,1,111};
int i;
int main() {
    for (i=0;i<12;i++) {
        printf("%3d %I64d\n",d[i],(((unsigned __int64)d[i] * 2654435769ui64) & 0xFFFFFFFFui64) >> 28);
    }
    return 0;
}
// 26 1
// 31 2
//353 2
//387 2
// 91 3
// 28 4
//337 4
// 12 6
//140 8
//496 8
//  1 9
//111 9
//

热点排行