字符串哈希为 Long 型整数算法有推荐的吗

2020-06-30 18:35:45 +08:00
 yanshenxian

用来标记一个字符串, 可以忍受一定的碰撞概率

3321 次点击
所在节点    程序员
33 条回复
yanshenxian
2020-06-30 19:40:31 +08:00
@msg7086 是有这个顾虑,之所以这么做还是考虑实现的简易程度,而且这些数据都是一次写入,读>>>写, 感觉也还行
msg7086
2020-06-30 19:45:38 +08:00
@yanshenxian 我想问的是为什么不直接按顺序写入表中呢?一定要 hash 成特殊的主键是有什么用途么?

(话说这个帖子实在是太 XY 问题了……
allenhu
2020-06-30 20:12:55 +08:00
你就是要把字符串变成整数吧,试试 crc32 ?
liuhan907
2020-06-30 23:34:42 +08:00
liuhan907
2020-06-30 23:35:56 +08:00
手机点快了,直接发出去了…试试 murmur3,自定义 seed,应该刚好解决
QingchuanZhang
2020-06-30 23:46:08 +08:00
@ipwx 溢出取模是 114514 年前就退出历史舞台的做法,无论你的 base 是什么 https://codeforces.com/blog/entry/60442
ysc3839
2020-07-01 00:46:51 +08:00
fnv hash?
xupefei
2020-07-01 01:21:27 +08:00
邪道玩法:aes256 加密后取若干位(前若干位和中间若干位均可)转成 long 。
这种邪道玩法的随机性有论文证明过,懒得找了。
ipwx
2020-07-01 09:35:51 +08:00
@QingchuanZhang 嘛嘛,毕竟 OI 要扣时间常量的。一般 OI 的题目不会去针对 hash 函数做针对性的攻击,所以 * 31, *131 这种简单而且只是“可以构造出攻击的例子”的方法在刷题的时候很好用,毕竟简单的 hash 函数快嘛。所以这就看楼主了,如果楼主的场景不需要那么强的防御攻击性,而且被哈希的字符串真的很随机(比如是序列化以后的神经网络参数),我觉得快一点更重要。
QingchuanZhang
2020-07-01 12:26:33 +08:00
@ipwx 现在良心出题人默认卡自然溢出 hash 了,不卡说明不太负责
QingchuanZhang
2020-07-01 12:27:41 +08:00
@ipwx 再说一次“与底数无关,只要是溢出取模,任意底数都可被同一组数据 hack”
qwertyegg
2020-07-01 13:28:30 +08:00
lovewell
2020-11-19 18:12:33 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/686002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX