Este problema surgió de las pruebas de software. El problema es un poco difícil de explicar. Primero daré un ejemplo, luego trataré de generalizar el problema.
Hay 10 elementos para probar, digamos A a J, y una herramienta de prueba que puede probar 3 elementos al mismo tiempo. El orden de los elementos en la herramienta de prueba no importa. Por supuesto, para pruebas exhaustivas, necesitamos 10 combinaciones de elementos C 3 .
El problema es más complejo. Existe una condición adicional de que una vez que se ha probado un par de elementos juntos, no es necesario volver a probar el mismo par.
Por ejemplo, una vez que ejecutamos las siguientes tres pruebas:
A B C
ADE
BDF
no tenemos que ejecutar:
ABD
porque el par A, B estaba cubierto por el primer caso de prueba, A, D estaba cubierto por el segundo, y B, D estaba cubierto por el tercero.
Entonces, el problema es, ¿cuál es el número mínimo de casos de prueba que necesitamos para garantizar que se prueben todos los pares?
Para generalizar, si tenemos n ítems, s pueden ser probados al mismo tiempo, y debemos asegurarnos de que se prueben todas las tuplas posibles (tal que s> t), ¿cuál es el número mínimo de casos de prueba que necesitamos en términos de n, syt?
Y finalmente, ¿cuál sería un buen algoritmo para generar los casos de prueba requeridos?