`

murmurhash

 
阅读更多

转自:http://www.trueeyu.com/?p=1325

 

 MurmurHash是一种非加密型哈希函数,由Austin Appleby在2008年发明,并且有多个变种。
    特点:对于规律性较强的key,MurmurHash的随机分布特性表现更良好。

    MurmurHash1是第一个版本,速度比Bob Jenkins'的lookup3,但不是非常robust.
    MurmurHash2速度更快并且robust,被应用于Google,Yahoo,Microsoft的很多公司的代码中
    MurmurHash3是最新的版本,开发这个版本的原因是因为第二版有一些小缺陷,MurmurHash3速度比MurmurHash2速度快一点,并且有128-bit的版本,这对于为大数据块的生成identifier是很有用的。

    MurmurHash1的mix function
    h += k;
    h *= m;
    h ^= h >> r;
    k是block的key,h是32-bit hash值,m,k是常数

    MurmurHash2的mix function
    k *= m;
    k ^=k >> r;
    k *= m;
    h *= m;
    h ^= k;
    k是block的key,h是32-bit hash值,m,k是常数

    MurmurHash3的mix function
    k *= c1;
    k = rot1(k, r1)
    k *= c2;
    h ^= k;
    h = rot1(h, r1)
    h = h * m1 + n1;

    详细的hash算法说明,源码链接:http://code.google.com/p/smhasher/wiki/MurmurHash

一.各处版本函数的的详细说明:

版本1:

1.uint32_t MurmurHash1 (const void* key, int len, uint32_t seed)
–生成32位的hash值
–不支持incremental

2.unsigned int MurmurHash1Aligned (const void* key, int len, uisigned int seed)
–生成32位的hash值
–不支持incremental
–只作对齐读


版本2:

3.uint32_t MurmurHash2(const void* key, int len, uint32_t seed)
–生成32位的hash值
–不支持incremental

4.uint64_t MurmurHash64A(const void* key, int len, uint64_t seed)
–生成64位的hash值
–为64位平台设计
–不支持incremental

5.uint64_t MurmurHash64B(const void* key, int len, uint64_t seed)
–生成64位的hash值
–为32位平台设计
–不支持incremental

6.uint32_t MurmurHash2A(const void* key, int len, uint32_t seed)
–使用Merkle-Damgard construction
–对于small key,由于在hash结尾有添加值,所以速度比murmurhash速度慢10%-20%

7.uint32_t MurmurHashNeutral2(const void* key, int len, uint32_t seed)
–算法同MurmurHash2相同,但是endian- and alignment-neutral(兼容不同的字节序和对齐方式)
–速度是MurmrHash2的一半

8.uint32_t MurmurHashAligned2(const void* key, int len, uint32_t seed)
–算法同MurmurHash2相同
–只进行对齐的读
–速度比MurmurHash2慢

版本3

9.void MurmurHash3_x86_32(const void* key, int len, uint32_t seed, void* out)
–生成32位的hash值
–为32位平台设计

10.void MurmurHash3_x86_128(const void* key, const int len, uint32_t seed, void* out)
–生成128位的hash值
–为32位平台设计

11.void MurmurHash3_x64_128(const void* key, const int len, const uint32_t seed, void* out)
–生成128位的hash值
–为64位平台设计

分享到:
评论

相关推荐

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

    MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...

    MurmurHash64B c#版

    这是MurmurHash算法,由c++改成c#版本。使用它在生500万内生成64位的数字,也是会出现碰撞的。在实际开发转,可能需要将不定长的数符中转生数字,想转生64位唯一数字的话。可以用md5算法生成16位的字节,再用Murmur...

    Python库 | murmurhash2-0.2.0-cp37-none-win_amd64.whl

    **Python库 murmurhash2-0.2.0-cp37-none-win_amd64.whl** 在Python编程环境中,库是实现特定功能的模块集合,它们极大地扩展了Python的功能,使得开发者能够轻松处理各种任务。`murmurhash2-0.2.0-cp37-none-win_...

    murmurhash-js, MurmurHash算法的优化JavaScript实现.zip

    murmurhash-js, MurmurHash算法的优化JavaScript实现 MurmurHash.jsMurmurHash算法的优化JavaScript实现。这些算法采用一个JavaScript字符串( 还有种子),并快速创建一个非加密的32位 散列。 我的意思是亚毫秒性能。...

    前端项目-murmurhash3js.zip

    **前端项目 - MurmurHash3js** MurmurHash3 是一种非加密型哈希函数,设计用于快速、高效地对大量数据进行哈希运算。它由Austin Appleby开发,并在2008年首次发布。这个哈希函数在各种编程语言中都有实现,包括...

    前端开源库-murmurhash3js-revisited

    **前端开源库-murmurhash3js-revisited**是一个JavaScript实现的开源库,它专注于提供与C语言参考实现相匹配的MurmurHash3算法。MurmurHash3是一种广泛使用的非加密哈希函数,设计时考虑了性能和低碰撞率,使其特别...

    murmurHash3.js, 在javascript中,所有 MurmurHash3,.zip

    murmurHash3.js, 在javascript中,所有 MurmurHash3, MurmurHash3.jsMurmurHash3 算法的javascript实现。 用法// Return a 32bit hash as a unsigned int:> murmurHash3.x86.h

    murmurHash3.js:JavaScript中的MurmurHash3

    MurmurHash3.js-JavaScript中的 。 用法 > const murmurHash3 = require ( 'murmurhash3.js' ) ; // Return a 32bit hash as an unsigned integer: > murmurHash3 . x86 . hash32 ( "I will not buy this record, it...

    Python库 | murmurhash-0.26.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:murmurhash-0.26.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    murmurhash-1.0.2-cp27-cp27m-win_amd64

    murmurhash-1.0.2-cp27-cp27m-win_amd64

    murmurhash-1.0.5-cp310-cp310-win32

    murmurhash-1.0.5-cp310-cp310-win32

    murmurhash-1.0.5-cp37-cp37m-win_amd64

    murmurhash-1.0.5-cp37-cp37m-win_amd64

    Python库 | murmurhash-1.0.6-cp36-cp36m-macosx_10_9_x86_64.whl

    python库,解压后可用。 资源全名:murmurhash-1.0.6-cp36-cp36m-macosx_10_9_x86_64.whl

    murmurhash.c:MurmurHash3通用hash bashed查找函数实现

    MurmurHash3通用hash bashed查找函数实现 关于 是一种非加密哈希函数,适用于一般的基于哈希的查找。 此实现实现了 MurmurHash 的第 3 版。 安装 : $ clib install jwerle/murmurhash.c 来源: $ git clone git@...

    Python库 | murmurhash-0.26.2-cp35-none-win_amd64.whl

    python库,解压后可用。 资源全名:murmurhash-0.26.2-cp35-none-win_amd64.whl

    murmurhash-php:MurmurHash3PHP用户区实现

    由Gary Court创建的MurmurHash3 JavaScript版本的移植( ) 安装 使用: composer require lastguest/murmurhash 用法 您可以通过Murmur类的hash3静态方法检索哈希 <?php use lastguest\ Murmur ; echo Murmur :...

    murmurhash-java:murmurhash2的32位和64位实现

    murmurhash-java 这是Viliam Holub对快速非加密murmurhash2算法的一种实现。 它用Java编写,并以32位和64位版本实现。 如果您想了解最新的杂音世界,请查看Guava的类,该类具有murmur3和32位的实现。建造用maven构建...

    MurMurHash3:MurMurHash3算法的纯C#实现

    ** MurMurHash3 算法概述 ** MurMurHash3 是一种非加密哈希函数,由 Austin Appleby 开发,被广泛应用于数据结构和分布式系统中,如 Hadoop、Redis 和其他数据库系统。它的主要特点是计算速度快且哈希冲突的概率...

Global site tag (gtag.js) - Google Analytics