zoukankan      html  css  js  c++  java
  • MurmurHash

    高运算性能,低碰撞率的hash算法

    redis已经使用了。spring导入redis有这个类,可以体验一下package redis.clients.util;

    引用redis后直接可以使用

    import redis.clients.util.MurmurHash;

    MurmurHash hash = new MurmurHash();

    整体感觉类似揉面团

    切了很多面剂子,擀成面饼子,摞一起压实之后,继续和面。

    如果整个面团揉成长条形时,不同位置的颜色不同,那么可能,切成面剂子,擀成面饼子,摞一起压实之后,继续和面,颜色已经很均匀了。

    细节是4个字节一个剂子,一个初始变量0x5bd1e995和剂子混合,和吧和吧,再把下一个剂子加进来重复这个步骤直到所有剂子都和进去。

        while (buf.remaining() >= 4) {
          k = buf.getInt();

          k *= m;
          k ^= k >>> r;
          k *= m;

          h *= m;
          h ^= k;
        }

    源码这里,就是和面的地方。每个剂子加进来之后的和面过程。

    理解起来差不多,只是和面实际情况是和面过程中加入面剂子会把面团越和越大,而计算hash一直没有改变数据的存储空间,

    多余的不需要的在右移24位k >>> r时已经被舍弃。没有导致最后的数据越来越大。

    如果类比一下,可以在面剂子加进来之后找个固定大小的模具把面团某些部分塞进去,其他剩余的扔了。就和murmurhash的操作差不多了。

    最后的结果,依旧是,天知道,鬼知道,反正我不知道

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/klarck/p/13584674.html
Copyright © 2011-2022 走看看