python — количество выведенных неверных кортежей по существующим ограничениям

Я занимался этой проблемой уже несколько дней, но до сих пор не нашел решения. Позвольте мне объяснить это на простом примере.

Предположим, что существует массив целых чисел длиной 8. Каждая ячейка может принимать определенные значения. Первые 4 ячейки могут принимать 0 или 1, а другая половина может принимать 0, 1 или 2. Эти 3 массива могут быть некоторыми примерами.

{1,1,0,1,2,1,0,2}
{1,0,0,1,0,0,2,2}
{0,0,0,0,2,0,0,1}

Однако существуют некоторые ограничения для построения массивов следующим образом:

constraint1 = {0,0,-,-,-,-,-,-}  // !(constraint1[0]==0 && constraint1[1]==0)
constraint2 = {-,1,0,-,-,-,-,-}  // !(constraint2[1]==1 && constraint2[2]==0)
constraint3 = {-,-,-,-,1,1,-,0}  // !(constraint3[4]==1 && constraint3[5]==1 && constraint3[7]==0)

Для лучшего понимания;

{0,1,0,2,0,1,0,0}  // this is not valid, because it violates the constraint2
{0,0,2,2,1,1,0,1}  // this is not valid, because it violates the constraint1
{1,1,1,0,0,1,0,0}  // this is valid, because it violates none of the constraints

Вопрос в том, что мне нужно найти число предполагаемых t-кортежей (t-длины) из этих ограничений. Например, предположим, что один из созданных массивов, который не нарушает никаких ограничений, называется myArray, Если вы посмотрите на constraint1это означает, что если myArray[0] равно 0, несмотря ни на что myArray[1] должно быть 1. Потому что myArray[1] может принимать только 0 и 1, и если он получает 0, то он будет нарушать constraint1, Следовательно,

myArray[0]=0 => myArray[1]=1

Теперь, если мы посмотрим на constraint2 говорит, что если myArray[1] тогда 1 myArray[2] не может быть 0. Так как в нашем случае мы уже выбираем, что myArray[1] это 1, myArray[2] будет 0.

myArray[1]=1 => myArray[2]=0

Когда эти значения объединены, еще одно ограничение формируется как;

myArray[0]=0 => myArray[1]=1 => myArray[2]=0
myArray[0]=0 => myArray[2]=0  // new constraint
{2,-,0,-,-,-,-,-}

Я хочу строго подчеркнуть, что это очень простой пример, только чтобы проиллюстрировать вам проблему. В моем случае длина массивов меняется между 50-200. Числовые ограничения могут быть в диапазоне от 0 до 500 (может быть, даже больше). Я также хочу подчеркнуть, что все, что мне нужно, это число из предполагаемых ограничений, нет необходимости их искать.

Вот несколько подходов, которые я попробовал;

1) Найдите таблицу истинности опций для ограничений, которые имеют одинаковую по крайней мере одну общую опцию. Затем найдите все t-кортежи. Оказалось, что пространство очень большое.

2) Найдите все решения, которые не нарушают ограничений в математике (выполнимая задача), затем найдите, какие t-кортежи отсутствуют. Не может найти ни одного решения.

Проблема в том, что в этих подходах я пытался создать целое пространство, в котором я не нуждаюсь. Есть ли лучшие идеи, чтобы найти количество t-кортежей (ограничений), не перечисляя все пространство?

0

Решение

Задача ещё не решена.

Другие решения