V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaogan18
V2EX  ›  算法

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

  •  
  •   xiaogan18 · 2019-05-27 21:38:01 +08:00 · 3461 次点击
    这是一个创建于 2037 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 条回复    2019-05-28 13:12:00 +08:00
    xiaogan18
        1
    xiaogan18  
    OP
       2019-05-27 21:38:53 +08:00
    老板说,做不出来就滚蛋😿
    yidinghe
        2
    yidinghe  
       2019-05-27 21:52:13 +08:00 via Android   ❤️ 2
    这还不简单,拼起来就是,绝对唯一
    yidinghe
        3
    yidinghe  
       2019-05-27 21:55:59 +08:00 via Android   ❤️ 1
    uint64 就是 8 个字节,两个 uint64 拼起来就是 16 字节,128 位比 256 位短,如果嫌直接拼太简单,那就跟洗牌样的一位一位交替拼起来,也蛮好看的。
    blless
        4
    blless  
       2019-05-27 22:00:04 +08:00 via Android
    讲真没看懂楼主说的啥
    blless
        5
    blless  
       2019-05-27 22:00:37 +08:00 via Android
    问 hash 问题好像连 hash 常识都不懂
    wwg1994
        6
    wwg1994  
       2019-05-28 09:30:16 +08:00
    @yidinghe 1,23 ; 12,3
    xiaogan18
        7
    xiaogan18  
    OP
       2019-05-28 10:23:15 +08:00
    我有一棵由 100w 数字做叶子组成的树,每 2 个子节点的值算出父节点的值,现在是这棵树占用内存太大,一部分就占用在 hash 值上。可以看做是一个简单的 merkel 树
    xiaogan18
        8
    xiaogan18  
    OP
       2019-05-28 10:25:26 +08:00
    @blless 我的意思是,替换掉现有的 hash 算法,不适用 hash 值保持,而是看看有没有数学方面的手段得到一个数字
    zjyl1994
        9
    zjyl1994  
       2019-05-28 10:40:19 +08:00
    fnv1a 你看看符合要求么?
    ladit
        10
    ladit  
       2019-05-28 13:12:00 +08:00 via iPhone
    我前段时间也遇到一样的问题,发现只要 num1 和 num2 是定长的就可以用简单的 f(num1, num2) = sort(num1, num2),不方便定长的话可以考虑转二进制后再拼接,不知道能不能符合要求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:42 · PVG 01:42 · LAX 09:42 · JFK 12:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.