tengo un algoritmo para calcular la powerset de un conjunto utilizando todos los bits entre 0 y 2^n:¿Cuál es el tiempo de ejecución de este algoritmo powerset
public static <T> void findPowerSetsBitwise(Set<T> set, Set<Set<T>> results){
T[] arr = (T[]) set.toArray();
int length = arr.length;
for(int i = 0; i < 1<<length; i++){
int k = i;
Set<T> newSubset = new HashSet<T>();
int index = arr.length - 1;
while(k > 0){
if((k & 1) == 1){
newSubset.add(arr[index]);
}
k>>=1;
index --;
}
results.add(newSubset);
}
}
Mi pregunta es: ¿Cuál es la ejecución tiempo de este algoritmo El ciclo se ejecuta 2^n veces y en cada iteración el ciclo while ejecuta lg (i) veces. Así que creo que el tiempo de ejecución es
T(n) = the sum from i=0 to i=2^n of lg(i)
Pero no sé cómo simplificar esto más, sé que esto puede resolverse en O (n^2) tiempo (no espacio) de forma recursiva, por lo que Me pregunto si el método anterior es mejor o peor que esto, en el tiempo ya que es mejor en el espacio.
¿por qué es x! > 2^x, sigue votando pero estaría muy agradecido si pudieras explicar eso :) – Aly
@Aly: porque x! = 1 * 2 * 3 ... * x (x veces, donde todos menos el primer y segundo elemento> 2) donde 2^x = 2 * 2 * ... * 2 (x veces, donde todo es 2 ...) así que para grandes x, x!> 2^x – amit
lo tengo gracias v mucho! – Aly