Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

DisMathTPU_new

.pdf
Скачиваний:
64
Добавлен:
29.05.2015
Размер:
753.84 Кб
Скачать

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

Алгоритм Квайна МакКласки.

Начало. Задана совершенная ДНФ булевой функции.

Шаг 1. Построим список всех точек функции (булевых векторов) и упорядочим их по неубыванию числа единиц веса.

Шаг 2. Разобьем список на подмножества (классы) векторов одинакового веса. Обозначим через Ci класс векторов веса i.

Шаг 3. Выполним неполные склеивания всех соседних векторов классов Ci è Ci+1, i = 0; 1; : : : ; n 1. Участвующие в склеивании век-

торы ( и ) отметим, а полученные векторы ( ) занесем в новый

список и приведем в нем подобные.

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

Конец. Выписав из всех списков неотмеченные векторы, получим множество всех максимальных интервалов, оно задает сокращенную ДНФ исходной функции.

Пример. Продемонстрируем выполнение алгоритма, для наглядности сопровождая его шаги матрицами Грея.

Начало. Задана совершенная ДНФ булевой функции:

СовДНФ = a b c d _ a b c d _ a b c d _ a b c d _ a b c d _ a b c d _ a b c d:

Шаги 1, 2. Совершенную ДНФ представляем списком точек, упо-

рядочиваем их по весу и разбиваем на классы.

 

 

 

 

 

 

 

Список 0

Список 0 (упорядоченный)

 

 

 

 

 

 

c

0

0 0

0

 

C0

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

0 0

0 0

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

0

1 0

1

 

C2

2)

0 1

0 1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

3

 

 

0

1 1

1

 

C3

3)

0 1

1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

7

6

 

1

1

0

1

 

 

4)

1

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

4

 

 

1

1

1

1

 

 

5)

1

1

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

0

 

 

6)

1

1

1

0

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0 1

1

 

C4

7)

1 1

1 1

 

 

 

 

 

 

 

 

71

Шаг 3. Выполняя неполные склеивания векторов из классов C2 è C3, а затем C3 è C4, и отмечая в упорядоченном списке 0 склеиваемые векторы символом , получаем список 1 список интервалов, состоя-

щих из двух точек. Справа в новом списке указаны номера векторовучастников склеивания. Интервалы списка изображены на двух матрицах Грея.

 

Список 0

 

 

 

Список 1

C0

1)

0

0

0

0

 

1)

0

1

1 (2,3)

C2

2)

0

1

0

1

 

2) 1

0

1

(2,5)

C3

3)

0

1

1

1

 

3) 1

1

1

(3,7)

 

4)

1

0

1

1

 

4)

1

1

1

(4,7)

 

5)

1

1

0

1

 

5)

1

1

1

(5,7)

 

6)

1

1

1

0

 

6)

1

1

1

(6,7)

C4

7)

1

1

1

1

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

d

 

 

- 1

 

 

 

 

4

 

 

 

 

 

 

 

-

 

b

?

 

 

a

5

 

 

 

 

 

 

 

c

d

-- 36

b

?

a 2

Шаг 4. Список 1 не пуст, поэтому идем на шаг 2 (так как склеивания производились в строгом порядке сверху вниз , векторы в новом списке уже упорядочены по весу).

Шаги 2, 3. Разбиваем полученный список на классы C2, C3. Âû- полняя склеивания векторов из классов C2 è C3, получаем список ин- тервалов, состоящих из четырех точек (список 2). Приводим в нем подобные.

Список 1

 

 

 

Список 2

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

C2 1) 0

 

 

 

 

 

(1,5)

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

1 1 1) 1 1(

 

 

 

 

 

 

 

2)

 

1

0

1

 

2)

 

 

 

 

 

 

 

 

