Cómo resolver esta pregunta de entrevista (c ++ / Java)

Entonces desea todos los subconjuntos de todas las permutaciones de 1 … N-1. En su lugar, puede revertir esta tarea y calcular todas las permutaciones de todos los subconjuntos; esto hace que sea más fácil evitar duplicados.

Para iterar sobre todos los subconjuntos de 0 … N-1 (excluyendo el conjunto vacío), puede iterar sobre un int sin signo y tomar los patrones de bits. Luego, para encontrar todas sus pemutaciones, se puede utilizar la función de biblioteca estándar std::next_permutation . En código C ++:

#include
#include
#include // para next_permutation

void print_subsets (int N)
{
// Verificar patrones 1 … N-1 (excluyendo i = 0 (conjunto vacío))
unsigned int i = 1, n = 1u << N;
for (unsigned int i = 1; i <n; ++ i) // Cambie a i <n-1 si no desea incluir permutaciones completas
{
// Comprueba si cada bit está activo para este patrón
secuencia std :: vector ;
para (unsigned int j = 0; j <n; ++ j)
{
si (i & (1u << j))
{
secuencia.push_back (j);
}
}
// Ahora imprime todas las permutaciones de esta secuencia
hacer
{
para (unsigned int k: secuencia) std :: cout << k;
std :: cout << std :: endl;
}
while (std :: next_permutation (secuencia.begin (), secuencia.end ()));
}
}

int main ()
{
// Prueba en un ejemplo
print_subsets (4);
int foo;
std :: cin >> foo;
devuelve 0;
}

Actualización: ¿Acabo de ver que quieres imprimirlo para todas las permutaciones, no solo para una? Respuesta actualizada para eso.

Actualización 2: lo cambió para que la permutación completa también se incluya como una subpermutación. Si desea excluir la permutación completa, cambie el bucle en la línea 9.

EDITADO después del comentario de Sven Zwei:

Ampliando mi comentario, necesitas codificar dos piezas:

  • Genere todos los subconjuntos de los números entre 1 y N
  • Para cada subconjunto, imprima todas las permutaciones

La primera pieza es esta: Power Set – GeeksforGeeks

La segunda pieza es esta: generar todas las permutaciones de una cadena dada

Asegúrese de no devolver sus valores de una vez, sino de imprimirlos . ¿Por qué? Piense en la complejidad del tiempo de este algoritmo y en la cantidad de memoria que habrá utilizado cuando llegue al final y devuelva todo.

¿Está el problema completamente declarado? ¿Quiere imprimir todos los SP de todas las permutaciones? Supongo que sí.

Si es así, entonces es bastante fácil. Simplemente imprima todas las permutaciones de los dígitos i tomados de los N primeros dígitos, donde tomo valores de 0 a N.

More Interesting

¿Cómo diseñaría un algoritmo codicioso que conecta cada punto negro con un punto blanco para que la longitud total de los cables utilizados para formar tales pares conectados sea mínima?

¿Cómo se puede ir más allá de las estructuras introductorias de informática / datos y comenzar a construir programas y aplicaciones por su cuenta?

Soy un graduado reciente de IIT Delhi y tengo ofertas de Google India y Uber India. ¿A cuál debo unirme?

¿Cuál es el conjunto de preguntas para preparar en Java y JavaScript para una entrevista de más de 2 años?

¿Cómo debería (un estudiante de tercer año de ingeniería informática) mejorar mis posibilidades de entrevistas de prácticas?

¿Cuáles son algunos que deben saber las preguntas y respuestas de entrevistas específicas de Python?

Dada una lista de números sin clasificar, ¿cómo encontrarías la mediana sin ordenar la matriz original?

Cómo encontrar un elemento duplicado en una matriz con una complejidad temporal menor que O (n ^ 2) y una complejidad espacial de O (1)

¿Cuál es la peor forma de prepararse para una entrevista de ingeniería de software?

¿Qué tipo de preguntas se hacen en la primera ronda de la entrevista de Google?

Seré entrevistado para una empresa de seguridad de software de inicio. Tengo experiencia en Java y un reclutador me pidió que mejorara mis habilidades técnicas. Además de seguir el geeksforgeeks.org común, ¿de qué otra manera debo prepararme?

¿Qué debo saber sobre C ++ antes de poder escribir 'competente en C ++' en mi currículum?

¿De dónde obtienen la mayoría de los entrevistadores sus preguntas de entrevistas técnicas de informática?

¿Cuáles son las mejores preguntas que hacen los entrevistadores en la entrevista relacionada con C, si va a realizar una entrevista de la compañía 5-6 CTC?

¿Cuáles son las preguntas formuladas en las entrevistas relacionadas con la creación de redes?