Seleccionar un elemento de cada uno de muchos conjuntos de modo que no haya dos elementos iguales.

Supongamos que tenemos un conjunto finito A cuyos elementos son subconjuntos de otro conjunto finito B ( ϵ A ϵ B ) . A continuación, supongamos que queremos seleccionar hasta un elemento de cada conjunto ϵ A tal que no hay dos elementos seleccionados de cualquiera de estos conjuntos ϵ son iguales. ¿Cómo haríamos para encontrar el número máximo de elementos que podemos seleccionar de estos conjuntos de manera que se satisfagan estas condiciones?

Obviamente, este número máximo de elementos está acotado por el mínimo del tamaño de A y el tamaño de B , pero supongamos que conocemos el contenido de cada uno de los conjuntos ϵ . ¿Hay algún método que se pueda usar para obtener más información sobre este máximo de manera oportuna, o este problema toma tiempo para resolverlo?

Esto suena a Sudoku, puede ser útil ver si puedes reducir Sudoku a esto, en cuyo caso creo que debe ser NP-difícil. Dicho esto, ha pasado un tiempo desde que tuve que pensar en NP para poder equivocarme.

Respuestas (1)

Puede resolver esto usando el flujo máximo en tiempo polinomial.

Considere un gráfico dirigido con nodos { S , F } A B . Los bordes, todos los cuales tienen peso 1, son { S a | a A } { a b | b a , a A } { b F | b B } .

Entonces el flujo máximo de S a F es la respuesta a tu problema.

Tenga en cuenta que para el flujo máximo, si todos los pesos de los bordes del gráfico son números enteros, el flujo máximo tendrá un flujo de números enteros en cada borde. Es por eso que esta reducción funciona.

Editar:

De hecho, esto se puede considerar como un caso especial de coincidencia bipartita máxima.