murmurhash算法_自我介绍的方式

murmurhash算法_自我介绍的方式加密哈希和非加密哈希-MM是非加密哈希首先了解下加密哈希和非加密哈希,加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。Smhasher-评价哈希算法的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

加密哈希和非加密哈希-MM是非加密哈希

首先了解下加密哈希和非加密哈希,

加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。

非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。

Smhasher-评价哈希算法的函数

评价一个哈希算法的好坏,人们通常会引用 SMHasher 测试集的运行结果。
Smhasher 测试Hash函数的功能,测试包括以下几个方面:

  1. Sanity 是不是可以使用的
  2. Performance 完成一个散列需要多长时间
  3. Differentials 产生相同哈希的概率,可能导致相同的的最小差异
  4. Keysets 分布均匀程度
    一系列的测试方式具体可参考:https://github.com/aappleby/smhasher/wiki/SMHasher

MurmurHash

MurmurHash是一种经过广泛测试且速度很快的非加密哈希函数。它有Austin Appleby于2008年创建,并存在多种变体,名字来自两个基本运算,即multiply和rotate(尽管该算法实际上使用shift和xor而不是rotate)。

MurmurHash3可以产生32位或128位哈希,旧版本MurmurHash2产生32位或64位值,MurmurHash2A变体添加了Merkel-Damgard构造,以便可以逐步调用它。MurmurHash64A针对64位处理器进行了优化,针对32位处理器进行MurmurHash64B优化

MurmurHash2-160生成160位哈希,而MurmurHash1已过时,实现规范的实现是用C++实现的,但是有多种流行语言的有效移植,已被很多开源项目采用。

具有良好的分布性,适用于机器学习用例,例如特征哈希和随机投影,布隆过滤器中也有应用。
MurMurHash3 128 位版本的速度是 MD5 的十倍。MurMurHash3 生成 32 位哈希的用时比生成 128 位哈希的用时要长。原因在于生成 128 位哈希的实现受益于现代处理器的特性。32 位哈希值发生碰撞的可能性就比 128 位的要高得多,当数据量达到十万时,就很有可能发生碰撞。

MM通过了卡方检验和雪崩测试

Avalanche Test(雪崩测试)
这意味着输入的微小变化会导致输出发生显著变化,使其统计上看起来与随机变化没有差别。例如:MurmurHash3(“abd”,123)=454173339;MurmurHash3(“abe”,123)=4085872068

Chi-Squared Test(卡方检验)
均匀性:一般期望设计的哈希函数的哈希值均匀落入哈希空间。将哈希空间 n 等分, 得到 p个 哈希值, 那么平均落入每个哈希子空间的哈希值是 ?_0= p /n, 落入第 i个子空间的哈希值个数是?_? 。统计量 x^2表示?_?到均匀分布的偏离度。哈希函数均匀性可用卡方拟合优度检验来判断。

Murmur Hash3——实现

MurmurHash:名字由两个运算得来 “multiply” “rotate”。
算法的流程如下:
使用模拟退火算法求出了最合适的参数,“c1=0xcc9e2d51” “c2=0x1b873593” “m=0x5” “n=0xe6546b64” “Hash=seed”
在这里插入图片描述
假设MurmurHash3(“abcde”,123)
1.
abcd变成16进制并分别左移(留下e)
0x61→0x61000000 (左移24位)
0x62→0x00620000 (左移16位)
0x63→0x00006300 (左移8位)
0x64→0x00000064
2.
相加,赋值给k
K = 0x61626364
在这里插入图片描述
3.
对k,Hash进行操作。(初始哈希值是一个随机数)。
k=kc1
k=“rotate” k by 15
k=k
c2
Hash=Hash xor k

Hash=“rotate” k by 13
Hash=Hash*m+n
在这里插入图片描述
4.
处理tail(remaining bytes)
先左移后运算···
得到:Hash=Hash xor k
在这里插入图片描述
5.
Hash=Hash xor “block’s length”

