Supongamos que tiene un conjunto de conjuntos de enteros. Es posible que algunos de los conjuntos se superpongan (es decir, compartan elementos). Puede deshacerse de las superposiciones eliminando elementos de los conjuntos, pero luego algunos de ellos pueden terminar vacíos; Eso sería una verguenza. ¿Podemos hacer que todos los conjuntos sean disjuntos sin vaciar ninguno de ellos?
Tenga en cuenta que en esta situación, nunca hay ninguna razón para dejar múltiples elementos en un conjunto, por lo que este problema siempre se puede resolver reduciendo cada conjunto a un solo elemento. Esa es la versión del problema que estamos resolviendo aquí.
La tarea
Escriba un programa o función, como sigue:
Entrada : una lista de conjuntos de enteros.
Salida : una lista de enteros, de la misma longitud que la entrada, para los cuales:
- Todos los enteros en la salida son distintos; y
- Cada número entero en la salida es un elemento del conjunto correspondiente de la entrada.
Aclaraciones
- Puede representar un conjunto como una lista si lo desea (o lo que sea apropiado para su idioma), sin tener en cuenta el orden de los elementos.
- No tiene que manejar el caso donde no existe una solución (es decir, siempre habrá al menos una solución).
- Puede haber más de una solución. Su algoritmo siempre debe producir una solución válida, pero puede ser no determinista (es decir, está bien si elige una solución válida diferente cada vez que se ejecuta).
- El número de enteros distintos que aparecen en la entrada, n , será igual al número de conjuntos en la entrada, y por simplicidad, serán los enteros de 1 a n inclusive (ya que sus valores reales no importan). Depende de usted si desea explotar este hecho o no.
Casos de prueba
[{1,2},{1,3},{1,4},{3,4}] -> [2,3,1,4] or [2,1,4,3]
[{1,3},{1,2,4},{2,3},{3},{2,3,4,5}] -> [1,4,2,3,5]
[{1,3,4},{2,3,5},{1,2},{4,5},{4,5}] -> [1,3,2,4,5] or [3,2,1,4,5] or [1,3,2,5,4] or [3,2,1,5,4]
Condición de victoria
Un programa requiere una complejidad de tiempo óptima para ganar, es decir, si se encuentra un algoritmo con una complejidad de tiempo mejor, descalifica todas las entradas más lentas. (Puede suponer que los componentes internos de su idioma se ejecutan lo más rápido posible, por ejemplo, puede suponer que un componente interno de clasificación se ejecuta en el tiempo O (n log n). Del mismo modo, suponga que todos los enteros de tamaño comparable a n pueden agregarse, multiplicarse, etc. . en tiempo constante.)
Debido a que una complejidad de tiempo óptima es bastante fácil de obtener en la mayoría de los idiomas, el ganador será el programa más corto entre aquellos con la complejidad de tiempo ganadora, medida en bytes.