Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книги / Фарфоровская Ю. Б., Дмитриева О. М., Рабкин Е. Л., Яновская Н. К. Дискретная математика.pdf
Скачиваний:
223
Добавлен:
17.06.2020
Размер:
1.75 Mб
Скачать

4.МАТЕРИАЛЫ К КОНТРОЛЬНОЙ РАБОТЕ

ИЗАДАНИЯ К НЕЙ

4.1.Решение типовых примеров

Вэтом разделе мы приведем некоторые полезные комментарии к типовым задачам.

1. В задачах 1–10, а требуется, используя правила де Моргана, привести к ДНФ выражение, содержащее конъюнкции, дизъюнкции и отрицания,

изатем, сократить ДНФ, если это возможно. Для этих задач есть точный алгоритм решения: мы «понижаем» отрицания по правилам де Моргана до тех пор, пока они не окажутся над одной переменной. После этого раскрываем скобки (используя естественные свойства конъюнкций, дизъюнкций и отрицаний, а также поглощение) и затем уже сокращаем ДНФ по правилу Блейка.

Заметим, что часто в наших примерах приходится раскрывать скобки

вида (х у z) (x u). Здесь необходимо учитывать, что дизъюнктные слагаемые, содержащие х, поглощаются слагаемым х. Поэтому после раскрытия скобок получится выражение x yu zu.

Пример 1. Привести выражение L к ДНФ, а затем сократить ее (если это возможно)

L x y y z x y .

Решение. L x y y z x y (x y)( y z)(x y) .

Далее, раскрываем скобки (мы видим, что удобнее сначала раскрыть произведение второй и третьей скобки). Поэтому получаем L x y y xz

xy x yz . По правилу Блейка (так как имеются дизъюнктные слагаемые, содержащие у и y ) к последнему выражению можно добавить слагаемое

x z, которое поглотит второе слагаемое в L. Таким образом: L x y xz .

В примерах 1–10, б надо просто применять правило Блейка, а затем уже правило поглощения.

2. Теорию, применяемую к задачам 11–20, мы подробно обсуждали ранее. Поэтому здесь мы ограничимся решением примеров.

Пример 2, а. Дана ДНФ L x y x y z . Требуется найти для этой функции полином Жегалкина и перейти от ДНФ к КНФ, а затем и к СКНФ. Сначала найдем полином Жегалкина. Для этого по правилам де Моргана «убираем» дизъюнкцию, а потом «убираем» отрицания по правилу x 1 x . После этого раскрываем скобки, учитывая при этом, что сумма четного числа одинаковых слагаемых (по модулю 2) равно 0, а нечетного – одному такому слагаемому. Тогда

71

L x y x y z = ((x + 1)(y + 1) + 1)(xy(z + 1) + 1) + 1 =

=(xy + x + y + 1 + 1)(xyz + xy + 1) + 1 = (xy + x + y)(xyz + xy + 1) + 1=

=хyz + xyz + xyz + xy+xy+ xy + ху + x + у + 1 = xyz + x + y + 1.

Последнее выражение и является полиномом Жегалкина.

Для того чтобы перейти к КНФ для выражения L, мы опять ставим над L два отрицания и, оставляя временно верхнее отрицание без изменения, приводим оставшееся выражение к ДНФ. Затем, по правилу де Моргана, получаем КНФ. Таким образом, мы получаем

L x y x yz (x y)(x y z) x y x y x z y z .

Далее заметим, что по правилу Блейка мы можем из последнего выражения исключить yz. Следовательно, L x y x y x z (x y)(x y)(x z) . Это и есть КНФ.

Чтобы из последнего выражения получить СКНФ, нужно в первой и второй дизъюнкции добавить z z , а в третьей y y . Затем нужно воспользоваться распределительным законом. Тогда получим

L (x y z z )(x y z z )(x y y z)

(x y z)(x y z )(x y z)(x y z )(x y z)(x y z).

Последнее выражение и есть СКНФ.

Пример 2, б. Пусть дано выражение L (x y)(x y z ) . Требуется

записать L в виде ДНФ, а затем перейти к СДНФ.

Ясно, что ДНФ можно получить простым раскрытием скобок. Так как в обеих скобках есть y , которое поглощает слагаемые, содержащие y , то L y x z . Это и есть ДНФ. Для того, чтобы получить СДНФ мы y умножаем на (x x )(z z ) , а x z умножаем на ( y y ) и раскрываем скобки.

Тогда L (x x) y (z z ) x ( y y) z x y z x y z x y z x y z x y z x y z .

