谷歌的变种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;
}


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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android音乐播放器ppt,基于Android音乐播放器设计与开发.ppt

    android音乐播放器ppt,基于Android音乐播放器设计与开发.ppt基于Android音乐播放器设计与开发毕业设计基于Android的音乐播放器设计与开发…

  • 动态路由协议的配置 OSPF

    动态路由协议的配置 OSPF□了解动态路由协议OSPF和RIP特性    OSPF(OpenShortestPathFirst)开放最短路径优先协议。首先必须收集有关的链路状态信息,并根据一定的算法计算出到每个节点的最短路径,向其同一管理域的所有其它路由器发送链路状态广播信息。   RIP(RoutingInformationProtocol)路由信息协议,路由器收集所有可到达目的地的不同路径

    2022年10月28日
  • C语言system()函数的用法[通俗易懂]

    C语言system()函数的用法[通俗易懂]C语言system()函数的用法1.函数简介C语言中,system函数可以用于调用一些DOS命令,比如system(“pause”)可以卡主系统控制台,而另一个常用的system(“cls”)为清屏命令,等于在DOS上使用cls命令。2.函数支持库及原型(1)函数原型intsystem(char*command);(2)函数支持库:stdlib.h3.函数返回值(1)=-1:出现…

  • 阿里云原生数据仓库AnalyticDB MySQL版学习

    阿里云原生数据仓库AnalyticDB MySQL版学习阿里云原生数据仓库AnalyticDBMySQL版是融合数据库、大数据技术于一体的阿里云原生企业级数据仓库服务。AnalyticDBMySQL版支持高吞吐的数据实时增删改、低延时的实时分析和复杂ETL,兼容上下游生态工具,可用于构建企业级报表系统、数据仓库和数据服务引擎。AnalyticDBMySQL版的产品系列包含弹性模式和预留模式。计算分时弹性功能支持按照小时编排计算资源量,解决业务高峰期计算资源瓶颈,同时大幅降低了计算资源成本。计算资源池隔离功能支持按照不同的业务类型或优先级将计算任务

  • android进程间通信方式有哪几种_安卓进程间通信

    android进程间通信方式有哪几种_安卓进程间通信1.IntentActivity,Service,Receiver都支持在Intent中传递Bundle数据,而Bundle实现了Parcelable接口,可以在不同的进程间进行传输。在一个进程中启动了另一个进程的Activity,Service和Receiver,可以在Bundle中附加要传递的数据通过Intent发送出去。可以看看,Android——Bundle浅析2.文件共享Windows上,一个文件如果被加了排斥锁会导致其他线程无法对其进行访问,包括读和

    2022年10月11日
  • 将ipad作为电脑拓展屏或分屏的简单方法[通俗易懂]

    将ipad作为电脑拓展屏或分屏的简单方法[通俗易懂]用Ipad实现电脑分屏的方法是挺简单的,但鉴于部分小白找不到合适的门路,在此重新分享一下。需要的装备:ipad电脑数据连接线方法:某宝上搜索 duetdisplay,只需1元左

发表回复

您的电子邮箱地址不会被公开。

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