返回顶部
首页 > 资讯 > 后端开发 > Python >MurmurHash Tips
  • 681
分享到

MurmurHash Tips

MurmurHashTips 2023-01-31 08:01:16 681人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

简介 MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。 家族成员 MurmurHash1, MurmurHash2

简介

MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。

家族成员

MurmurHash1, MurmurHash2, MurmurHash3

计算 mmh3 十六进制字符串

python3

>>> import binascii
>>> import mmh3
>>> binascii.b2a_hex(mmh3.hash_bytes('CN305183362S')).decode('utf8')
'a4fb17cba6d455e4812ad28989780cbc'    # 32个字符,128 bit
>>> hex(mmh3.hash128('CN305183362S'))
'0xbc0c788989d22a81e455d4a6cb17fba4'

Java

  • 借用 BigInteger
import java.math.BigInteger;
import org.apache.commons.codec.digest.MurmurHash3;
import org.apache.commons.lang.ArrayUtils;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = MurmurHash3.hash128(origin, 0, origin.length, 0);
        // 将 long 转换为 BigInteger
        BigInteger bigInteger0 = BigInteger.valueOf(vec[0]);
        BigInteger bigInteger1 = BigInteger.valueOf(vec[1]);
        // 将 BigInteger 转换为 byte[]
        byte[] array0 = bigInteger0.toByteArray();
        byte[] array1 = bigInteger1.toByteArray();
        // 反转 byte[](大小端转换)
        ArrayUtils.reverse(array0);
        ArrayUtils.reverse(array1);
        // 将 byte[] 转换为无符号整数,并转为十六进制字符串
        String part0 = (new BigInteger(1, array0)).toString(16);
        String part1 = (new BigInteger(1, array1)).toString(16);
        System.out.println(part0 + part1); // a4fb17cba6d455e4812ad28989780cbc
    }
}
  • 借用 ByteBuffer(好文推荐:Java 中 byte、byte 数组和 int、long 之间的转换)
import java.NIO.ByteBuffer;
import org.apache.commons.codec.digest.MurmurHash3;
import org.apache.commons.lang.ArrayUtils;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = MurmurHash3.hash128(origin, 0, origin.length, 0);
        ByteBuffer buf0 = ByteBuffer.allocate(8); 
        ByteBuffer buf1 = ByteBuffer.allocate(8);         
        buf0.putLong(0, vec[0]);
        buf1.putLong(0, vec[1]);        
        byte[] array0 = buf0.putLong(0, vec[0]).array();
        byte[] array1 = buf1.putLong(0, vec[1]).array();        
        ArrayUtils.reverse(array0);    // 反转 byte[](大小端转换)
        ArrayUtils.reverse(array1);    // 反转 byte[](大小端转换)
        buf0.put(array0, 0, array0.length).flip();
        buf1.put(array1, 0, array1.length).flip();        
        String part0 = String.fORMat("%x", buf0.getLong());
        String part1 = String.format("%x", buf1.getLong());
        System.out.println(part0 + part1);    // a4fb17cba6d455e4812ad28989780cbc
    }
}
  • 浅显易懂版,不用处理字节
import org.apache.commons.codec.digest.MurmurHash3;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = MurmurHash3.hash128(origin, 0, origin.length, 0);
        String part0 = String.format("%x", vec[0]);
        String part1 = String.format("%x", vec[1]);
        String line = "";
        // 反转前半段(大小端转换)
        for (int i = 0; i < 8; ++i) {
            line += part0.substring(14 - 2 * i, 16 - 2 * i);
        }
        // 反转后半段(大小端转换)
        for (int i = 0; i < 8; ++i) {
            line += part1.substring(14 - 2 * i, 16 - 2 * i);
        }
        System.out.println(line);    // a4fb17cba6d455e4812ad28989780cbc
    }
}

node.js

  • MurmurHash3js
  • 在线测试: Http://murmurhash.shorelabs.com/
var murmurHash3 = require("murmurhash3js");
let line = murmurHash3.x64.hash128("CN305183362S");
console.log(line);        // e455d4a6cb17fba4bc0c788989d22a81
let newLine = "";
// 反转前半段(大小端转换)
for (let i = 0; i < 8; ++i) {
    newLine += line.slice(14-2*i, 16-2*i);
}
// 反转后半段(大小端转换)
for (let i = 0; i < 8; ++i) {
    newLine += line.slice(30-2*i, 32-2*i);
}
console.log(newLine);    // a4fb17cba6d455e4812ad28989780cbc
本文出处 walker snapshot

--结束END--

本文标题: MurmurHash Tips

