谷歌的变种murmurHash算法
来源:互联网 发布:丹麦域名后缀 编辑:程序博客网 时间:2024/06/05 10:51
谷歌变种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)); }}//32bituint32_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;}
//你可以修改参数自己测试下,散列性与且计算很高效!
阅读全文
0 0
- 谷歌的变种murmurHash算法
- MurmurHash算法
- MurmurHash算法
- MurmurHash
- MurmurHash
- murmurhash
- murmurhash
- hdoj 1686(kmp算法的变种)
- QuickSort及其变种算法的总结
- 一道折半算法变种的面试题
- 算法 二分查找的变种以及注意事项
- 陌生但默默一统江湖的MurmurHash
- 洗牌算法变种
- 排序算法变种
- hdu 3367 Pseudoforest kruskal算法的变种+并查集
- 对LCS算法及其变种的初步研究
- 算法-斐波那契和变种的学习
- 从Cerber勒索软件中学习murmurhash算法
- 利用Jquery实现标题框拖拽
- Jedis之pipeline
- 如何发挥公证在知识产权保护中的作用
- C++中函数模板的用法详细解析
- Java面试题全集(上)
- 谷歌的变种murmurHash算法
- Android利用硬解码和OpenGL ES来高效处理MP4视频
- windows服务器 IIS FTP服务
- 理解 Thread.Sleep 函数
- 分析lk的leds_init()函数
- VariantClear 和 VariantInit 函数
- contains( )方法
- 类似SCSF中EventBroker解耦事件调用方和接受方,打破"+="带来的耦合
- 【知识】UML类图与类的关系详解