[Estructuras de datos] - en el principio de mapas de bits y de mapa de bits

En primer lugar, el concepto de mapa de bits

Hoy en día más o menos clase de la escuela, pero yo no escuchar, entrenado, capacitado, entrenado, logró tomar un poco de tiempo para resolver el siguiente mapa de bits. Obtener a la barra de

mapa de bits (bitset) es una estructura común de datos, que se utiliza comúnmente en una amplia gama para el número (por ejemplo, veo un problema antes de que el número es de 4 mil millones), que determinan el número de los cuales no se encuentra en . Aquí hay que usar el mapa de bits, por lo que al parecer gracias a un número en la memoria es menor que el depósito, tenemos que volver a pensar en maneras. Mapa de bits índices, compresión de datos tiene gran aplicación.

Los mapas de bits implementan matriz, cada elemento de cada conjunto de datos representa un dígito binario 0 indica que no existe el número, 1 indica la presencia de datos
.

En segundo lugar, el modelo de mapa de bits

Volver a nuestra pregunta dijo antes, hay cuatro mil millones el número, la memoria cómo hacerlo? Mapa de bits pensar en una forma, un número de tipo int es de 4 bytes, 32 bits, si ponemos cada bit una señal digital que un byte puede marcar 32 números (nota: no almacenar mapas de bits estos datos, pero la bandera está presente, el mapa de bits matriz se almacena en un dígito binario 0 o 1)

Aquí Insertar imagen Descripción
4000000000 16g probablemente digital, ahora usando mapa de bits 16 g / 32 es de aproximadamente a aproximadamente 500M, ahorre una gran cantidad de memoria, la eficiencia de también mejoró

En tercer lugar, el diseño de mapa de bits

Si ve en el contenido, a continuación, diseñar un mapa de bits que debe también carece del problema, utilizamos las matrices de vectores como el subyacente, por lo que puede abrir un espacio contiguo, y el rango >> 5 (rango representa las cifras estadísticas a escala) dividido por el equivalente de 32, seguido por 1, a fin de evitar un número menor que 32 dividido por 32 es de 0 proveedores.

class bitmap 
{
public:
	bitmap(size_t range)  //range表示数的集合大小
	{
		_bit_table.resize((range >> 5) + 1);   //这里表示40亿个数要开多大的空间存储
	}
private:
	vector<int> _bit_table;
};

Los elementos de mapa de bits
se explica en los comentarios de código

void setbit(size_t x)
	{
		size_t index = x >> 5;  //算出x在第几个整型位
		size_t n = x % 32;  //在某个整型位的具体位置

		_bit_table[index] |= (1 << n);   //将该具体位置为1,其他位不变
	}

Retire los números
con el fin de eliminar los números, sólo tenemos la posición es 0, los demás bits sin cambios

void removebit(size_t x)
	{
		size_t index = x >> 5;//算出x在第几个整型位
		size_t n = x % 32; //在某个整型位的具体位置

		_bit_table[index] &=~(1 << n);  //将该位置为0,其余位置为1
	}

Encontrar los elementos de mapa de bits

int find(size_t x)
	{
		size_t index = x >> 5;//算出x在第几个整型位
		size_t n = x % 32; //在某个整型位的具体位置

		return _bit_table[index] & (1 << n);   //返回0或者1
	}
Publicado 33 artículos originales · alabanza ganado 13 · vistas 1041

Supongo que te gusta

Origin blog.csdn.net/Vicky_Cr/article/details/105046550
Recomendado
Clasificación