¡Creo que encontré un ejemplo útil yo mismo!
Quizás era un poco vago, pero estaba buscando un problema que cumpliera con las siguientes especificaciones:
- El problema en sí debería ser fácil de explicar a alguien que estudia ciencias sociales.
- Debería tener un algoritmo obvio pero ineficaz.
- Debería tener un algoritmo mejor que también sea fácil de explicar a alguien que estudie ciencias sociales.
Para el Ciclo Euleriano es fácil explicar que es una condición necesaria que cada nodo debe tener un grado uniforme, pero no es tan fácil explicar por qué es una condición suficiente.
Este es el problema que creo que hasta ahora cumple mejor con la especificación anterior:
FORM_TARGET_SET_WITH_UNIONS
Colección de conjuntosC={S1,S2,...,Sn}
Conjunto de objetivosT
Pregunta: ¿Es posible formar el conjunto de objetivos tomando la unión de algunos de los conjuntos en ?TC
Algoritmo obvio pero ineficaz:
- Forme todas las uniones posibles2n
- Vea si uno de ellos corresponde aT
Mejor algoritmo
- Marque los conjuntos en que están contenidos enCT
- Forme la unión de estos conjuntosS∪
- Siresponda , de lo contrario responda|S∪|=|T|YESNO
También está el problema de la hermana.
FORM_TARGET_SET_WITH_INTERSECTIONS
para lo cual el mejor algoritmo es
- Marque los conjuntos en que contienenCT
- Forme la intersección de estos conjuntosS∩
- Siresponda , de lo contrario responda|S∩|=|T|YESNO
Como puede ver, estaba buscando algo realmente simple (casi tan simple como SUBSET_PRODUCT_IS_ZERO).
El problema también se puede contrastar con SUBSET SUM y SUBSET PRODUCT, que son NP completos pero similares en su formulación. En todos estos problemas, se le presenta una colección de objetos y se le pregunta si una operación en una selección de estos objetos puede producir el resultado deseado.