¿Cuál es la complejidad temporal de generar todos los subconjuntos posibles de un conjunto? ¿Es 2 ^ n?

La complejidad del tiempo se mide en función del tamaño de entrada. Si su entrada es un conjunto de tamaño n, y su salida es una lista de conjuntos no comprimidos, entonces el tiempo de ejecución será de [math] \ Omega (2 ^ n) [/ math] pasos. Esto se requiere simplemente para generar la salida .

Pero este es solo el caso porque (muy probablemente) enmarcó el problema de manera ineficiente (a menos que realmente necesitara cada uno de esos subconjuntos, lo cual es muy poco probable). La mayoría de las veces no estamos interesados ​​en todos los subconjuntos. Más bien, estamos interesados ​​en uno o un puñado de subconjuntos particulares con un conjunto específico de propiedades. En ese caso, no podemos poner un límite inferior de [matemáticas] 2 ^ n [/ matemáticas]. Solo podemos poner un límite inferior que depende de las propiedades que estamos buscando. No hay límite inferior más bajo que el tiempo que lleva leer el problema, más una constante, que es [matemáticas] \ Omega (n + k) [/ matemáticas].

Simplemente pasar [matemática] n [/ matemática] bits a través de todas las posibilidades [matemática] 2 ^ n [/ matemática] lleva tiempo [matemática] \ Theta (2 ^ n) [/ matemática] (ya que el transporte lleva un tiempo limitado en promedio , aunque para algunos pasos será necesario hacer casi [math] n [/ math] carry). El tamaño promedio de los subconjuntos es [matemática] n / 2 [/ matemática] por lo que si está generando todos los conjuntos, tomará al menos [matemática] n2 ^ {n-1} [/ matemática] símbolos. Pero eso solo se puede lograr si saca el conjunto como una cadena de bits o algo similar a eso. Si los elementos se representan individualmente con símbolos, eso tomará [math] \ log_2 (n) + O (1) [/ math] bits para cada elemento. Entonces, si desea tener una respuesta definitiva, debe decir un poco sobre cómo se van a representar los conjuntos generados. Fácilmente podría terminar siendo [matemáticas] \ Theta (n2 ^ n \ log n) [/ matemáticas]. Para muchos propósitos, no es necesario prestar mucha atención a los factores más pequeños, porque [math] 2 ^ n [/ math] hará que la operación sea inviable en un punto cuando [math] n \ log n [/ math] es sigue siendo modesto

More Interesting

¿Cuál es el estado actual de la computación analógica?

¿Están algunas de las máquinas en 'On Computable Numbers' (A. Turing 1936) buggy?

Si Kurt Godel estuviera vivo hoy, ¿podría probar el problema P vs NP?

En 'Figuras ocultas', ¿qué tipo de matemáticas usa Katherine Gobles?

¿Es posible tener una máquina de Turing que sea capaz de construir otra máquina de Turing (diferente) a partir de bits puramente aleatorios?

¿Cómo se puede encontrar el logaritmo de base 10 de un número de hasta 5 decimales con solo usar las cuatro operaciones básicas (+, -, *, /) con la ayuda de una calculadora?

¿Qué tan difícil es la transición de las matemáticas aplicadas a la informática?

¿Es necesario aprender matemáticas discretas y sus aplicaciones para comenzar la programación en Python?

Cómo resolver rápidamente cualquier problema

Para ser programador, ¿es necesario saber matemáticas?

¿Debería sentirme desmoralizado porque el cálculo no parece hacer clic para mí?

Me equivoqué completamente en mi examen de Matemática discreta. ¿Todavía podré ir a la escuela de posgrado?

¿Qué es un gráfico bipartito?

¿Cuáles son las habilidades matemáticas esenciales necesarias para ser un buen programador?

Si [matemática] f (5) = 12 [/ matemática] y [matemática] f (10) = 18 [/ matemática] ¿qué significa [matemática] f (20) =? [/ Matemática] Cuándo (a) [matemática] f [/ math] es una función exponencial y (b) [math] f [/ math] es una función de potencia?