Заметим, что мы с самого начала позаботились о правильном порядке переменных, что требуется для СДНФ. Однако последнее выражение еще не является СДНФ, так как содержит два одинаковых слагаемых. После уничтожения одного из них мы получим нужное выражение. Окончатель-

ный ответ: L x y z x y z x y z x y z x y z .

3. Разберем пример решения задач типа 21–30. Пример 3. Пусть требуется для функции

f(x, y, z) = (x z) | ((x y) (y z))

а) составить таблицу истинности; б) написать для нее СДНФ или СКНФ (если это возможно); в) сократить СДНФ по карте Карно;

г) найти по таблице истинности полином Жегалкина.

72

Решение:

а) в таблицу истинности полезно включить таблицы истинности промежуточных функций, поэтому таблица истинности для данной функции выглядит так:

xyz

x z

x y

y z

(x y) (y z)

(x z)|((x y) (y z)

000

1

0

0

1

0

001

0

0

0

1

1

010

1

0

0

1

0

011

0

0

1

0

1

100

0

0

0

1

1

101

1

0

0

1

0

110

0

1

0

0

1

111

1

1

1

1

0

б) составим СДНФ и СКНФ по этой таблице. В соответствии с теорией, изложенной ранее, СДНФ составляется по единицам таблицы истинности, причем если f(x, y, z) = 1, то в случае, когда х = 0, в соответствующей простой конъюнкции в СДНФ берется x , а когда х = 1, в СДНФ берется х. Аналогично поступают и с другими переменными. Поэтому СДНФ для данной функции имеет вид:

f (x, y, z) x y z x y z x y z x y z .

Аналогично, СКНФ составляется по нулям таблицы истинности, т. е. если f(x, y, z) = 0 и х = 0, то в соответствующей простой дизъюнкции берется х, а если х = 1, то x . Таким образом, СКНФ для данной функции имеет вид:

f (x, y, z) (x y z)(x y z)(x y z)(x y z) .

Заметим, что в соответствии с определением СДНФ и СКНФ, переменные (в каждой конъюнкции и дизъюнкции соответственно) должны следовать в одинаковом порядке;

в) составим полином Жегалкина по таблице истинности.

1 способ (метод неопределенных коэффициентов). Напишем сначала полином Жегалкина с неопределенными коэффициентами:

f(x, y, z) = 0 + 1x + 2y + 3 z + 4xy + 5xz + 6 yz + 7xyz.

Подставим в него по очереди все 8 наборов переменных и найдем коэффициенты полинома Жегалкина.

x = 0, y = 0, z = 0: 0 = 0; x = 0, y = 0, z = 1: 3 = 1; x = 0, y = 1, z = 0: 2 = 0;

x = 0, y = 1, z = 1: 2 + 3 + 6 = 1, 6 = 0; x = 1, y = 0, z = 0: 1 = 1;

73

x = 1, y = 0, z = 1: 1 + 3 + 5 = 0, 5 = 0; x = 1, y = 1, z = 0: 1+ 2 + 4 = 1, 4 = 1;

x = 1, y = 1, z = 1: 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 =0.

Так как 0 = 2 = 4 = 5 = 6 = 0, то 1 + 3 + 7 = 0, откуда 7 = 0, и полином Жегалкина для данной функции имеет вид: f(x, y, z) = x+ z (та-

ким образом, для данной функции у является фиктивной переменной).

2-й способ (метод бабочки).

x y z

f(x, y, z)

i1

i2

i3

0 0 0

0

0

0

0

0 0 1

1

1

1

1

0 1 0

0

0

0

0

0 1 1

1

1

0

0

1 0 0

1

1

1

1

1 0 1

0

1

1

0

1 1 0

1

1

0

0

1 1 1

0

1

0

0

Последняя итерация означает, что полином Жегалкина данной функции имеет вид: f(x, y, z) = x + z, что согласуется с предыдущим результатом.

г) составим теперь для данной функции карту Карно и сократим ее. Для этого составим таблицу:

xy

 

 

 

 

z

00

01

11

10

0

0

0

1

1

1

1

1

0

0

Отсюда f(x, y, z) = x z x z . Опять оказалось, что у – фиктивная переменная.

4. В задачах 31–40 требуется по карте Карно для функции 4 переменных составить сокращенную ДНФ. Надо иметь в виду, что в карте Карно первая и последняя строчки (столбцы) считаются соседними. Число единиц, которые мы можем объединять, равно 2, 4, 8, … (прямая, плоскость и т. д.)

Пример 4.

х3, х4

00

