Este no es un algoritmo particularmente inteligente, pero es polinómico y creo que debería funcionar. Toma cualquier set. Para cada elemento de este conjunto, cuente el número de conjuntos restantes que no lo contienen y recuerde qué conjuntos lo contienen. Elija el elemento con la cuenta más alta y vuelva a hacer las cuentas para los elementos restantes, ignorando los conjuntos que carecen del elemento que acaba de elegir. Continúe hasta que todos los conjuntos restantes hayan sido eliminados de la consideración.
Ejemplo: deje , , y . Luego tenemos conteos , y . Elegimos 1, eliminando los conjuntos y que no lo contenían; rehaciendo los conteos, tenemos y . Elegimos 2 como el siguiente elemento y eliminamos de la consideración. Ya hemos terminado, y nuestro conjunto de "huellas digitales" es . EDITAR: para completar el ejemplo, debe hacer que los otros conjuntos de huellas digitales salgan como ,A={1,2,3}B={2,3,4}C={2,4,6}D={1,3,5}c1=2c2=1c3=1BCc2=1c3=0D{ 3 , 4 } { 6 } { 5 }{1,2}{3,4}{6} y .{5}
No he pensado mucho en esto, pero intuitivamente, parece que debería funcionar. La idea es tomar con avidez como el siguiente elemento de la huella digital establecer el elemento que cubre los conjuntos más descubiertos.