中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

布隆過濾器:實現代碼

發布時間:2020-07-15 18:24:55 來源:網絡 閱讀:1022 作者:q381989042 欄目:大數據
#pragma once
#include <string>
#include "BitMap.h"

struct HashFunc1
{
	size_t BKDRHash(const char *str)  
	{  
		register size_t hash = 0;  
		while (size_t ch = (size_t)*str++)  
		{         
			hash = hash * 131 + ch;   // 也可以乘以31、131
			return hash;  
		} 
	}

	size_t operator()(const string& s)
	{
		return BKDRHash(s.c_str());
	}
};

struct HashFunc2
{
	size_t SDBMHash(const char *str)  
	{  
		register size_t hash = 0;  
		while (size_t ch = (size_t)*str++)  
		{  
			hash = 65599 * hash + ch;        
		}  
		return hash;  
	}  

	size_t operator()(const string& s)
	{
		return SDBMHash(s.c_str());
	}
};


struct HashFunc3
{
	size_t RSHash(const char *str)  
	{  
		register size_t hash = 0;  
		size_t magic = 63689;     
		while (size_t ch = (size_t)*str++)  
		{  
			hash = hash * magic + ch;  
			magic *= 378551;  
		}  
		return hash;  
	}

	size_t operator()(const string& s)
	{
		return RSHash(s.c_str());
	}
};

struct HashFunc4
{
	size_t APHash(const char *str)  
	{  
		register size_t hash = 0;  
		size_t ch;  
		for (long i = 0; ch = (size_t)*str++; i++)  
		{  
			if ((i & 1) == 0)  
			{  
				hash ^= ((hash << 7) ^ ch ^ (hash >> 3));  
			}  
			else  
			{  
				hash ^= (~((hash << 11) ^ ch ^ (hash >> 5)));  
			}  
		}  
		return hash;  
	}

	size_t operator()(const string& s)
	{
		return APHash(s.c_str());
	}
};

struct HashFunc5
{
	size_t JSHash(const char *str)  
	{  
		if(!*str)
			return 0;

		register size_t hash = 1315423911;  
		while (size_t ch = (size_t)*str++)  
		{  
			hash ^= ((hash << 5) + ch + (hash >> 2));  
		}  
		return hash;  
	}

	size_t operator()(const string& s)
	{
		return JSHash(s.c_str());
	}
};


template<class K = string,
class __HashFunc1 = HashFunc1,
class __HashFunc2 = HashFunc2,
class __HashFunc3 = HashFunc3,
class __HashFunc4 = HashFunc4,
class __HashFunc5 = HashFunc5>
class BloomFilter
{
public:
	BloomFilter(size_t size)
		:_bitMap(size)
		,_capacity(size)
	{}

	void Set(const K& key)
	{
		size_t index1 = __HashFunc1()(key);
		size_t index2 = __HashFunc2()(key);
		size_t index3 = __HashFunc3()(key);
		size_t index4 = __HashFunc4()(key);
		size_t index5 = __HashFunc5()(key);

		cout<<index1<<endl;
		cout<<index2<<endl;
		cout<<index3<<endl;
		cout<<index4<<endl;
		cout<<index5<<endl;

		_bitMap.Set(index1%_capacity);
		_bitMap.Set(index2%_capacity);
		_bitMap.Set(index3%_capacity);
		_bitMap.Set(index4%_capacity);
		_bitMap.Set(index5%_capacity);

		_v[index%_capacity]++;
	}

	/*ReSet()
	{
		if(_v[index1%_capacity] == 0)
			return false;
		else
			--_v[index%_capacity];
	}*/

	bool Test(const K& key)
	{
		size_t index1 = __HashFunc1()(key);
		if (!_bitMap.Test(index1%_capacity))
			return false;

		size_t index2 = __HashFunc2()(key);
		if (!_bitMap.Test(index2%_capacity))
			return false;

		size_t index3 = __HashFunc3()(key);
		if (!_bitMap.Test(index3%_capacity))
			return false;

		size_t index4 = __HashFunc4()(key);
		if (!_bitMap.Test(index4%_capacity))
			return false;

		size_t index5 = __HashFunc5()(key);
		if (!_bitMap.Test(index5%_capacity))
			return false;

		return true;
	}

protected:
	BitMap _bitMap;
	size_t _capacity;

	//map<size_t, size_t> countMap;

	/*vector<size_t> _v;*/
};

void Test1()
{
	BloomFilter<> bf(-1);
	bf.Set("http://www.cnblogs.com/-clq/archive/2012/05/31/2528153.html");
	bf.Set("http://www.cnblogs.com/-clq/archive/2012/05/31/2528154.html");
	bf.Set("http://www.cnblogs.com/-clq/archive/2012/05/31/2528155.html");
	bf.Set("http://www.cnblogs.com/-clq/archive/2012/05/31/2528156.html");

	cout<<bf.Test("http://www.cnblogs.com/-clq/archive/2012/05/31/2528153.html")<<endl;
	cout<<bf.Test("http://www.cnblogs.com/-clq/archive/2012/05/31/2528154.html")<<endl;
	cout<<bf.Test("http://www.cnblogs.com/-clq/archive/2012/05/31/2528155.html")<<endl;
	cout<<bf.Test("http://www.cnblogs.com/-clq/archive/2012/05/31/2528156.html")<<endl;
	cout<<bf.Test("http://www.cnblogs.com/-clq/archive/2012/05/31/2528157.html")<<endl;
}

以上

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝山区| 仲巴县| 广宁县| 库车县| 西和县| 陇南市| 嘉祥县| 泰和县| 遵化市| 拉萨市| 瓦房店市| 双流县| 渭南市| 赣榆县| 崇礼县| 汝州市| 康马县| 乐清市| 红安县| 和静县| 麻阳| 宁安市| 钟祥市| 城口县| 板桥市| 东乡族自治县| 安远县| 瑞金市| 泰来县| 深泽县| 宜君县| 乐陵市| 鄂托克旗| 香河县| 隆昌县| 扬州市| 大埔区| 婺源县| 柳州市| 西乌珠穆沁旗| 北川|