⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synhashset.cpp

📁 概述:数据的纵向收集
💻 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 + -