谷歌的变种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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 注会综合记忆锦囊:手绘PEST模型,记忆可以这样玩「建议收藏」

    注会综合记忆锦囊:手绘PEST模型,记忆可以这样玩「建议收藏」【】综合的记忆量非常庞大,且看小萌有妙招,通过“关键词”和“手绘图”带你一起巧记忆。一、PEST宏观环境分析:4项1.政治因素:4项(1)执政党所持的态度和推行的基本政策(2)企业所在国家和地区的政局稳定状况(3)政府行为对企业的影响(4)各政治利益集团对企业活动产生的影响2.法律环境因素:4项(1)国家司法机关和执法机关(2)国际法所规定的国际法律环境和目标国

    2022年5月23日
    34
  • B 站上有哪些很好的学习资源?[通俗易懂]

    B 站上有哪些很好的学习资源?[通俗易懂]哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!!最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇдˇ◕ฺ;)ノ下面我们就来盘点一下B站上优质的学习资源:综合类Oeasy:综合…

    2022年7月17日
    11
  • 阿里云产品介绍

    阿里云产品介绍文章目录一、阿里云四大件1、云服务器ECS2、云数据库RDS3、负载均衡SLB4、对象存储OSS5、其他的云计算产品1)内容分发网络CDN:2)专有网络VPC:2)弹性伸缩:二、阿里云安全系列产品1、DDoS高防IP2、安骑士3、证书服务4、态势感知5、堡垒机三、阿里云网络中间件相关消息队列MQ四、阿里云万网产品1、域名2、虚拟主机3、企业邮箱4、云解析DNS公有云和私有云概念bai概念imghttps://www.aliyun.com/product/rds/mysql?spm=a2cls.b9237

    2022年6月2日
    49
  • 关于KALI使用xshell连接

    关于KALI使用xshell连接

    2021年5月30日
    160
  • linux 普通用户修改环境变量_更改环境变量怎么设置

    linux 普通用户修改环境变量_更改环境变量怎么设置Linux环境变量设置文件/etc/profile全局用户,应用于所有的Shell。/$HOME/.profile当前用户,应用于所有的Shell。/etc/bash_bashrc全局用户,应用于BashShell。~/.bashrc局部当前,应用于BashSell。查找软件安装目录whereismongodb或者whichjava查看PATH#echo…

    2022年9月2日
    3
  • 排序二叉树的建立与中序遍历

    排序二叉树的建立与中序遍历树结构练习——排序二叉树的中序遍历TimeLimit:1000msMemorylimit:65536K有疑问?点这里^_^题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现

    2022年7月25日
    5

发表回复

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

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