Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1435271
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: LINUX

2015-04-07 22:26:14

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型数字

点击(此处)折叠或打开

  1. int uiCalHash(void* key, int uiLen)
  2. {
  3.     int *data = (int*)key;
  4.     int uiHashIndex = 0;
  5.     int num = uiLen / 4;
  6.     int i;
  7.     if ((key != NULL) && (uiLen > 0) )
  8.     {
  9.         for (i = 0; i < num; ++i)
  10.         {
  11.             uiHashIndex += *(data + i);
  12.         }
  13.     }
  14.     return uiHashIndex;
  15. }

4.思考
上述这种计算hash index的方法是否合理,冲突是不是很多,性能很差,后面需要测试一下冲突的概率。
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~