本文链接: https://lsjlt.com/news/193004.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MurmurHash Tips
    简介 MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。 家族成员 MurmurHash1, MurmurHash2...
    99+
    2023-01-31
    MurmurHash Tips
  • Database Tips
    ACID和CAP的详尽比较 NoSQL(非关系型数据库)的四大类型数据库排名:DB-Engines Ranking在安装 32 位 access 的机器上安装 64 位的 access 驱动,会报...
    99+
    2024-04-02
  • MongoDB Tips
    1、将MongoDB服务器作为Windows服务运行。(菜鸟教程)mongod.exe --bind_ip yourIPadress --logpath "C:\da...
    99+
    2024-04-02
  • Python tips
    0、Python Enhancement Proposal。(PEP,Python增强建议书)0.1、Python中的注释。0.2、Python之禅。(import this)0.3、Python Cookbook 3rd Edition ...
    99+
    2023-01-31
    Python tips
  • Python3 logging tips
    官方文档:Logging HOWTO官方文档:logging.config 模块日志的等级(level)如下,只有大于等于配置的等级时,日志才会被记录。# 默认等级为 WARNING NOTSET < DEBUG < INFO ...
    99+
    2023-01-31
    logging tips
  • Windows Phone 7 Tips
    1. Windows Phone 7是一个多任务的操作系统,但是只允许唯一一个第三方应用程序在前台运行 2. 启动器和选择器为应用程序提供间接访问手机内置功能的方法。 一些内置的启动器:EmailComposeTask、Marketplac...
    99+
    2023-01-31
    Windows Phone Tips
  • TIPS FOR C++3
    [1]Define operators primarily to mimic conventional usage;[2]For large operands,use const reference argument types;[3]Fo...
    99+
    2023-01-31
    TIPS
  • DataGrip入门小tips
    1.连接数据库MySQL 接着取名,填写Host主机地址,端口,user账号,password密码,点击测试连接,信息无误即可成功,最后点击ok 2、展示所有数据库 连接上了MySQL服务之后,并未展示出所有的数据库,此时,我们需要设置...
    99+
    2023-09-09
    服务器 运维 mysql 数据库
  • Windows tips小技巧
    自从 Windows 2000 以及 Active Directory(Microsoft Windows 2000 操作系统的目录服务)面世以来,在与 Microsoft 合作伙伴交往的亲身经历中 ,我积累了许多这样的...
    99+
    2023-05-25
    Windows tips 技巧
  • Sql server注入一些tips
       sql server环境测试: 几个特性: 1.sql server兼容性可以说是最差的。 举例: select x from y where id=1 字符串查询 select x from y wh...
    99+
    2017-02-25
    Sql server注入一些tips 数据库入门 数据库基础教程 数据库 mysql
  • 怎么掌握PostgreSQL的tips
    这篇文章主要讲解了“怎么掌握PostgreSQL的tips”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么掌握PostgreSQL的tips”吧!下面是一...
    99+
    2024-04-02
  • FFMPEG Tips (3) 如何读取
    本文是我的《FFMPEG Tips》系列的第三篇文章,上篇文章 介绍了如何提取整个音视频码流的媒体信息,包括:封装格式、编码格式、视频的分辨率、帧率、码率、音频的采样率、位宽、通道数等等,而本文则关注得更细一点,看看如何利用 ffmpeg ...
    99+
    2023-01-31
    FFMPEG Tips
  • CSS中的tips实例分析
    今天小编给大家分享一下CSS中的tips实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • Python环境安装配置tips
    Add Python to Path 自动添加 python 路径到环境变量(path) 安装 python 的时候,建议勾选 Add Python ${ver} to Path 选项 勾选后,安装完 python 后,不用再去手动...
    99+
    2023-09-17
    python 开发语言
  • Golang 标准库 tips之waitgroup详解
    WaitGroup 用于线程同步,很多场景下为了提高并发需要开多个协程执行,但是又需要等待多个协程的结果都返回的情况下才进行后续逻辑处理,这种情况下可以通过 WaitGroup 提供...
    99+
    2024-04-02
  • 101个MySQL的调节和优化的Tips
    MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通...
    99+
    2024-04-02
  • 新鲜出炉的js tips提示效果
    兼容性已经测过:IE6\IE7\IE8\FF3\CHROME10 复制代码 代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
    99+
    2022-11-21
    tips 提示效果
  • 总结分享10个JavaScript代码优化小tips
    目录写在前面慎用全局变量通过原型新增方法避免闭包中的内存泄露避免使用属性访问方法for循环优化选择最优的循环方式减少判断层级减少作用域链查找层级减少数据读取次数字面量与构造式写在前面...
    99+
    2024-04-02
  • Python+pandas编写命令行脚本操作excel的tips详情
    目录一、python logging日志模块简单封装二、pandas编写命令行脚本操作excel的小tips1、tips1.1使用说明格式1.2接收操作目录方法1.3检测并读取目录下...
    99+
    2024-04-02
  • 分享下好用的视频加密软件挑选小Tips
    对于使用者来说如何选到好用的视频加密软件,是一件很费精力的事情。比如去bai度浏览器搜索“好用的视频加密软件”,会出来23,000,000个结果,从这些海量信息中筛选出有用的,在做测测试,也是需要消耗不少的精力和时间,也不现实。那有什么方法...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作