Tenemos una colección de conjuntos A_1, .., A_n. El objetivo es encontrar nuevos conjuntos para cada uno de los conjuntos antiguos.Encontrar subconjuntos que se pueden completar en tuplas sin duplicados
newA_i = {a_i in A_i such that there exist (a_1,..,a_n) in (A1,..,An) with no a_k = a_j for all k and j}
Así, en palabras este dice que eliminamos todos los elementos de A_i que no pueden ser utilizados para formar una tupla (a_1, .. a_n) de los conjuntos (A_1, .., A_n) tal que la tupla no contiene duplicados.
Mi pregunta es cómo calcular estos nuevos conjuntos rápidamente. Si acaba de implementar esta definición generando todas las posibles v, esto tomará tiempo exponencial. ¿Conoces un mejor algoritmo?
Editar: aquí hay un ejemplo. Tome
A_1 = {1,2,3,4}
A_2 = {2}.
Ahora los nuevos conjuntos de aspecto:
newA_1 = {1,3,4}
newA_2 = {2}
La 2 ha sido eliminado de A_1 porque si decide que la tupla siempre será (2,2), que no es válido porque contiene duplicados. Por otro lado, 1,3,4 son válidos porque (1,2), (3,2) y (4,2) son tuplas válidas.
Otro ejemplo:
A_1 = {1,2,3}
A_2 = {1,4,5}
A_3 = {2,4,5}
A_4 = {1,2,3}
A_5 = {1,2,3}
Ahora los nuevos conjuntos son:
newA_1 = {1,2,3}
newA_2 = {4,5}
newA_3 = {4,5}
newA_4 = {1,2,3}
newA_5 = {1,2,3}
El 1 y 2 son retirados de los conjuntos 2 y 3, ya que si se elige la 1 o 2 de estos conjuntos se Solo le quedan 2 valores para los conjuntos 1, 4 y 5, por lo que siempre tendrá duplicados en tuplas que se parecen al (_,1,_,_,_)
o como (_,_,2,_,_)
.
Este problema parece difícil, pero sería genial si hubiera un algoritmo de tiempo polinomial.
Otra forma de ver esto es visualizar los conjuntos A_i a la izquierda y los valores a la derecha, con una línea que conecta un conjunto y un valor si el valor está en el conjunto.
¿Estás escribiendo un solucionador de Kakuro/sudoku?Si es así, ¿tiene restricciones sobre los posibles valores, como siempre 1 - 9, siempre hay como máximo 9 series, ese tipo de cosas? – clahey
Buena suposición :) No es para sukodu, pero * es * para un tipo de solucionador de lógica/generador (para verificar si hay una solución única). No hay un límite fijo en la cantidad de conjuntos o cuántos elementos hay en los conjuntos, pero estos números serán pequeños en la práctica (digamos que menos de 20). ¡Pero todavía 20^20 es una gran cantidad de tuplas para comprobar! – Jules
Supongo que podría haber varias soluciones válidas? Si ese es el caso, ¿está buscando alguna solución óptima en algún sentido? – aioobe