Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Archive / ОТКА / Кейс_ Теория автоматов_(для ЗА) / Задачник по дискретной математике.doc
Скачиваний:
117
Добавлен:
30.03.2015
Размер:
2.1 Mб
Скачать

2.4. Минимизация булевых функций

Цель минимизации – получить логическую функцию, эквивалентную заданной, но содержащую минимальное число соответствующих логических переменных. Методов минимизации существует достаточно много, но мы рассмотрим только наиболее часто используемые на практике.

Алгебраическое упрощение – это один из способов минимизации логических функций, в котором используются теоремы и законы Булевой алгебры.

Рассмотрим пример: пусть задана логическая функция, выраженная СДНФ:

Y =++++.

Алгоритм минимизации заключается в нахождении и группировании пары «соседних» наборов переменных с целью сокращения одной переменной по закону склеивания. Этот процесс продолжается до тех пор, пока не останется ни одна пара соседних наборов. Окончательное логическое выражение упрощается с помощью теорем склеивания или поглощения.

Y = ++++=+(b + ) +a(b + ) = =+(+a) = += (+=(по закону склеивания)+.

Последнее выражение представляет собой минимальную дизъюнктивную нормальную форму (МДНФ), элементарные конъюнкции которой называются простыми импликантами.

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

Минимизация методом Квайна–МакКласски – это табличный способ, состоящий в получении минимальной функции путем последовательного сравнения наборов, представленных в двоичной форме, и последующего склеивания соседних наборов. Этот метод используется для минимизации булевых функций с большим числом переменных и небольшим количеством фиктивных наборов. Кроме того, элементарный алгоритм метода Квайна–МакКласски позволяет легко осуществлять его программную реализацию.

Порядок минимизации рассмотрим на примере (рис. 14 и табл. 3). Пусть логическая функция задана диаграммой Эйлера-Венна и СДНФ этой функции имеет вид Y =++++.

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

Y1 = { 0,1,3,5,8} ;

Y0 = {2,7,9,13,15} ;

YФ = {4,6,10,11,12,14}.

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

Таблица единичных и фиктивных наборов

Наборы

Десятичные

эквиваленты

наборов

переменных

Переменные и их разряды

№ группы

a

b

c

d

8

4

2

1

Единичные

0

0

0

0

0

0

1

0

0

0

1

1

3

0

0

1

1

2

5

0

1

0

1

2

8

1

0

0

0

1

Фиктивные

4

0

1

0

0

1

6

0

1

1

0

2

10

1

0

1

0

2

11

1

0

1

1

3

12

1

1

0

0

2

14

1

1

1

0

3


Таблица сравнений 1

группы

Десятичные

эквиваленты

Переменные

Метки

a

b

c

d

0

0

0

0

0

0

1

1

0

0

0

1

4

0

1

0

0

8

1

0

0

0

2

3

0

0

1

1

5

0

1

0

1

6

0

1

1

0

10

1

0

1

0

12

1

1

0

0

3

11

1

0

1

1

14

1

1

1

0

- Все наборы, разбитые на группы по количеству единиц, располагаются в таблице сравнения 1 в порядке возрастания индекса группы. Одна группа наборов от другой отделяется чертой.

- Каждый набор очередной группы с индексом i последовательно сравнивают с каждым набором последующей группы с индексом i+1 для выявления соседних наборов и их объединения (склеивания). В результате такого объединения соседних наборов получаются наборы, уменьшенные на одну переменную. В столбце «метки» склеиваемые наборы отмечаются «».

Таблица сравнений 2 Таблица сравнений 3

0

0-1

0

0

0

-

0-4

0

-

0

0

0-8

-

0

0

0

1

1-3

0

0

-

1

1-5

0

-

0

1

4-5

0

1

0

-

4-6

0

1

-

0

4-12

-

1

0

0

8-10

1

0

-

0

8-12

1

-

0

0

2

3-11

-

0

1

1

6-14

-

1

1

0

10-14

1

0

1

-

10-14

1

-

1

0

12-14

1

1

-

0

0

0-1-4-5

0

-

0

-

0-4-1-5

0

-

0

-

повтор

0-4-8-12

-

-

0

0

0-8-4-12

-

-

0

0

повтор

1

4-6-12-14

-

1

-

0

8-10-12-14

1

-

-

0

4-12-6-14

-

1

-

0

повтор


- После окончания первого перебора все уменьшенные наборы заносятся в новую таблицу сравнения 2 по группам. Вместо сокращенной переменной ставится тире. Вновь повторяется процесс сравнения наборов в группах и их объединение. Использованные наборы каждый раз отмечаются меткой «».

- Процесс составления таблиц сравнения и «склеивания» соседних наборов повторяется до тех пор, пока это возможно. Если получаются одинаковые наборы, то, согласно закону повторения, оставляется только один из них, а остальные сокращаются.

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

Таблица покрытий

Простые импликанты

Рабочие наборы

Метки

0 0 0 0

0 0 0 1

0 0 1 1

0 1 0 1

1 0 0 0

0 0 - 1

+

+

¤

- 0 1 1

+

1 0 1 -

1 - 1 0

0 - 0 -

+

+

+

*

- - 0 0

+

+

×

- 1 - 0

1 - - 0

+

a b c d

*

*

¤

*

×

- Анализируют таблицу покрытий, сравнивая последовательно рабочие наборы и простые импликанты. Там, где импликанта покрывает рабочий набор, ставят метку «+». Поскольку при склеивании вместе с рабочими использовались и фиктивные наборы, то некоторые простые импликанты могут оказаться холостыми, т.е не покрывать ни одного рабочего наборы, в данном примере это импликанты «1 0 1 –», «1 – 1 0» и «– 1 – 0». Тем не менее все рабочие наборы должны быть покрыты и иметь хотя бы одну метку.

- Далее производится выбор минимального набора простых импликант, покрывающих все рабочие наборы. Для этого выбирают прежде всего обязательные простые импликанты, покрывающие тот или иной рабочий набор в единственном числе, т.е. те, которым соответствует только одна метка в столбце того или иного рабочего набора. В данном примере это будет импликанта «0 - 0 -». Отмечаем ее в крайнем правом столбце и ставим метку в нижней строке под теми рабочими наборами, которые она покрывает. Таким образом, остается еще два рабочих набора, которые могут быть покрыты импликантами «0 0 -1» и «- - 0 0». Аналогично ставим метки в правом столбце и в нижней строке. Три выбранные импликанты покрывают все рабочие наборы, следовательно, они и составят минимальную форму булевой функции.

Таким образом, минимальная логическая функция в виде ДНФ имеет следующий вид:

Y = d + +.

Для покрытия последних рабочих наборов можно было бы выбрать и другие импликанты, например: «– 0 1 1» и «1 – – 0». Тогда функция имела бы другой вид:

Y = c d + + a .

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

Минимизация методом Гаврилова-Копыленко применяется для сильно неопределенных логических функций, в которых безразличных состояний гораздо больше запрещенных. Рассмотрим алгоритм минимизации на примере уже известной функции:

Y1 = { 0,1,3,5,8}; Y0 = {2,7,9,13,15}; YФ = {4,6, 10,11,12,14}.

Процесс минимизации состоит из следующих этапов.

- Наборы, при которых функция имеет рабочее и запрещенное состояние, представляются в двоичном виде и записываются в таблицу переборов. Верхняя часть таблицы состоит из рабочих, а нижняя – из запрещенных наборов.

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

- Из обязательных переменных каждого рабочего набора составляются элементарные конъюнкции и помещаются в таблицу.

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

- Если конъюнкция является минимальной, то помечают рабочие наборы, которые покрываются этой конъюнкцией.

- Если остались неохваченные рабочие наборы, то проверяют следующую элементарную конъюнкцию на минимальность.

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

- Процесс получения минимальных элементарных конъюнкций осуществляется до тех пор, пока не будут охвачены все рабочие наборы.

Рассмотрим таблицу переборов для известного нам примера (рис. 14 и табл. 3).

Таблица переборов

Десятичные эквиваленты

Логические переменные

Метки

Элементарные конъюнкции

a

b

c

d

Рабочие

0

0

0

0

0

*

1

0

0

0

1

*

3

0

0

1

1

¤

d()

5

0

1

0

1

*

8

1

0

0

0

×

()

Запрещенные

2

0

0

1

0

7

0

1

1

1

9

1

0

0

1

13

1

1

0

1

15

1

1

1

1

Проверку на минимальность имеет смысл начинать с элементарных конъюнкций, имеющих наибольшее число переменных. Например, конъюнкция d не является минимальной, так как покрывается запрещенным набором 9, тогда к ней можно добавить обязательную переменную . Полученная конъюнкция d уже является минимальной и покрывает рабочий набор 3, который помечаем меткой «¤».

Следующая элементарная конъюнкция является минимальной и покрывает три рабочих набора 0, 1 и 5, которые помечаем меткой «*». Элементарная конъюнкция при последнем наборе 8 имеет всего одну переменную , которая не является минимальной. Добавим к ней переменную, полученная конъюнкция будет минимальной и покрывает последний рабочий набор.

Из выбранных элементарных конъюнкций составляем минимальную булеву функцию в виде ДНФ: Y = d + +.

Минимизация методом матриц Карно применяется в случаях, когда исходная функция содержит не более шести - семи логических переменных.

Возможности использования матриц Карно для минимизации булевых функций зависят от умения выделять группы клеток матрицы с одинаковыми состояниями функций, представляющих собой соседние состояния переменных. Такие группы соседних симметричных клеток называются подкубами. Таким образом, подкуб это набор клеток матрицы с одинаковыми состояниями функции, в котором одна или более переменных имеет постоянное значение. Число клеток в подкубе должно быть равно 2К, где к = 0, 1, 2, 3, . . . . Следовательно, подкубы могут быть одно-, двух-, четырехклеточными и т.д. При выделении одноклеточного подкуба ни одна переменная не исключается, поскольку одна клетка матрицы определяется одним полным набором; при выделении двухклеточного подкуба исключается одна переменная; при четырехклеточном исключаются две переменные и т.д. Подкубы являются симметричными сплошными или разнесенными прямоугольниками. При выделении подкубов руководствуются следующими правилами.

1. Клетки матрицы с одинаковыми значениями функции (только единичные или только нулевые) должны быть обязательно включены хотя бы в один подкуб.

2. Подкуб должен объединять возможно большее число клеток матрицы (из ряда 2К ) с одинаковым значением функции.

3. Размеры подкуба можно увеличивать за счет включения в них пустых (фиктивных) клеток матрицы.

4. Одна и та же клетка матрицы может быть включена в разные подкубы, если это способствует их расширению.

5. Число подкубов должно быть минимальным.

Следующим этапом минимизации после выделения подкубов является составление логических формул. Здесь следует рассмотреть два варианта:

а) выделение подкубов по логическим единицам;

б) выделение подкубов по логическим нулям.

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

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

Рис. 17 Рис. 18

Так, для известной нам булевой функции (рис. 14 и табл. 3) матрицы Карно и выделенные в них подкубы представлены на рис. 17 и 18.

Выделяя подкубы по единицам, получаем МДНФ: Y = d + +, то же – по нулям, получаем МКНФ: Y = (+ d) (+ ) (+) . Обычно выбирают тот вариант, в котором меньшее число переменных.