Hash=Avalanche(Hash)

Output(Hash)
在这里插入图片描述

Murmur Hash3 or CityHash

CityHash是Google发布的字符串散列算法,和murmurhash一样,属于非加密型hash算法。CityHash算法的开发是受到MurmurHash的启发。优点是大部分步骤包含了至少两步独立的数学运算。缺点是代码较同类流行算法复杂。 Google 希望为速度而不是为了简单而优化,因此没有照顾较短输入的特例 。

使用

https://github.com/hajimes/mmh3
pip install murmurhash3

import mmh3
mmh3.hash(‘foo’) # 32-bit signed int
-156908512

mmh3.hash64(‘foo’) # two 64-bit signed ints (the 128-bit hash sliced in half)
(-2129773440516405919, 9128664383759220103)

mmh3.hash128(‘foo’) # 128-bit signed int
168394135621993849475852668931176482145

mmh3.hash_bytes(‘foo’) # 128-bit value as bytes
‘aE\xf5\x01W\x86q\xe2\x87}\xba+\xe4\x87\xaf~’

mmh3.hash(‘foo’, 42) # uses 42 for its seed
-1322301282

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183965.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Zigbee协议栈ZStack构架

    Zigbee协议栈ZStack构架协议栈版本信息:ZigBee2006\ZStack-1.4.3-1.2.11、ZStack协议栈构架  Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些应用层API,供用户调用。协议栈体系分层架构与协议栈代码文件夹对应表如下:   整个协议栈的构架,如图所示APP:应用层目录,这是用户创建各种不同工程的区域,在这个目录

    2022年5月8日
    54
  • USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]

    USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]有的时候,需要把电脑上的资料传到手机上或者把手机上的一些照片传到电脑上面,但是有时候想要传照片的时候会发现手机与电脑连接在一起的时候只显示出在充电,但是与电脑没有连接在一起,相信很多朋友们都会遇到这样的问题,首先要排除的是手机的数据线没有任何的问题,如果说手机的数据线没有问题的的话那就一定是驱动的问题而引发的,那么今天小编就教大家如果手机为什么连接不上电脑应该怎么办。第一步:如果已经确定了不是数据…

    2022年8月12日
    2
  • shl归纳推理测试题库_逻辑推理测试题及答案-shl逻辑推理测试题目及答案[通俗易懂]

    shl归纳推理测试题库_逻辑推理测试题及答案-shl逻辑推理测试题目及答案[通俗易懂]公务员考试行政能力逻辑推理测试题及答案一1.所有市场经济搞得好的国家都是因为法律秩序比较好。其实建立市场并不难,一旦放开,人们受利益的驱使,市场很快就能形成,但是,一个没有秩序的市场一旦形成,再来整治就非常困难了。所以()。A.市场调节是“无形的手”,市场自发地处于稳定、均衡的状态B.要建立市场经济体制,必须高度重视法制建设C.市场经济的优越之处就在于它能使人们受利益驱使,因而能调动人的积极性D…

    2022年9月8日
    0
  • 汇编语言指令大全(详细)「建议收藏」

    汇编语言指令大全(详细)「建议收藏」汇编语言指令大全8080汇编手册数据传输指令──────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。1。通用数据传送指令。MOV传送字或字节。MOVSX先符号扩展,再传送。MOVZX先零扩展,再传送。PUSH把字压入堆栈。POP把字弹出堆栈。PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次

    2022年4月19日
    47
  • UE-9260使用说明1

    UE-9260使用说明1

    2022年1月26日
    95
  • C++ map遍历(简单易记忆)[通俗易懂]

    C++ map遍历(简单易记忆)[通俗易懂]C++中map遍历有两种方法:第一种,使用迭代器,while循环#include<iostream>#include<map>usingnamespacestd;intmain(){ map<int,int>p; p[0]=1; p[1]=2; p[3]=4; map<int,int>::iteratori…

    2022年9月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号