Programación de clases para la satisfacción booleana [reducción del tiempo polinómico] parte 2

Hace unos días, hice una pregunta sobre cómo transformar un problema de programación de clases universitarias en un problema de satisfacción booleana.

(Programación de clases a la satisfacción booleana [Reducción del tiempo polinómico])

Recibí una respuesta de @Amit, que era muy elegante y fácil de codificar. Básicamente, su respuesta fue así: en lugar de considerar cursos, consideró intervalos de tiempo.

Entonces, para el i-ésimo curso, él solo acusó a todos los intervalos posibles para este curso. Y obtenemos una solución cuando hay al menos 1 intervalo verdadero para cada curso y cuando ningún intervalo se superpone a otro.

Este método funciona muy bien cuando consideramos solo cursos y nada más. Lo generalizo codificando la habitación dentro del intervalo.

por ejemplo, en lugar de [8-10] para decir que un curso puede ocurrir entre las 8 a.m. y las 10 a.m.

Usé [0.00801 - 0.01001] para decir que un curso puede ocurrir entre las 8 am y las 10 am en la sala 1.

Estoy seguro de que actualmente estás divagando "¿por qué usar el doble?" bueno, porque aquí viene mi problema:

Para continuar generalizando este método, codifico también el n ° del profesor en este intervalo.

Utilicé [1.00801 - 1.01001] para decir que un curso puede ocurrir entre las 8 am y las 10 am en la sala 1 y que el maestro n. ° 1 enseñe.

Esto es lo que tengo por ahora:

así [1.008XX - 1.010XX] puede suceder al mismo tiempo que [2.008YY - 2.010YY], lo cual es cierto, si el maestro 1 está enseñando en la sala X entre las 8 am y las 10 am, el maestro 2 también puede enseñar en Y entre las 8am y las 10am, si y solo si la habitación está disponible.

El problema es: con este método no puedo asegurar que XX e YY serán diferentes y que YY estará disponible, porque [1.008XX - 1.010XX] no se superponen [2.008XX - 2.010XX], así que por ahora, el solucionador Considera esto posible.

Y todavía no tengo idea de cómo asegurar esto, usando este método de intervalo ... Necesito una forma de codificar {Interval, room and teacher-id} para que:

un maestro no puede estar en 2 lugares en el mismo intervalo.no puede haber 2 profesores en la misma sala durante el mismo intervalo.hay un mínimo de 1 intervalo verdadero por curso.

Gracias de antemano por su ayuda, Saludos cordiales!

Siguiente pregunta: Programación de clases a satisfacción booleana [Reducción del tiempo polinómico] Parte final

Respuestas a la pregunta(1)

Su respuesta a la pregunta