BitMap de estructura de datos detallada

antecedentes

Hay datos 10G, averigüe si contiene ciertos datos. Pero la memoria es solo 2G. Cómo comprobar si estos datos existen en datos 10G. Quizás algunos estudiantes pensarán inmediatamente en el filtro de floración. Sí, el filtro de floración es una estructura de datos más avanzada desarrollada a partir de ideas de mapas de bits. Este artículo habla principalmente sobre los principios e ideas de los mapas de bits.

BitMap (mapa de bits)

Introducción

  • Un bit se usa para representar un cierto valor, es decir, los datos están representados por la ubicación de almacenamiento.
  • El mapa de bits no almacena el valor específico, sino que solo almacena la huella digital de datos del valor en la aplicación (puede ser un subíndice de grupo de índice o puede referirse al subíndice de matriz mapeado por el valor hash). Los mapas de bits no se pueden repetir y están ordenados (específicamente, de acuerdo con el método de almacenamiento, se ordena el almacenamiento ordenado y los cálculos hash están desordenados)

tipo de datos

  1. La capa inferior se almacena a través de una matriz, cada bit de la matriz representa un valor de datos, 0 significa no, 1 significa sí
  2. Por ejemplo, los datos de 1357, según nuestro almacenamiento normal, un tipo int tiene 4 bits, por lo que se requiere un total de 28 bits de memoria. Sin embargo, si usa mapas de bits para el almacenamiento, solo se requieren 7 bits. El método de almacenamiento utilizado es el almacenamiento secuencial, el primero de la matriz. A partir de 0, se coloca 1 en la primera ranura de la matriz y se establece en 1, por lo que la estructura después del almacenamiento es la siguiente:
    Inserte la descripción de la imagen aquí

Método de almacenamiento

1. Almacenamiento secuencial
  • Al igual que en los ejemplos enumerados anteriormente, modifique directamente el subíndice de la matriz como la huella digital de los datos a ordenar.
  • Pero esto tendrá un problema, es decir, ¿qué pasa si los datos almacenados no comienzan desde 0 sino desde 1000 o 10000? ¿O el intervalo entre estos datos es muy grande? Todos estos son problemas.
2. Cálculo hash para almacenamiento
  • En Java, hash al subíndice de matriz correspondiente a través de hashCode (), MD5 y otros métodos. Sin embargo, después del hash, habrá un valor particularmente grande, por lo que puede decirlo libremente y luego calcular el resto para el valor correspondiente. Por ejemplo,
    dada una matriz vacía con una longitud de 1024, el valor de los datos almacenados después del hash es 1234567 dividido por 1024 y el resto es 647, por lo que terminará en la posición 647. Los mismos datos definitivamente caerán en la misma posición, por lo que el mapa de bits no se repetirá, en este caso está desordenado.

solicitud

1. Calcule los usuarios activos diarios

  • El usuario solicitado realiza el cálculo hash y lo divide por el valor presupuestado para el cálculo restante. La cantidad de datos cuyo bit es 1 es la actividad diaria del usuario

2. Las estadísticas de visita de retorno del usuario y el mapa de bits de dos días se utilizan para una operación.

  • Tome y calcule los datos de actividad diaria durante dos días, y luego el número 1 es el número de usuarios recurrentes,

Ruedas existentes

  1. Objeto BitSet en JDK
    https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html
  2. Uso de mapa de bits de Redis (https://blog.csdn.net/u011957758/article/details/74783347)

para resumir

  • BitMap es un valor de datos que no puede almacenar datos reales, es decir, solo puede mostrar que los datos existen o no
  • La forma en que BitMap almacena datos es distinguir los datos de acuerdo con la ubicación de almacenamiento, y si la ubicación de almacenamiento está ocupada o no, indica si los datos existen.
  • Cada lugar de almacenamiento es de 1 bit, que es su esencia y ocupa menos espacio
  • Bloom fliter también es la misma idea: aplica un hash a ciertos datos varias veces y almacena más valores a través de una matriz de longitud fija. Un dato corresponde a múltiples ranuras. Para obtener más información, consulte: https://editor.csdn.net/md/?articleId=108135235

Supongo que te gusta

Origin blog.csdn.net/weixin_40413961/article/details/108986928
Recomendado
Clasificación