当前位置:  开发笔记 > 编程语言 > 正文

C的最小哈希函数?

如何解决《C的最小哈希函数?》经验,为你挑选了4个好方法。

我不能使用boost:hash因为我必须坚持使用C而不能使用C++.

但是,我需要散列大量(10K到100k)的令牌字符串(长度为5到40个字节),以便在这些字符串中搜索最快.

MD5,SHA1或任何长哈希函数对于一个简单的任务来说似乎太重了,我没有做加密.此外还有存储和计算成本.

因此我的问题是:

    什么是最简单的哈希算法,可以确保在大多数实际情况下防止碰撞.

    哈希值要使用多少位?我正在为32位系统开发.Perl/Python中的哈希算法是否也使用32位哈希?或者我必须跳到64?

    关于常见脚本语言中哈希表的实现:实现是否检查冲突,还是可以完全避免该部分?

gnud.. 23

你可以找到一个好的(和快速的)哈希函数,以及一个有趣的读取 http://www.azillionmonkeys.com/qed/hash.html

唯一一次你不应该检查碰撞,如果你使用一个完美的哈希 - 一个很好的旧式查找表,如gperf.



1> gnud..:

你可以找到一个好的(和快速的)哈希函数,以及一个有趣的读取 http://www.azillionmonkeys.com/qed/hash.html

唯一一次你不应该检查碰撞,如果你使用一个完美的哈希 - 一个很好的旧式查找表,如gperf.


我建议看看Hsieh的分析错过的一个:MurmurHash2.http://en.wikipedia.org/wiki/MurmurHash

2> arul..:

    以下是最着名的已知哈希函数的概述.

    32位应该可以正常工作.

    你总是需要检查碰撞,除非你想写一个有趣的哈希表:)


那么,这种非确定性的行为就是我所谓的"有趣".

3> TStamper..:

哈希表查找的一般哈希函数.它指定不要用于加密目的,但既然你指定你没有意图,那么你应该没问题.

这是包括散列函数的调查尝试



4> amo-ej1..:

如果你使用类似posix的系统并且坚持使用普通的C语言,我只会使用系统已经提供的功能.man 3 hcreate为您提供所有详细信息,或者您可以在这里找到在线版本http://linux.die.net/man/3/hcreate

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有