¿Existe una estructura de datos con complejidad espacial exponencial?

No te gustaría eso. No hay una estructura de datos en uso hoy que requiera más de [matemática] O (n) [/ matemática] espacio para contener datos que colectivamente n palabras de memoria incluso con sobrecarga. Puedo imaginar una estructura de datos que crea y rastrea datos hasta [matemática] O (n ^ 2) [/ matemática], pero ¿exponencial?

Se podría decir que su estructura de datos tiene una cuenta de datos que es exponencial en alguna cantidad que le interesa. Por ejemplo, si almacena el conjunto de todos los posibles estados futuros de un juego de mesa, podría decir que es exponencial en el número de vueltas hacia el futuro que ha almacenado, pero esa estructura de datos solo ocupa un espacio lineal en la cantidad de datos que se están almacenando. almacenado en él.

Una estructura de datos con una sobrecarga exponencial haría que el sistema se quedara sin memoria después de colocar solo algunos elementos en él. ¿Para qué podría ser útil?

Sostenga mi cerveza.

Suponga que desea resolver el problema de la suma de subconjuntos y se le permite hacer la precomputación que desee, pero necesita devolver una respuesta en línea de la manera más eficiente posible. Es decir, obtendremos entradas [matemáticas] x_1, x_2, … x_n [/ matemáticas]. En algún momento del año que viene se nos dará [math] y_1, y_2,…, y_m [/ math], y desea saber qué subconjunto de las [math] x [/ math], si las hay, suman a cada [math] y [/ math] dado.

¿Qué tan grande es una lista precalculada de posibles valores [matemáticos] y [/ matemáticos], en el peor de los casos? Si las [math] x [/ math] son ​​linealmente independientes (sobre los racionales, o incluso sobre los enteros, o incluso sobre [math] \ {0, 1 \} [/ math]) entonces hay [math ] 2 ^ {n} [/ math] valores para los que queremos devolver “verdadero”.

Por lo tanto, una estructura de datos de tamaño exponencial para este problema es calcular todos los subconjuntos [math] 2 ^ {n} [/ math] de [math] x_i [/ ​​math], tomar las sumas resultantes y ponerlas todas en una tabla hash perfecta indexada por las sumas. Cada [matemática] y [/ matemática] se puede buscar en [matemática] O (1) [/ matemática].

De hecho, si [math] m = \ Theta (2 ^ n) [/ math], ¡hemos logrado un tiempo constante amortizado para toda la operación! No está mal para un problema NP-completo.

More Interesting

¿Existe un algoritmo de clasificación que pueda ordenar los n números dados en O (1) donde n> 2?

¿Cuál es la diferencia entre un algoritmo y una fórmula?

Informática: ¿Cuál es el futuro de la investigación en algoritmos?

Cómo implementar un código C para la eliminación de un nodo de una lista vinculada considerando todos los casos de prueba

Dado un número N y un flujo continuo de enteros de entrada, ¿podría encontrar dos números en el flujo cuya suma fuera el primer número N?

Cómo inicializar una matriz

¿Utiliza un algoritmo de búsqueda lineal la estrategia de dividir y conquistar?

¿Cuáles son los principios para crear algoritmos utilizando tipos de datos abstractos?

¿En qué tipo de índices de búsqueda y enfoque se debe trabajar para un sitio web con búsqueda basada en la ciudad (y localidad) de una palabra clave, un ejemplo típico es un directorio web?

¿Cómo resuelvo los problemas de codechef y topcoder?

Deje G (V, E) ser un gráfico conectado, no dirigido, dar un algoritmo O (| V | + | E |) para calcular una ruta en G que atraviesa cada borde en E exactamente una vez en cada dirección?

Cómo reducir la programación dinámica a programación lineal

¿Cómo debo hacer para que una matriz de objetos Bullet pueda colisionar con una matriz de objetos Zombie?

¿Cómo Thomas Cormen y sus coautores generaron el índice para su libro clásico de algoritmos?

En programación de computadoras, ¿por qué es importante la clasificación? ¿Cuándo se utilizan los algoritmos de clasificación en la codificación real?