Basecamp
    Inicio
    Problemas
    Concursos
    Cursos
    Clasificación
    Publicaciones
    Tienda
    Discord
Base XOR con eliminaciones
Iniciar sesión
denisovkostya
•Article•hace 1 año

Base XOR con eliminaciones

Prólogo

Este artículo utiliza términos de álgebra lineal. Si los entiendes, puedes saltarte esta sección.

Un número entero entre 0 (inclusive) y 2m (exclusivo) puede considerarse como un vector de m dimensiones, tomando en cuenta su representación binaria. La operación de calcular el xor (OR exclusivo) corresponde a sumar cada elemento módulo 2, y la operación de seleccionar ciertos elementos de un conjunto de enteros y calcular su xor corresponde a multiplicar vectores por 0 o 1 y sumarlos módulo 2. La suma de varias multiplicaciones escalares y vectores se denomina una combinación lineal.

span(X) denota el conjunto de todos los posibles xor de algunos elementos del conjunto X. Por ejemplo, span({1,2,4})={0,1,2,4,1⊕2,1⊕4,2⊕4,1⊕2⊕4}={0,1,2,3,4,5,6,7} (xor del conjunto vacío es igual a 0).

Introducción

Nota

En el artículo, asumimos que todos los números enteros están dentro de [0,2m).

Recordemos el siguiente problema conocido:

Problema

Hay q consultas del siguiente tipo:

  • Añadir un número entero x al conjunto S (inicialmente está vacío).

Después de cada consulta, necesitas mostrar el tamaño de una base XOR arbitraria del conjunto actual S.

Una base XOR de un conjunto S es el conjunto mínimo de números enteros X que permite representar cualquier número entero y∈S usando xor de los números en X.

Puedes aprender más sobre cómo resolver este problema aquí.

En este artículo, consideraremos un problema más complejo donde también hay consultas de eliminación de números enteros del conjunto S. Además, recibimos la siguiente consulta solo después de responder la anterior (es decir, el problema necesita resolverse "en línea").

El problema inicial puede resolverse en O(m) por consulta, pero aprenderemos a resolver el problema con eliminaciones en O(m2).

Estructura

En el problema con eliminaciones, surgen incertidumbres cuando el número entero que añadimos a la base XOR se puede representar mediante xor de los números ya existentes en la base.

Queremos almacenar de manera eficiente cada número que se añade a S, así que mantendremos una secuencia Xn​ (n≥1) de bases XOR (cada una de las cuales está inicialmente vacía), en lugar de una sola base.

Añadir un número entero v a S

Consideremos cómo añadiremos un nuevo número entero v=0 al conjunto S:

  1. Iteraremos gradualmente sobre nuestras bases comenzando desde la primera. Sea i el número de la base actual que estamos considerando;

  2. Si v∈/span(Xi​), simplemente añadimos v a Xi​ y terminamos el procedimiento;

  3. De lo contrario, v∈span(Xi​), por lo que no podemos añadirlo a la base, pero queremos almacenar este número en algún lugar. Por lo tanto, incrementamos i en 1 y volvemos al paso 2.

En otras palabras, encontramos el menor i tal que v∈/span(Xi​) y añadimos v a Xi​. Si implementamos este algoritmo directamente, en el peor caso funcionará en O(∣S∣), lo cual es bastante ineficiente.

Mejoraremos este algoritmo. Primero, consideremos algunas propiedades de esta secuencia de bases Xn​:

Propiedad 1

span(Xi​)⊇span(Xi+1​) para todo i≥1.


40

Comentarios (2)

Cargando

Un momento, obteniendo datos del servidor
user429879•hace 7 meses

👍🏻

0
SANYAAAAAAAAAAAAA•hace 12 meses•Revisión 2

Is it possible to get size of set of integers that belong to a span of at least one basis, several basises given

0