谷歌的变种murmurHash算法

谷歌的变种murmurHash算法谷歌变种murmurHash的编写与测试#include#include#include#include#include#include#includeusingnamespacestd;boolCheckLittleEndin();uint32

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

Jetbrains全系列IDE稳定放心使用

谷歌变种murmurHash的编写与测试

#include<iostream>
#include<stdint.h>
#include<cstring>
#include<time.h>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
bool CheckLittleEndin();
uint32_t DecodeFixed32(const char* data);
uint32_t Hash(const char* data,int size,int seed);
int main(){
  const char* data="assdascxasasdz" ;
  vector<uint32_t> data_;
  vector<uint32_t>::iterator iter;
  vector<uint32_t>::iterator temp;
  int size = strlen(data);
  clock_t start = clock();
  for(int i = 1 ;i<1000000; i++){
    data_.push_back(Hash(data,size,i));
  }
  sort(data_.begin(),data_.end());
  for(iter = data_.begin();iter!=data_.end();iter++){
    cout<<*iter<<endl;

}
  temp = unique(data_.begin(),data_.end());
  cout<<"the last is"<<*(--temp);
  clock_t end = clock();
  cout<<endl;
  cout<<double(end-start)<<"ms";
  return 0;
}
bool CheckLittleEndin(){
  int test = 1;
  int temp = (unsigned char) test;

  if(test) return true;
  else return false;

}
uint32_t DecodeFixed32(const char* data){
  int result;
  if(CheckLittleEndin()){
    memcpy(&result,data,sizeof(result));
  }
  else{
    return ((static_cast<uint32_t>(static_cast<unsigned char>(data[0])))
         | (static_cast<uint32_t>(static_cast<unsigned char>(data[1])) << 8)
         | (static_cast<uint32_t>(static_cast<unsigned char>(data[2])) << 16)
         | (static_cast<uint32_t>(static_cast<unsigned char>(data[3])) << 24));
  }
}
//32bit
uint32_t Hash(const char* data, int size ,int seed){
  const uint32_t r = 24;
  const int m = 0xc6a4a793;
  const char* limit = data + size;

  uint32_t h = seed^(size*m);

  while(data+4<limit){

    uint32_t w = DecodeFixed32(data);
    data = data+4;

    h += w;  //循环操作;
    h *= m;
    h ^= (h >> 16);

  }
  switch (limit - data) {
    case 3:
      h += static_cast<unsigned char>(data[2]) << 16;
      break;
    case 2:
      h += static_cast<unsigned char>(data[1]) << 8;
      break;
    case 1:
      h += static_cast<unsigned char>(data[0]);
      h *= m;
      h ^= (h >> r);  //仅剩余一字节;
      break;
  }
  return h;
}


//你可以修改参数自己测试下,散列性与且计算很高效!

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

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

(0)
上一篇 2022年10月19日 上午6:00
下一篇 2022年10月19日 上午6:00


相关推荐

  • Qt调用谷歌翻译API

    Qt调用谷歌翻译API原理 模拟 Google 翻译网页请求 ps 频繁调用会封 IP 哦 QStringGoogl translateTex QStringtext QStringsourc QStringtarge QStringretSt QStringfinal m path client m client amp sl sourceLang amp tl targetLang amp dt t amp q

    2026年3月18日
    3
  • 安装PyTorch(pytorch官网下载教程)

    安装PyTorch过程安装anaconda环境管理PyTorch安装检验安装安装anaconda登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网点击下载跳转到这个页面如果你的Python版本正好是3.8版,那便可以直接根据系统去选择自己相应的下载版本就可以了。但是如果你的Python版本号不是当前页面的版本号,那我建议你去选择相对应的版本号。点击archive你就会跳转到下面的页面你可以访问这篇博客去找到当前与你python版本号相对

    2022年4月15日
    54
  • php四舍五入代码,PHP四舍五入函数代码详解

    php四舍五入代码,PHP四舍五入函数代码详解本篇文章主要给大家介绍 PHP 四舍五入的相关函数使用方法 即 intval 函数 round 函数 ceil 函数 floor 函数 希望对需要的朋友有所帮助 一 intval 函数代码示例

    2026年3月16日
    3
  • 设计原则之里氏替换原则详解

    设计原则之里氏替换原则详解一 里氏替换原则定义定义 如果对每一个类型为 T1 的对象 O1 都有类型为 T2 的对象 O2 使得所有以 T1 定义的所有程序 P 在所有的对象 O1 都替换成 O2 时 程序 P 的行为没有发生任何变化 那么类型 T2 是类型 T1 的子类型 通俗理解就是 子类可以扩展父类的功能 但不能改变父类原有的功能 有以下几个引申含义 子类可以实现父类的抽象方法 但不能覆盖父类的非抽象方法 子类中可以增加自己特有的方法 当子类的方法重载父类的方法时 方法的前置条件 方法的输入 入参 要比父类的入参更宽松 当子类的方法实现父类的方法时

    2026年3月18日
    2
  • 国内如何稳定使用 Claude API?开发者实战指南(附完整接入教程)

    国内如何稳定使用 Claude API?开发者实战指南(附完整接入教程)

    2026年3月16日
    2
  • visio2019安装教程

    visio2019安装教程安装前先关闭杀毒软件和 360 卫士 注意安装路径不能有中文 安装包路径也不要有中文 1 选中 Visio2019 压缩包 鼠标右击选择 解压到 Visio2019 2 双击打开 Visio2019 文件夹 3 双击打开 VisioPro2019 镜像文件 4 选中 Setup 可执行文件 鼠标右击选择 以管理员身份运行 5 安装程序准备中 6 安装中 7 鼠标点住 Visio 图标往桌面拖动即可创建桌面快捷方式 8 返回解压文件夹选中 microKMS 可执行文件

    2026年3月19日
    3

发表回复

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

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