+ -
当前位置:首页 → 问答吧 → 有没有一个高质量的hash string->int的算法

有没有一个高质量的hash string->int的算法

时间:2010-07-09

来源:互联网

求之

作者: shang2010   发布时间: 2010-07-09

是否高质量跟具体使用场景有关系

作者: hellioncu   发布时间: 2010-07-09

libstdc++自带的不能满足你吗,又或你要的是C的?

作者: 没本   发布时间: 2010-07-09

本帖最后由 peidright 于 2010-07-09 17:43 编辑

具体情况把。。
我一直觉得,不应该对过长的字符串做hash, 如果字符串超过4k,不如直接 md5取得了。。
或者,对于过长的字符串, 直接取前面16个字符做hash,就行了。。。,当然,这对path是不行的,。
那么,有的应用,直接从后面取16个字符,我觉得也可以了。

作者: peidright   发布时间: 2010-07-09



QUOTE:
具体情况把。。
我一直觉得,不应该对过长的字符串做hash, 如果字符串超过4k,不如直接 md5取得了。。
或 ...
peidright 发表于 2010-07-09 17:41



对于4K的字符串,异或移位之类的操作时间比md5慢?

作者: mirnshi   发布时间: 2010-07-09

本帖最后由 没本 于 2010-07-09 17:49 编辑

简单hash快啊,再说如果碰撞了再比较字符串也来得及,怕什么。反正数据量不大的话十年难遇一碰。

作者: 没本   发布时间: 2010-07-09

如果数据量不大,又何必用hash呢

作者: cookis   发布时间: 2010-07-09

回复 mirnshi


    搞4k的字符串,去作哈西,我觉得设计是有问题的, 做md5,有校验的作用。比如对文件数据块做校验。 当然,一般也不用md5..

作者: peidright   发布时间: 2010-07-09

回复 cookis


    单个数据量太大, 单纯的哈西目的,有点不划算。  为了排除冲突, 还需要 进行 大数据量的内存比较。 所以先做md5, 或者sha1,再对md5值做hash,感觉比较理想。 特别是md5可以存储复用的情况下,

作者: peidright   发布时间: 2010-07-09

推荐你去看一下http://www.byvoid.com/blog/string-hash-compare/
有很多种哈希函数

作者: ling0088   发布时间: 2010-07-09



QUOTE:
求之
shang2010 发表于 2010-07-09 17:19




    crc32,ssh_crc32

作者: yulihua49   发布时间: 2010-07-09

thank you, all above

作者: shang2010   发布时间: 2010-07-09