Теоретическая информатика

Системы счисления

Алгебра логики

Пошаговое решение задания №2. Задача 2.185 из сборника Полякова К.Ю. Шаги.

1) Замечаем, что значение внешней конъюнкции равно 1. Следовательно, обе части логического произведения равны 1. Понимаем, что значение w однозначно определено (w = 1).

2) Исследуем левую часть внешней конъюнкции. Эквивалентность по приоритету выполняется в последнюю очередь. Следовательно, для равенства 1 выражения в скобке, необходимо, чтобы выделенные выражения (-х*у и z) имели одинаковый знак. Подбираем наборы, когда обе части равны 0, затем, когда обе части равны 1.

3) Собираем значения, полученные в 1 и 2, в одну табличку. Имеем 4 набора для 4 переменных, при которых выражение принимает значение 1.

4) Выписываем табличку из задания и найденные наборы.

5) Понимаем, что w может быть только в третьем столбце. В остальных есть хотя бы один 0, поэтому они не подходят для w.

6) В первом столбце 2 нуля, во втором - 3, в четвертом - 1. В столбце х - 2 нуля, у - 2 нуля, z - 3 нуля. Следовательно z может быть только во втором столбце фрагмента таблицы из задания. Если будет где-то еще, то один из столбцов x или y разместить не получится.

7) Заметим, что строка 2 в исследуемом фрагменте таблицы имеет значения 11 для zw. Найдем её в таблице, которую получили при исследовании.

8) Для этой строки x = 0, y = 1.

9) Значит четвертый столбец в исследуемом фрагменте таблицы истинности - х, первый- y.

Ответ: yzwx.

Примеры программ для решения задания №15

Задача 15.92 из сборника К.Ю. Полякова

ПОИСК МИНИМАЛЬНОГО МНОЖЕСТВА

1) В качестве начального множества берем пустое.

2) Если находим элемент, при котором выражение имеет ненужный знак (0 при искомой 1 или наоборот), то добавляем данное значение в множество.

3) Профит, в нашем множестве теперь только нужные элементы.

Задача 15.107 из сборника К.Ю. Полякова

ПОИСК МАКСИМАЛЬНОГО МНОЖЕСТВА

1) В качестве начального множества берем множество, в котором элементов заведомо больше, чем в заданных.

2) Если находим элемент, при котором выражение имеет ненужный знак (0 при искомой 1 или наоборот), то удаляем данное значение из множества.

3) Вуа-ля, в нашем множестве остались только подходящие элементы.

PS: да, такой способ чувствителен к концам промежутка. Например, когда ищется длина промежутков типа [a; b) или (a; b].

Но лучше выводить сырые данные в А и анализировать глазками. Обычно это быстрее, чем написать алгоритм для обработки =)

ДИАПАЗОН ПЕРЕБОРА

Нужно очень хорошо понимать, в каком диапазоне нужно перебирать числа.

В задачах на делимость можно упростить подбор путем перемножения значений делителей, на диапазоны х и у - произведение значений умноженное на 2 (с запасом чтобы), видим квадраты - берем показатель больше указанных в задании и возводим в квадрат.

Поэтому нужно быть аккуратным и понимать, какие числа подставлять.

ГЕНЕРАТОРЫ ДЛЯ ПЕРЕБОРА

Чтобы не писать вложенные конструкции лучше использовать уже существующие решения - в Python библиотеку itertools.

ИСПОЛЬЗОВАНИЕ ALL и ANY

Еще одна полезная фича - в pascalabcnet такое тоже есть - позволяющая не писать алгоритм перебора. Если все (для all) или один (для any) перебираемые элементы истины. Очень удобно, смотри две картинки ниже

Да, нужна практика, чтобы их писать быстро. Зато код получается достаточно компактным и не требующим написания ручного алгоритма проверки.

PS: но все равно нужно научиться решать руками, чтобы быстро ориентироваться в ограничениях как минимум.

PPS: все это работает только потому, что у ответов к задачам есть ограничения. В общем случае задачу такие программы не решают.