01

11

10

х1, х2

00

1

1

0

1

01

0

1

0

0

11

0

0

1

0

10

1

1

0

1

74

Получаем всего 4 объединения, т. е. 4 конъюнкции в ДНФ:

f (x1 , x2 , x3 , x4 ) x1 x2 x1 x4 x1 x2 x3 x1 x2 x3 x4 .

Заметим, что при правильно составленном объединении единиц использование правила Блейка (вместо карты Карно) может привести только

кДНФ с тем же числом символов переменных (в нашем примере их 11).

5.В задачах 41–50 требуется в данных наборах из 4 или 5 функций найти базисы и, значит, полные наборы функций (полные наборы – это наборы функций, содержащих базис).

Пример 5. Пусть имеется набор функций: 1) f1 (x, y, z) = (x y) (y z); 2) f2 (x, y) = x + y x; 3) f3 (x, y, z) = x (y z); 4) f4 (x, y) = x + y ; 5) f5 (x, y, z)= = x y z .

Составляем таблицу истинности для каждой из этих 5 функций. Заметим, что f2 и f4 являются функциями от 2 переменных, поэтому их таблицы

истинности составляем отдельно.

 

 

 

x, y, z

xy y z

f1 = (x y) (y z)

yz f3 = x y z

f5 = x y z

000

0

1

0

0

1

1

001

0

0

1

0

1

0

010

0

0

1

0

1

1

011

0

1

0

1

0

0

100

0

1

0

0

0

1

101

0

0

1

0

0

0

110

1

0

0

0

0

1

111

1

1

0

1

1

1

Отсюда очевидно, что f1(x, y, z) T0 (принадлежит Т0) и f1 T1, f1 M, S (т. е. не принадлежит Т1, М, S), аналогично f3 не принадлежит T0, M, S и

принадлежит Т1. Функция f5 принадлежит Т1 и не принадлежит Т0, М, S. Осталось проверить линейность этих функций:

f3 = x (y z) = x ( yz) = x + yz + 1, нелинейна;

f5 = x y z x y z = (x y + 1) z + 1 = x y z + z + 1, нелинейна.

Для f1 требуется проверка нелинейности. Составим полином Жегалкина для f1:

P = 0 + 1x + 2y + 3z + 4xy + 5xz + 6yz + 7xyz. Находим по-

следовательно k : 0 = 0, 3 = 1, 2 = 1, 4 = 0, 5 = 0, 1 = 1, 1 + 3+

+ 6 = 1, откуда 6 = 1; значит, функция f1 нелинейна (что, впрочем, следует и из того что f1 в таблице истинности содержит нечетное число единиц (равное 3)).

Для f2 и f4 составляем свои таблицы истинности.

75

x, y

xy

f2 = x + x y

f4 = x+ y

00

0

0

1

01

0

0

0

10

0

1

0

11

1

0

1

Отсюда следует, что f2 принадлежит T0, не принадлежит T1, не принадлежит M, S; f2 является полиномом Жегалкина: f2 = x + xy, f4 = x + y + 1 и, значит, принадлежит L, принадлежит также T1, но не принадлежит M, S. Все эти сведения сведем в таблицу Поста.

 

Т0

Т1

L

M

S

f1

+

f2

+

f3

+

f4

+

+

f5

+

 

 

 

 

 

Таким образом, мы видим, что базисами являются: 1) f1 и f3; 2) f1 и f4; 3) f2 и f4; 4) f1 и f5; 5) f2 и f5. Они являются полными наборами, как и любые наборы, содержащие эти базисы.

Замечание. Разумеется, те же базисы можно найти, раскрывая скобки

в КНФ F = ( f3 f4 f5 )( f1 f2 )( f1 f2 f3 f5 ) . Простые дизъюнкции для последних 2 столбцов записывать не имеет смысла, так как в них ока-

жутся записаны все данные функции, и при умножении такой простой дизъюнкции на любую другую получится эта другая.

6. В задачах 51–60 требуется по данному ориентированному графу составить структурную матрицу, а затем по ней (методами булевой алгебры) найти все пути из вершины i в вершину j, а затем (отрицанием этих путей) найти все сечения между двумя указанными вершинами. Пусть дан ориентированный граф (рис. 4.1), причем ребра a, b, h являются ориентированными (их направление указано стрелками), а остальные ребра не ориентированы. Требуется методами булевой алгебры найти пути и сечения между вершиной 2 и вершиной 4.

1

а

2

 

b

c

 

3

d

g e

4 h

f

5

Рис. 4.1

76

Составляем структурную матрицу S, затем вычеркиваем из нее 4-ю строчку и 2-й столбец (тем самым получаем минор М(4,2)):

 

1ab0g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1b0g

 

10g

 

1bg

 

 

01cdh

 

 

0cdh

 

 

 

S

0c1e0

, M

42

 

1

0dh

e

0ch

.

 

 

 

 

 

 

 

 

01e0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0de1f

 

 

 

 

 

 

gf1

 

g01

 

 

 

g0f1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gh0f1

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Тогда получаем M42 d gdg hf ec ebhg egcg .

Значит, искомые пути, расположенные в порядке прохождения ребер

будут: 24 = d hf ce hgbe.

Сечения же получатся отрицанием этих путей. Применяя правила де Моргана (т. е. заменяя конъюнкцию на дизъюнкцию и наоборот), затем раскрывая скобки, получим (мы опустили знаки отрицания во всех равенствах кроме первого):

S24 = 2 4 d hf ce hgbe d(h f )(c e)(h g b e) ,

S24= d(h f)(e ch cg cb) = d(he ch cgh сbh fe fch fcg fcb).

Или, применяя в скобках правило поглощения, получим

S24 = d(he ch fe fcg fcb),

S24=dhe dch dfе dfcg dfcb.

7. В индивидуальных заданиях 61–70 требуется найти в данной сети (т. е. в графе с заданными пропускными способностями ребер) максимальный поток из вершины с номером 1 в вершину с наибольшим номером (в наших заданиях либо вершину 5, либо 6). В заданиях заданы 2 графа (граф, который находится слева – это сеть с заданными пропускными способностями ребер и граф справа с заданным потоком, который необходимо либо улучшить, либо доказать,что он неулучшаем и, значит, является максимальным). Конечно, мы могли бы дать задание просто найти максимальный поток между двумя вершинами, однако, так как при работе вручную мы не можем дать большое число вершин (в наших заданиях это число

77

равно 5 или 6), а в этих случаях максимальный поток можно найти без всякой теоремы Форда – Фалкерсона (а просто из общих соображений), то задание в примерах 61–70 состоит в том, чтобы правильно расставить пометки для заданного потока, указанного в графе справа и после этого делать выводы о том, является ли этот поток максимальным или нет. Таким образом, задание в примерах 61–70 состоит в следующем: требуется, расстав-

ляя пометки в графе с заданным потоком с помощью алгоритма, описанного в теореме Форда – Фалкерсона найти максимальный поток между вершиной с номером 1 и вершиной с максимальным номером. При этом если улучшенный поток окажется максимальным, то нужно указать то минимальное сечение, которому равен наш поток (если же улучшенный поток не окажется максимальным, то нужно снова его улучшать до тех пор, пока он не окажется максимальным). На рис. 4.2, а изображен граф с данными пропускными способностями ребер, при этом вершина номер 1 является «источником», а вершина 6 является стоком. На рис. 4.2, б изображен тот же граф, но на ребрах его задан поток, (удовлетворяющий свойствам 1–4) и который надо либо увеличить, либо доказать, что он является максимальным. После этого мы подробно объясняем, как расставляются пометки в этом графе и результат этого мы показываем на рис. 4.3. Для нового потока (рис. 14) мы снова расставляем пометки и убеждаемся, что этот поток является максимальным (это изображено на рис. 4.4). Здесь же мы находим минимальное сечение, которому равен наш поток.

2

20

3

 

 

 

2

5

3

 

10

 

 

10

 

 

10

 

 

10

1

15

 

20

6

1

5

 

5

6

30

 

 

 

25

 

5

 

 

5

4

10

 

5

 

 

4

10

 

5

 

 

 

 

 

 

 

 

а)

 

 

 

 

 

б)

 

 

 

 

 

 

Рис. 4.2

 

 

 

 

Начинаем расставлять пометки во втором графе (там дан поток). 1-я вершина (источник) всегда имеет пометку (1, ) (это означает, что второе число – как угодно большое число). Далее, 2-ю вершину пометить пока нельзя, зато можно пометить вершину 4 и ее пометка будет (+1, 25). Это означает, что дуга (1, 4) прямая, ненасыщенная и по ней можно «перевезти» дополнительно 25 единиц «груза». Далее, вершину 5 пометить пока нельзя, но теперь можно пометить вершину 2 и ее пометка будет (–4, 20). Это означает, что дуга (4, 2) обратная и, учитывая возможный «разворот» ее, мы по ней можем дополнительно «перевезти» 20 единиц «груза». Так

78