Key Word: 二进制数的key、index、Hash算法。
1.应用场景
会有一些情况,我们的key不是常见的字符串,而是数字,但是也全是简单的数字,而是使用结构体定义的数字组合,这种情况下我们应该如何设计hash算法呢?
2.分析
如果直接是int型或是可以直接用int表示的数字则可以直接key%size就可以实现。
例如,key为int key;或是key为
struct key{
short high;
short low;
};
可以通过转换(key.high <<16) | key.low就转换为int型表示。
但是如果是
struct key{
int a;
int b;
int c;
.....
};
这种的情况下如何处理呢?
3.参考思路
(1)将key当作是int型数组累加起来,将key转为int型数字
-
int uiCalHash(void* key, int uiLen)
-
{
-
int *data = (int*)key;
-
int uiHashIndex = 0;
-
int num = uiLen / 4;
-
int i;
-
if ((key != NULL) && (uiLen > 0) )
-
{
-
for (i = 0; i < num; ++i)
-
{
-
uiHashIndex += *(data + i);
-
}
-
}
-
return uiHashIndex;
-
}
4.思考
上述这种计算hash index的方法是否合理,冲突是不是很多,性能很差,后面需要测试一下冲突的概率。
阅读(1143) | 评论(0) | 转发(0) |