((1(((1 (2,3)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4)

1

 

1

1

 

 

 

 

 

 

C3 3)

1

1

1

 

 

 

 

 

 

 

 

 

 

5)

1

 

 

1

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

1

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6)

1

1

1

 

 

 

 

 

 

 

 

 

 

Шаг 4. Список 2 не пуст, но дальнейшее склеивание невозможно, поэтому список 3 окажется пустым, идем на конец.

72

Конец. Выписываем из всех списков неотмеченные векторы. Они

задают сокращенную ДНФ:

 

I1

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

I1 = 0 0 0 0

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I2

= 1

 

1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- I4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I3

= 1 1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

I4

=

 

1

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СокрДНФ = a b c d _ a c d _ a b c _ b d:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K1

 

K2 K3 K4

 

 

 

 

 

 

 

 

 

 

 

11.1.2. Теорема Блейка и алгоритм Блейка Порецкого

Второй метод построения сокращенной ДНФ основан на теореме.

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

Алгоритм Блейка Порецкого.

Начало. Задана произвольная ДНФ булевой функции.

Шаг 1. Построим список троичных векторов, представляющих конъюнкции ДНФ. Удалим из списка все векторы, поглощаемые другими. Если останется лишь один вектор, пойдем на конец. Иначе обозначим второй из оставшихся векторов через .

Шаг 2. Найдем для вектора очередной смежный вектор среди векторов, расположенных в списке выше . Если такого вектора нет, то идем на шаг 5. Иначе обобщенно склеим и и полученный векторприпишем к списку последним.

Шаг 3. Если вектор поглощается хотя бы одним вектором из списка, то удалим (в частном случае может совпадать с одним из векторов списка, тогда удалим именно приписанный вектор , иначе произойдет "зацикливание"алгоритма, так как вектор будет вновь появляться в списке) и идем на шаг 2. Если вектор не поглощается,

то удалим все векторы, поглощаемые им.

Шаг 4. Если вектор не удален, то идем на шаг 2.

Шаг 5. Если вектор был не последним в списке, то выберем в качестве нового следующий по списку вектор и вернемся на шаг 2.

Конец. Неудаленные векторы задают сокращенную ДНФ функции.

73

Алгоритм Блейка-Порецкого отличается от рассмотренного ранее алгоритма Квайна-МакКласки прежде всего тем, что оперирует с произвольной ДНФ, в то время как алгоритм Квайна-МакКласки требует на входе совершенную ДНФ. Конечно, можно перейти от произвольной ДНФ к совершенной, как показано в подразделе 8.2, но она может быть очень длинной, и применение алгоритма Квайна-МакКласки станет неэффективным.

Пример. Продемонстрируем алгоритм Блейка-Порецкого, сопровождая его выполнение матрицами Грея.

Начало. Задана произвольная ДНФ функции из примера к алгоритму Квайна МакКласки:

ÄÍÔ = a b c d _ a b c d _ a b c d _ a b d _ a b c _ a c d:

Шаг 1. ДНФ представляем списком векторов и нумеруем их.

1)

0 0

0

0

1YHH

 

 

d

c

 

 

 

 

4

2) 1 1

0

1

 

 

 

3) 1 0

1

1

 

 

 

 

-

5

4)

0 1

 

1

 

 

 

-

 

5)

1 1

1

 

b

H

 

 

 

 

 

 

 

 

 

H

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

2

 

jH

 

 

6)

1

1

1

 

?6

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

1)

0 0

0

0

 

 

 

 

c

 

 

 

 

 

 

c

 

 

 

 

 

 

d

1YH

 

d

 

 

(3) 1 0

1

1

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

2)

1 1

0

1

 

 

 

 

 

H

 

 

 

 

 

 

 

((((((((

 

 

 

 

 

 

 

 

 

- 4

 

4) 0 1

 

1

 

 

 

 

 

 

 

-

 

 

5)

1 1

1

 

b

 

H

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

H

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

jH

a

 

 

 

 

 

 

 

6)

1 1

1

 

 

?6

 

3

 

 

?6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 2. Для нет смежного вектора среди предыдущих, идем на

øàã 5.

Шаг 5. Так как вектор был не последним в списке, то в качестве нового рассматриваем следующий по списку (четвертый) вектор (см. следующую страницу) и возвращаемся на шаг 2.

74

Шаг 2. Вектор не смежен первому вектору, но смежен второму (по первой компоненте). Обозначаем второй вектор через . Обобщенно склеиваем и и записываем результат вектор в список

седьмым. Отмечаем, что он получен из четвертого и второго (левая нижняя матрица показывает склеивание).

1)

0

0

0

0

 

 

 

 

 

 

c

1YHH

 

 

 

c

 

 

 

 

 

 

d

 

 

d

 

2) 1 1

0

1

 

 

 

 

 

 

 

 

 

4) 0

1

 

1

 

 

 

 

 

 

-

 

 

 

 

 

-

5)

1

1

 

 

 

 

 

 

 

 

 

- 5

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6)

1

 

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

b

 

 

 

 

 

 

 

 

0

1

(4,2)

a

 

?

 

 

a

 

? ?

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

7)

 

 

 

 

 

 

 

 

 

 

2

7

6

 

 

 

