Base XOR con eliminaciones
Prólogo
Este artículo utiliza términos de álgebra lineal. Si los entiendes, puedes saltarte esta sección.
Introducción
Recordemos el siguiente problema conocido:
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 . 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 por consulta, pero aprenderemos a resolver el problema con eliminaciones en .
Estructura
En el problema con eliminaciones, surgen incertidumbres cuando el número entero que añadimos a la base XOR se puede representar mediante de los números ya existentes en la base.
Queremos almacenar de manera eficiente cada número que se añade a , así que mantendremos una secuencia () de bases XOR (cada una de las cuales está inicialmente vacía), en lugar de una sola base.
Añadir un número entero a
Consideremos cómo añadiremos un nuevo número entero al conjunto :
Iteraremos gradualmente sobre nuestras bases comenzando desde la primera. Sea el número de la base actual que estamos considerando;
Si , simplemente añadimos a y terminamos el procedimiento;
De lo contrario, , por lo que no podemos añadirlo a la base, pero queremos almacenar este número en algún lugar. Por lo tanto, incrementamos en y volvemos al paso .
En otras palabras, encontramos el menor tal que y añadimos a . Si implementamos este algoritmo directamente, en el peor caso funcionará en , lo cual es bastante ineficiente.
Mejoraremos este algoritmo. Primero, consideremos algunas propiedades de esta secuencia de bases :