都说 v 站大神多,求一个简单数字 hash 算法, num1,num2 经算法=唯一的值

2019-05-27 21:38:01 +08:00
 xiaogan18

原先使用的 sha256 hash 算法,得到的 hash 值长度太大了,而且 CPU 运算耗费大。 设 num1 和 num2 都是 uint64 类型,得到一个[]byte num3,任意 num1,num2 不一致,都会导致 num3 不一致。

3277 次点击
所在节点    算法
10 条回复
xiaogan18
2019-05-27 21:38:53 +08:00
老板说,做不出来就滚蛋😿
yidinghe
2019-05-27 21:52:13 +08:00
这还不简单,拼起来就是,绝对唯一
yidinghe
2019-05-27 21:55:59 +08:00
uint64 就是 8 个字节,两个 uint64 拼起来就是 16 字节,128 位比 256 位短,如果嫌直接拼太简单,那就跟洗牌样的一位一位交替拼起来,也蛮好看的。
blless
2019-05-27 22:00:04 +08:00
讲真没看懂楼主说的啥
blless
2019-05-27 22:00:37 +08:00
问 hash 问题好像连 hash 常识都不懂
wwg1994
2019-05-28 09:30:16 +08:00
@yidinghe 1,23 ; 12,3
xiaogan18
2019-05-28 10:23:15 +08:00
我有一棵由 100w 数字做叶子组成的树,每 2 个子节点的值算出父节点的值,现在是这棵树占用内存太大,一部分就占用在 hash 值上。可以看做是一个简单的 merkel 树
xiaogan18
2019-05-28 10:25:26 +08:00
@blless 我的意思是,替换掉现有的 hash 算法,不适用 hash 值保持,而是看看有没有数学方面的手段得到一个数字
zjyl1994
2019-05-28 10:40:19 +08:00
fnv1a 你看看符合要求么?
ladit
2019-05-28 13:12:00 +08:00
我前段时间也遇到一样的问题,发现只要 num1 和 num2 是定长的就可以用简单的 f(num1, num2) = sort(num1, num2),不方便定长的话可以考虑转二进制后再拼接,不知道能不能符合要求。

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

https://www.v2ex.com/t/568167

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

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

© 2021 V2EX