Шаг 3. Вектор не поглощается ни одним вектором, поэтому остается в списке. Удаляется второй вектор, он поглощается вектором .

1)

0

0

0

0

 

 

 

c

 

H

 

 

 

c

 

 

 

d

 

 

 

d

 

(2)((1(1

0

1

 

 

 

 

 

 

 

 

 

(((((

 

 

 

1YH

 

 

 

 

4)

0

1

 

1

 

 

 

 

 

 

 

 

-

5)

1

1

 

 

 

 

 

 

 

- 5

1

 

 

 

 

 

 

 

 

 

 

 

 

6)

1

 

1

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

b

 

 

 

 

 

 

 

 

 

a

 

?

 

a

 

? ?

 

 

7)

1

0

1

 

2

 

 

 

 

7

6

 

 

 

Шаг 4. Так как вектор не был удален, идем на шаг 2.

Шаги 2, 5. Так как для вектора перебраны все предыдущие, то идем на шаг 5. Так как был не последним в списке, то в качестве нового рассматриваем пятый вектор (см. ниже) и идем на шаг 2.

Шаги 2 4. Вектор смежен четвертому вектору . Обобщенно склеиваем и и записываем в список восьмым. Вектор не по-

глощается ни одним вектором, поэтому остается в списке. Вектор

íå

поглощает ни один вектор, в том числе . Идем на шаг 2.

 

 

 

1) 0

0

0

0

 

 

 

 

c

 

1HYH

 

d

c

 

 

 

 

 

 

 

 

4) 0

1 1

 

 

 

-

- 8

5) 1

1

1

 

 

 

-

 

 

 

-

 

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

6) 1

 

1

 

 

 

 

 

-

 

 

 

 

 

 

-

 

1

1

 

 

 

 

 

 

 

 

 

7)

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

(5,4)

a

 

 

 

 

a

 

 

 

 

 

 

1

 

 

 

 

 

? ?

 

 

 

8)

 

 

 

 

b

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

6

 

 

 

 

Шаги 2, 5. Для вектора перебраны все предыдущие, поэтому новым становится шестой вектор, идем на шаг 2.

75

Шаги 2 3. Вектор смежен четвертому вектору (см. ниже). Обобщенно склеиваем и и записываем результат в список девятым. Вектор совпадает с восьмым вектором, то есть поглощается им, поэтому тут же удаляем вектор из списка. Идем на шаг 2.

 

1)

0

0

0

0

 

 

 

c

 

 

 

 

 

c

 

 

5) 1

1

1

 

 

 

 

 

1

 

d

 

 

 

 

-

 

 

-

 

4) 0

1 1

 

 

 

d

 

 

YHH

 

 

 

 

 

 

 

- ,8

 

 

 

 

- 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

6)

1

 

1

1

 

 

 

 

 

 

 

 

 

 

7)

 

0

1

 

 

 

 

 

 

 

 

 

 

- 5

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

8)

 

1

1(((

a

?

 

 

a

 

 

? ?

 

 

 

 

 

 

 

1

 

b

 

 

 

 

b

 

 

 

 

 

 

((

((((

1

(6,4)

 

 

 

 

 

 

 

7

 

 

 

 

1

1

 

 

 

 

 

 

 

 

 

 

9)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаги 2, 5. Для вектора больше нет смежных среди предыдущих, поэтому новым будет седьмой вектор, идем на шаг 2.

Шаги 2 4. Вектор смежен пятому вектору . Обобщенно склеиваем их и записываем результат в список десятым. Вектор не

поглощается ни одним из предыдущими векторов списка и не поглощает ни один вектор, поэтому идем на шаг 2.

 

1)

0

0

0

0

 

 

 

 

 

c

 

 

 

 

 

 

c

 

5) 1

1

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

d

 

d

-

 

 

4) 0

1 1

 

 

 

 

 

 

 

YHH

 

 

 

- 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6)

1

 

1

1

 

 

 

-

 

 

 

 

 

 

4

 

7)

 

0

1

 

 

 

 

 

 

 

 

 

 

 

- 5

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

a

 

 

 

 

 

 

 

8) 1 1 1

? ?

 

 

 

b

? ? ?

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

10) 1

1

1 (7,5)

 

 

 

 

 

 

 

10 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаги 2 3. Вектор смежен шестому вектору . Обобщенно склеиваем их и добавляем в список одиннадцатым. Он совпадает с де-

сятым вектором, поэтому удаляем из списка. Идем на шаг 2.

 

 

1)

0

0

0

0

 

 

 

 

c

 

 

 

 

 

 

 

c

 

 

 

 

 

1

 

 

 

 

1

 

 

 

 

 

 

5) 1

1

 

 

 

 

 

 

-

 

 

4) 0

1 1

 

 

 

d

 

YHH

 

 

 

d

- 8

6) 1

 

1

1

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 5

7)

 

1

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8)

 

1

1

1

a

b

 

 

 

a

b

 

 

 

 

 

 

 

 

 

 

 

 

 

? ? ?

 

 

? ? ?

 

 

 

 

10)

1

1

 

 

1

 

,10

 

 

 

 

10 6

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1(1

(

(((

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11)

 

1

(7,6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

((

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

76

Шаги 2, 5. Так как для перебраны все предыдущие, то в качестве нового рассматриваем восьмой вектор и идем на шаг 2.

Шаги 2 4. Вектор смежен только седьмому вектору . Обобщенно склеиваем их и записываем результат в список двенадцатым. Вектор поглощает четвертый, седьмой, восьмой и десятый векторы, поэтому удаляем их из списка. Так как вектор оказался вычеркнутым, идем на шаг 5.

 

1)

0

0

0

 

0

 

 

 

c

 

 

 

 

d

c

 

((

1

1

 

 

 

 

 

-

4

1YH

 

 

 

 

5)

1

 

 

 

 

 

 

 

 

 

 

 

 

 

((((

 

 

 

d

 

 

 

 

 

 

 

 

1(

 

 

 

 

 

 

'$

 

 

 

 

4)

0

 

 

 

1

 

 

 

-

 

 

 

((

 

 

 

 

 

 

 

 

H

 

 

 

 

 

6)

1

 

1

 

 

 

 

 

 

 

 

 

 

- 5

 

 

 

1

 

 

 

 

 

 

 

 

@

 

 

 

7)

(((1

0

 

((

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

@

 

 

 

 

@

 

 

((

 

((

 

 

 

 

 

 

 

 

 

8)

 

 

 

a

 

@

 

a

 

?

 

 

 

((1

(1(1

(

? ?

 

 

 

 

 

 

 

 

 

 

 

 

 

(

b

&%

b

 

 

R@

 

 

(((

 

 

 

 

 

 

 

 

R@

 

 

 

 

12

1((

(((

 

10

 

 

 

 

 

6

 

 

10)

1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

((((

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12)

1

1 (8,7)

 

 

 

 

 

 

 

 

 

 

 

Шаг 5. Выбираем в качестве нового двенадцатый вектор и идем

íà øàã 2.

Шаги 2, 5. Так как для двенадцатого вектора нет смежных среди предыдущих, то идем на шаг 5. Вектор был последним в списке, поэтому идем на конец.

Конец. Невычеркнутые из списка векторы задают сокращенную ДНФ:

I1

= 0

0

0

0

 

 

 

 

 

 

 

 

 

I2

= 1

1

1

 

СокрДНФ =

 

b

 

d _ a b c _ a c d _ b d:

a

c

I3 = 1 1 1

 

 

K1 K2 K3 K4

I4

= 1

1

 

 

 

 

 

 

 

 

 

Результат совпадает с сокращенной ДНФ, полученной ранее (стр. 73) алгоритмом Квайна-МакКласки, и это естественно, так как сокращенная ДНФ булевой функции единственна.

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

77

Результат применения алгоритма выглядит следующим образом.

1)

0

0

0

0

 

 

 

 

((((

 

2)

((((

1

7

1

1

0

(

 

 

((((

 

3)

((((

1

6

1

0

1

(

 

 

((((

 

 

 

(((

 

12

4)( 0

1

1

 

(

 

 

 

 

5)1 1 1

6)1 1 1

(((((

7)(((1( 0 1 (4,2) 12

((((

8)(((1( 1 1 (5,4) 12

((((

9)(((1( 1 1 (6,4) 8

((((

10)((1(1( 1 (7,5) 12

((((

11)((1(1( 1 (7,6) 10 12) 1 1 (8,7)

Оставшиеся в списке векторы образуют решение.

Итак, нами изучен первый этап минимизации булевых функций построение сокращенной ДНФ:

из совершенной ДНФ (алгоритм Квайна-МакКласки);

из произвольной ДНФ (алгоритм Блейка Порецкого).

11.1.3. Упражнения

Упр. 1. Получить сокращенные ДНФ булевых функций алгоритмом Квайна-МакКласки и сравнить их с сокращенными ДНФ, найденнымè âèçуально.

c

 

 

 

c

 

 

 

c

 

 

 

 

 

d

 

 

d

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f1

 

 

 

 

 

 

 

 

f2

 

 

 

 

 

 

 

 

 

 

f3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

a

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

f4(a; b; c; d) = a b c d _ a b c d _ a b c d _ a b c d _ a b c d _ _ a b c d _ a b c d _ a b c d _ a b c d _ a b c d;

f5(a; b; c; d) = a b c d _ a b c d _ a b c d _ a b c d _ a b c d _ _ a b c d _ a b c d _ a b c d _ a b c d;

f6(a; b; c; d) = a b c d _ a b c d _ a b c d _ a b c d _ a b c d _ _ a b c d _ a b c d _ a b c d _ a b c d:

78

Упр. 2. Получить сокращенные ДНФ булевых функций алгоритмом Блейка-Порецкого и сравнить их с сокращенными ДНФ, найденными визуально.

f1(a; b; c; d) = a b c _ a c d _ a b c d _ a b c d _ a c d _ b c d;

f2(a; b; c; d) = a c d _ a b c d _ a b c d _ a c d _ a b d _ a b c;

f3(a; b; c; d) = b c d _ a c d _ a b c d _ a b c d _ a b c _ a b c:

Упр. 3. Получить сокращенные ДНФ булевых функций алгоритмами Квайна-МакКласки и Блейка-Порецкого и сравнить результаты (ДНФ для второго алгоритма найти любым способом). Проверить, представляют ли сокращенные ДНФ исходные функции, построением таблиц истинности.

f1(x; y; z; t) = x y t ! (x - z) ! x t x y z t; f2(x; y; z; t) = x y z _ (y ! x t ! (y x) ! y t); f3(x; y; z; t) = x t # y ! (x t z) ! x t _ x y z:

11.2. Построение таблицы Квайна и поиск ее покрытий второй этап минимизации

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

11.2.1. Таблица Квайна

Определение. Булевой матрицей назовем матрицу, элементами которой являются булевы константы (другими словами, строками и столбцами которой являются булевы векторы).

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

79

Определение. Таблицей Квайна булевой функции f(x1; : : : ; xn)

назовем булеву матрицу, строкам которой поставим в соответствие

конъюнкции сокращенной ДНФf (все максимальные интервалы функ-

ции), а столбцам конъюнкции совершенной ДНФ f (все точки). Элемент матрицы, стоящий на пересечении i-й строки и j-го столбца, по-

ложим равным единице тогда и только тогда, когда i-я конъюнкция сокращенной ДНФ поглощает j-ю конъюнкцию совершенной ДНФ (то есть i-й максимальный интервал функции содержит ее j-ю точку).

Пример. Рассмотрим булеву функцию f(a; b; c; d), для которой в

подразделах 9.2 9.3 визуально были найдены различные ДНФ. Построим для нее таблицу Квайна. Точки функции пронумеруем на левой матрице, а все максимальные интервалы изобразим на остальных двух матрицах.

 

 

 

c

 

 

c

 

 

 

 

 

c

 

1 2

d

A

d

 

 

 

 

 

d

 

3

4

 

 

 

 

 

-B

 

 

 

 

 

 

 

5 6

7

 

 

 

 

 

- E

 

 

 

 

 

8

9 10

 

 

 

 

 

 

 

 

 

 

a

 

 

a

 

 

 

 

 

a

 

 

? ?

 

 

 

 

?

?

 

b

 

 

 

 

b

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

D

 

 

 

H

 

G

 

 

 

 

 

 

 

 

- F

 

Таблица Квайна данной функции имеет следующий вид (нули в ней для наглядности опущены):

0000 0001 0101 0111 1100 1101 1110 1001 1011 1010

0 0 0

1

1

 

 

 

 

 

 

 

 

A

0 1 1

 

 

1

1

 

 

 

 

 

 

B

1 1 0

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

1

1

 

 

 

 

1 0 1

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

1

1

 

1 1 0

 

 

 

 

 

 

 

 

 

 

E

 

 

 

 

 

 

1

 

 

1

1 1 0

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

1

 

1

 

 

 

1 0 1

 

 

 

 

 

 

 

 

 

 

G

 

 

 

 

 

 

 

 

1

1

0 1

 

 

 

 

 

 

 

 

 

 

H

 

1

1

 

 

1

 

1

 

 

1

2

3

4

5

6

7

8

9

10

 

Обозначим полученную таблицу через Q, и будем демонстрировать на ней материал следующих разделов.

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]