免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3344 | 回复: 8
打印 上一主题 下一主题

[算法] 求基于char [32]的哈希函数int hash() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-19 18:32 |只看该作者 |倒序浏览
(1) 求出来的数是 >= 0
(2) 求出来的数有最大值
(3) 没有冲突

论坛徽章:
0
2 [报告]
发表于 2008-02-19 18:36 |只看该作者
如果char [32]里面的内容没有特殊性,3)基本上不可能做到吧。
1), 2)很简单。

论坛徽章:
0
3 [报告]
发表于 2008-02-19 19:05 |只看该作者
没有冲突,基本不可能。

论坛徽章:
0
4 [报告]
发表于 2008-02-19 19:26 |只看该作者
基于char [32]的 hash函数 是什么意思啊?  我理解不上去啊

论坛徽章:
0
5 [报告]
发表于 2008-02-19 19:29 |只看该作者
原帖由 暗底 于 2008-2-19 19:26 发表
基于char [32]的 hash函数 是什么意思啊?  我理解不上去啊

我的理解是产生的hash值是32个字节的。

论坛徽章:
0
6 [报告]
发表于 2008-02-19 19:59 |只看该作者
不好意思,没有说清楚。
意思是, 该hash函数的传入参数是一个含有32个字符的数组,

该hash就是把该数组通过某种方式转换成随机数,要求就是

(1)  随机数大于0
(2)  随机数的最大值越小越好
(3)  尽量没有冲突

论坛徽章:
0
7 [报告]
发表于 2008-02-19 20:00 |只看该作者
谁以前有现成的例子是最好的,多谢各位

论坛徽章:
0
8 [报告]
发表于 2008-02-19 20:20 |只看该作者
原帖由 unixpm 于 2008-2-19 20:00 发表
谁以前有现成的例子是最好的,多谢各位

搜一下字符串哈希。
mysql中好像有现成的哈希函数。

论坛徽章:
0
9 [报告]
发表于 2008-02-20 12:05 |只看该作者
int hash(const char* ptr, int ptr_len = 32)
{
    int sum = 0;
    int len = ptr_len;
    while(*ptr != '\0') {
        sum += (*ptr++)*(len--);
    }
    return sum;
}
试试

[ 本帖最后由 yjm0573 于 2008-2-20 12:11 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP