Задачи по теме «Минимизация булевых функций»

Задача 1. Построить минимальную или кратчайшую ДНФ булевой функции, заданной вектор-столбцом значений f(a,b,c,d) = (0111001100011111)

Решение.

1. По заданному вектор-столбцу значений функции построим таблицу истинности.

bcd

f(a,b,c,d)

0000

0

0001

1

0010

1

0011

1

0100

0

0101

0

0110

1

0111

1

1000

0

1001

0

1010

0

1011

1

1100

1

1101

1

1110

1

1111

1

2. По таблице истинности построим совершенную ДНФ, которая в нашем примере имеет вид

СовДНФ =

Используя формулы обобщенного склеивания и поглощения выполним склеивания и поглощения и получим ДНФ =

3. Представим каждую конъюнкцию троичным вектором, перенумеруем их и применим алгоритм Блейка-Порецкого.

Положим i = 2 и j = 1. Векторы 2 и 1 не склеиваются.

Увеличиваем i на 1, т.е. i = 3, j = 1. Векторы 3 и 1 склеиваются по первой компоненте, образуя вектор -11-. Но данный вектор поглощается вектором 2, значит, он не вносится в список.

Увеличиваем j на 1, т.е. j = 2. Векторы 3 и 2 не склеиваются.

Увеличиваем i на 1, т.е. i = 4, j = 1. Векторы 4 и 1 не склеиваются; j = 2. Векторы 4 и 2 склеиваются по второй компоненте, образуя вектор 0-11, который поглощается вектором 1 и, следовательно, в список не вносится. j = 3, и векторы 4 и 3 не склеиваются.

Теперь i = 5. Нетрудно убедиться, что вектор 5 не склеивается с вектором 1, но склеивается с вектором 2 по второй компоненте, образуя вектор –11. Полученный вектор не поглощается ни одним из существующих в списке векторов, следовательно, он заносится в список с номером 7 и помечается парой, состоящей из номеров векторов, которые, склеиваясь, образуют данный вектор. Далее из списка удаляются векторы, поглощаемые вектором 7. В нашем примере это векторы 5 и 6.

Поскольку 5 и 6 векторы удалены из списка, i = 7. Легко увидеть, что вектор 7 может склеиваться лишь с векторами, которые имеют 0 в третьей или четвертой компоненте, но таких векторов в списке нет. Значит, множество максимальных интервалов построено.

На языке ДНФ это значит, что построена СокрДНФ =

4. Обозначим оставшиеся интервалы большими латинскими буквами и построим матрицу Грея, выделив на ней данные интервалы.

Перенумеровав векторы (точки на матрице Грея) построчно слева направо, построим таблицу Квайна, строкам которой поставлены в соответствие максимальные интервалы (простые импликанты СокрДНФ), а столбцам – точки (полные конъюнкции СовДНФ). На пересечении i-й строки и j-го столбца ставится 1, если и только если j-й вектор принадлежит i-ому интервалу.

В нашем примере таблица Квайна имеет 5 строк и 10 столбцов.

 

1

2

3

4

5

6

7

8

9

10

A

 

1

1

1

1

 

 

 

 

 

B

 

 

 

1

1

 

 

1

1

 

C

 

 

 

 

 

1

1

1

1

 

D

1

1

 

 

 

 

 

 

 

 

E

 

1

 

1

 

 

 

1

 

1

Для того, чтобы построить кратчайшую ДНФ исходной функции, необходимо найти кратчайшее покрытие таблицы Квайна. Это покрытие < i>P ищется следующим образом.

Выбирается столбец с наименьшим числом единиц, в данном случае это столбец 1. Строка D вносится в покрытие P = {D}, и из таблицы удаляется строка D и все столбцы, на пересечении с которыми данная строка содержит 1. В данном случае это столбцы 1 и 2.

В новой таблице, состоящей уже из четырех строк и восьми столбцов, ищется столбец с наименьшим числом единиц. Это столбец 3. Строка A заносится в покрытие, т.е. P = { D, A}и удаляется из таблицы. После этого из таблицы удаляются столбцы 3, 4 и 5, которые содержат 1 в строке A.

Аналогичным образом можно установить, что строки C и E войдут в покрытие, т.е. P = {D,A,C,E}. Записав интервалы в виде конъюнкций, получим, что КратДНФ имеет вид .

В данном примере кратчайшая ДНФ является и минимальной. В общем случае, чтобы найти минимальную ДНФ, необходимо приписать строкам таблицы веса, равные внешним компонентам соответствующих интервалов. В терминах ДНФ это значит, что каждой строке приписывается ранг соответствующей элементарной конъюнкции. Требуется найти такое покрытие, чтобы сумма весов входящих в него интервалов была минимальной.

Таким образом, в результате получим КратДНФ = МинДНФ = .

Задача 2. Построить минимальную или кратчайшую ДНФ булевой функции, заданной вектором столбцом значений f(a,b,c,d) = (0111001101011111).

Задача 3. Построить минимальную или кратчайшую ДНФ булевой функции, заданной вектором столбцом значений f(a,b,c,d) = (0101011101111100).

Задача 4. Построить минимальную или кратчайшую ДНФ булевой функции, заданной вектором столбцом значений f(a,b,c) = (00111011).

Задача 5. Построить минимальную или кратчайшую ДНФ булевой функции, заданной ДНФ = .

<

Задача 6. Построить минимальную или кратчайшую ДНФ булевой функции, заданной формулой .