哈希应用:位图

,哈希在很多方面都有着其特殊的作用,今天我们来介绍两种关于哈希的应用方面,对于大数据的处理。

第一 位图

如果说,要在4000亿的无符号整型中,找存在的那个数,该如何处理呢,明显是key的模型,找一个数是否存在,但是内存不够啊,1G是10亿的数据,那么4000亿的话是400G,还要有整形4个字节,总来说要1600G,服务器能有这么大吗?

肯定是有这么大的服务器的,但是呢不能全去处理这个数据吧,因此对于大数据的处理,对于空间的要求就比较的高了,我们一方面要考虑数据的查找效率,还有空间的储存可能。

因此根据哈希的变形,有了位图这种数据结构,原理思想是什么呢?

首先我们只需要知道这个数据在不在,那么就有这么个思想,我们可以选择位来表示状态,来说明数在不在,我们不必要用过多的属性去描述这个数据。因此位图的思想是,用位来表示其数的存在性,来判别。

其实我们可以去思考,越有特性的数其实相对于来说描述其更加容易,所以才在一个数据的属性很少时,我们就可以使用相对小的空间来描述它,哈希就是描述的方式,而无符号整形相对来说特性很高,所以很好描述。

那用位来控制,就是定义一个整型来控制,除32表示第几个整型,膜32表示第几位表示这个数。而查找的时候反向找就可以找到,因为是一一对应的,所以一个位一定能表示一个数。因此如果要寻找,那么只需要500M就能表示全部的无符号整型,具体的实现看代码吧~

#pragma once
#include <vector>

namespace whc
{
	class bitset
	{
	public:
		bitset(size_t N)
		{
			_bits.resize(N / 32 + 1, 0);
			_num = 0;
		}

		void set(size_t x)
		{
			size_t index = x / 32;
			size_t pos = x % 32;

			_bits[index] |= (1 << pos);

			_num++;

		}

		void reset(size_t x)
		{
			size_t index = x / 32;
			size_t pos = x % 32;

			_bits[index] &= ~(1 << pos);

			_num--;

		}

		bool test(size_t x)
		{
			size_t index = x / 32;
			size_t pos = x % 32;

			return _bits[index] &= (1 << pos);
		}



	private:
		std::vector<int> _bits;
		size_t _num;
	};
}

位图的实现不难,主要用于对位操作符的应用,但其思想,却是很重要的,对于不同的属性数据,用较小的空间来描述他的属性便可以,不用一定需要将它的所有属性描述出来~因为位图具有很多的变型使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值