📄 synhashset.cpp
字号:
#include "stdafx.h"
#include "SynHashSet.h"
#if 0
//////////////////////////////////////////////////////////////////////////
//
//url hash函数
//对于URL的散列,
//(1) 无论出于信息查询还是负载平衡的需求,HfIp都是很可靠的,可以首选使用;
//(2) Hf在有些情况下对负载平衡很好,但它对槽数的敏感性是一个值得注意的缺陷,有时可能效果很不好,需要小心;
//(3) 不推荐使用ELFhash.
//
int _ELFhash(char* url, int size)
{
unsigned int h=0;
while (*url)
{
h=(h<<4) + *url++;
unsigned int g= h & 0xF0000000;
if (g)
h^=g>>24;
h&=~g;
}
return h%size;
}
unsigned int _HfIp(const char* url, int size)
{
unsigned int n=0;
char* b=(char*)&n;
for (int i=0; i< (int)f_strlen(url); i++)
b[i%4]^=url[i];
return n%size;
}
int _hf(char* url, int size)
{
int result=0;
char* ptr=url;
int c;
for (int i=1; c=*ptr++; i++)
result += c*3*i;
if (result<0)
result = result;
return result%size;
}
//////////////////////////////////////////////////////////////////////////
//
//网页指纹摘要函数(和消重是两个事情,消重要全部MD5拿去和别的网页比较指纹只是和上次的自己比较)
//用网页关键词向量的指纹算法(进行切词然后选频率最好的20个词做MD5)、全文MD5、净化网页全文MD5等
//算法计算出网页的指纹,取MD5的前4个字节做Digest
//
//我们采用的算法是过滤掉网页中的不可见字符,然后对这个内容进行MD5
//基于网页原文的MD5过于敏感误判率太高;关键词向量来提取指纹太慢
//
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//
//天网介绍说是最好的算法,可是狗屁都不同
unsigned int hash_HfIp(const char* url)
{
unsigned int n=0;
char* b=(char*)&n;
for (int i=0; i< (int)f_strlen(url); i++)
b[i%4]^=url[i];
return n;
}
//vc2003默认的算法
size_t hash_hp(const char *_Str)
{ // hash NTBS to size_t value
size_t _Val = 0xdeadbeef;
size_t _Size = ::f_strlen(url);
if (0 < _Size)
{ // add one or more elements
size_t _Stride = (_Size / 16) + 1;
_Size -= _Stride; // protect against _Size near _Str.max_size()
for(size_t _Idx = 0; _Idx <= _Size; _Idx += _Stride)
_Val += (size_t)url[_Idx];
}
return (_Val);
}
//意外发现效果最好的算法
unsigned int hash_md5xor(const char* url)
{
CMD5 md5;
md5.GenerateMD5((unsigned char*)url,f_strlen(url));
return md5.m_data[0]^md5.m_data[1]^md5.m_data[2]^md5.m_data[3];
}
//模板类的成员函数特化
template<> inline size_t stdext::hash_compare<CString>::operator() (const CString& key) const
{
return hash_HfIp(key);
}
//模板函数特化
template<> size_t stdext::hash_value(const CString& key)
{
return hash_HfIp(key);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -