Метод мінімізації Квайна — Мак-Класкі також реалізує перехід від ДДНФ до мінімальної ДНФ з використовуванням операцій склеювання та поглинання. Він був запропонований В. Квайном, а потім удосконалений Мак-Класкі.
Алгоритм Квайна складається з таких кроків:
1. Записати ДДНФ заданої функції.
2. Виконати всі можливі операції неповного диз'юнктивного склеювання. Результуюча формула є диз'юнкцією всіх можливих імплікант даної функції.
3. Виконати всі можливі операції диз'юнктивного поглинання. Результуюча формула є скороченою ДНФ даної функції.
4. Скласти імплікантну таблицю і знайти диз'юнктивне ядро.
5. Спростити імплікантну таблицю за допомогою видалення рядків, що відповідають імплікантам диз'юнктивного ядра, і стовпців, що відповідають тим конституентам одиниці, які покриваються імплікантами ядра.
6. Знайти всі тупикові ДНФ даної функції.
7. Знайти мінімальну ДНФ.
Якщо при мінімізації деякої функції виходить, що спрощена імплікантна таблиця порожня, то тупикова ДНФ цієї функції є мінімальною і складається тільки з імплікант диз'юнктивного ядра. Якщо ж спрощена імплікантна таблиця не порожня, то в кожній тупиковій ДНФ функції, крім імплікант ядра, присутні і деякі прості імпліканти, що не входять до диз'юнктивного ядра. Набір даних імплікант визначає різниці між тупиковими ДНФ.
|
|
Зробивши попарне порівняння всіх елементарних ко-н'юнкцій, що входять у дану формулу, приходимо до висновку, що одержати інші елементарні кон'юнкції за допомогою операції склеювання в даній формулі неможливо. Таким чином, одержано диз'юнкцію всіх можливих імплікант даної функції:
Одержана формула є скороченою ДНФ даної функції. Складемо імплікантну таблицю (таблиця 4.33). її рядки задаються простими імплікантами, а стовпці — конституентами одиниці функції. Зірочкою відзначається кожна клітка таблиці, для якої імпліканта з рядка є власною частиною консти-туенти із стовпця.
Знайдемо диз'юнктивне ядро. До нього входить кожна проста імпліканта, яка є єдиною у покритті будь-якої консти-туенти одиниці. В імплікантній таблиці по одному знаку «*» містять стовпці, що відповідають конституентам одиниці хуг і хуг, напроти простих імплікант у z і у z. Ці прості імпліканти складають диз'юнктивне ядро. Складемо спрощену імплікантну таблицю. Для цього з імплікантної таблиці викреслюємо рядки, що відповідають імплікантам диз'юнктивного ядра, і стовпці, що відповідають конституентам одиниці, які покриті імплікантами ядра (таблиця 4.34).
В даному випадку імпліканти ядра покривають всі кон-ституенти одиниці, крім однієї, тому спрощена імплікантна таблиця має такий вигляд (таблиця 4.35):
|
|
Із спрощеної імплікантної таблиці знаходимо, що тупикові ДНФ даної функції, крім диз'юнктивного ядра, включають або імпліканту х z, або х у. Таким чином, одержуємо дві тупикові ДНФ для даної функції:
Вказані ДНФ містять по 6 символів змінних, а також однакову кількість знаків операцій диз'юнкції (2) і кон'юнкції (3), тому виберемо як мінімальну ДНФ1, що містить менше знаків операцій заперечення.
В методі Квайна для функції більшого числа змінних перелічення варіантів склеювання і множини тупикових ДНФ є значною складністю. Удосконалення, що введене Мак-Класкі, спрощує запис мінімізаційної формули. Згідно з його пропозицією конституенти одиниці записуються у вигляді двійкового коду — номери даної конституенти. Вказаний номер відповідає інтерпретації, на якій конституен-та дорівнює одиниці. Всі останні імпліканти, що одержані в результаті застосування операцій неповного склеювання, також записуються у вигляді двійкових кодів. У позиціях коду, що відповідають реальним змінним імпліканти, поміщається набір значень змінних, який обертає імпліканту на одиницю. В позиціях фіктивних змінних імпліканти ставиться прочерк. Таким чином, операції склеювання і поглинання проводяться не з самими імплікантами, а з їх двійковими кодами, що робить алгоритм простим у програмній реалізації.
Крім того, множина кодів імплікант ділиться на групи за кількістю одиниць, що в них утримуються. Оскільки операції неповного склеювання застосовні до імплікант, коди яких відрізняються значенням тільки в одній позиції, в склеюванні можуть брати участь тільки імпліканти, що належать до сусідніх груп, номери яких відрізняються на одиницю. Крім того, виконання операцій склеювання здійснюється покроково. На першому кроці здійснюються всі можливі склеювання конституент одиниці, на другому кроці здійснюється склеювання на множині імплікант, що одержані на першому кроці, тощо. Ділення на групи та кроки дозволяє істотно скоротити кількість перевірок пар імплікант на можливість здійснення склеювання і робить алгоритм більш ефективним.
При виконанні операцій поглинання з формули видаляються всі імпліканти, що не є простими. Результуюча формула зображує диз'юнкцію простих імплікант функції — її скорочену ДНФ. Імпліканти, що брали участь хоча б в одному склеюванні, не є простими. Отже, замість операцій поглинання можна видалити з формули всі імпліканти, що брали участь хоча б в одному склеюванні, з однаковим результатом. Тому при виконанні операцій склеювання одержані імпліканти позначаються. Після виконання всіх можливих склеювань позначені імпліканти видаляються. Це дає той же результат, що і при виконанні операцій поглинання.
Формальний метод знаходження множини всіх тупикових ДНФ функції був запропонований С. Петриком. У цьому методі кожній з простих імплікант функції, що не входять до диз'юнктивного ядра, приписується буквене позначення. Нагадаємо, що пошук простих імплікант проводиться у спрощеній імплікантній таблиці. За допомогою цієї таблиці записується логічна формула покриття конституент одиниці простими імплікантами. Для цього для кожної конституенти одиниці складається диз'юнкція літерних позначень всіх простих імплікант, які її покривають. Далі записується формула, що зображує кон'юнкцію одержаних елементарних диз'юнкцій. В формулі розкриваються всі дужки, після чого вона здобуває вид диз'юнкції елементарних кон'юнкцій. Кожна елементарна кон'юнкція в одержаній формулі відповідає одній з тупикових ДНФ функції. Для побудови такої ДНФ необхідно записати імпліканти, що відповідають літерним позначенням, які входять до складу даної елементарної кон'юнкції, й імпліканти диз'юнктивного ядра функції.
|
|
Приклад. Знайти за допомогою метода Квайна — Мак-Кла-скі мінімальну ДНФ функції f(x, у, г, t), що задана такою ДДНФ:
Розв'язок. У таблиці 4.36 запишемо конституенти одиниці даної функції у вигляді двійкових кодів у другий стовпчик. У першому стовпці запишемо десяткові номери інтерпретацій.
Відповідно до методу здійснимо такі кроки:
1. Згрупуємо двійкові коди імплікант з однаковою кількістю одиниць. Назвемо число одиниць т індексом групи. Упорядкуємо групи у порядку зростання т.
2. Починаючи з т = 0, зробимо порівняння кожного двійкового коду в групі з індексом т з кожним кодом з групи з індексом т + 1. Якщо порівнювані двійкові коди різні тільки в одному розряді, то у наступний стовпчик таблиці запишемо відповідний їм двійковий код з порожньою позначкою «-» на місці зазначеного розряду. Напроти кожного нового коду запишемо номери кодів двох імплікант, що брали участь у порівнянні, і у наступному стовпчику ці імпліканти позначимо знаком «V», оскільки вони не є простими імплікантами. Всі коди, які залишилися непо-значеними знаком «V», відповідають простим імплікантам, тому позначимо їх знаком «X».
3. Якщо серед знов одержаних імплікант є однакові, то з них для подальшого використання залишаємо тільки одну.
4. Повторюємо кроки 1-3 доти, доки існує можливість одержувати нові коди імплікант.
Результат виконання описаних кроків наведено у таблиці 4.37. Спочатку заповнюємо три стовпця нульового циклу: т (десятковий індекс групи), двійковий код імшпкан-ти, номер імпліканти. Імпліканти ділимо на групи за значенням т.
Потім здійснимо порівняння першої імпліканти з групи т = 0 (імпліканта 0000) з першою імплікантою з групи т = 1 (імпліканта 0001). Вони відрізняються тільки в одному розряді, тому робимо їх склеювання та одержуємо нову імпліканту з кодом 000-. Записуємо даний код у стовпчик коду імпліканти циклу 1, а напроти імплікант 0000 і 0001 ставимо позначки «V», оскільки вони не є простими. їх номери вказуємо поряд з кодом 000-. Потім порівнюємо імпліканту 0000 з другою імплікантою з групи т = 1 — імплікантою 0010 тощо.
|
|
Коли порівняння всіх кодів імплікант стовпця «цикл 0» завершено, аналізуємо стовпчик виду імпліканти. Напроти всіх імплікант ставимо позначення «V», оскільки в циклі 0 кожна імпліканта припускає склеювання і не є простою. Далі розділяємо на групи m = 0, т = 1 і т = 2 коди імплікант циклу 1. Потім попарно порівнюємо ці імпліканти й одержуємо стовпчик коду імплікант «цикл 2». Коди, що містять знаки «-», можуть утворювати нові імпліканти, тільки якщо вони містять знаки «-» в одних і тих же розрядах. Закінчивши порівняння, виділяємо прості імпліканти у стовпці «вид» «циклу 1», які не мають позначки «V», і позначаємо їх позначкою «X». У стовпці «код» «циклу 2» є однакові імпліканти, тому довільно викреслюємо один з однакових рядків, щоб кожна імплікан-та зустрічалася тільки один раз. Порівнюючи коди імплікант у «циклі 2», приходимо до висновку, що методом склеювання з них неможливо одержати нові імпліканти. Всі коди циклу 2 відповідають простим імплікантам, отже, побудову таблиці завершено.
Для знаходження тупикових ДНФ побудуємо імплікант-ну таблицю, в рядках якої розташовуємо двійкові коди, що відповідають простим імплікантам, а в стовпцях — коди, що відповідають конституентам одиниці. Якщо двійковий код рядку є частиною коду стовпця (позиції із знаком «-» не порівнюються), то у відповідну клітку таблиці записуємо знак «*» (таблиця 4.38).
Відзначимо стовпці таблиці, які містять по одному знаку «*». Відповідні їм прості імпліканти є диз'юнктивними ядрами. Викреслюємо рядки таблиці, що відповідають ядрам, і стовпці, покриті ядрами, як зображено у таблиці 4.39.
Тепер знайдемо всі тупикові ДНФ функції f(x, у, z, t) і оберемо з них мінімальну. Згідно з методом Петрика кожній з імплікант таблиці приписуємо літерне позначення і записуємо формулу покриття конституент одиниці простими імпліканта-ми. Конституента одиниці з кодом 0000 може бути покрита імплікантою D або імплікантою Е, тобто диз'юнкції: D v E. Конституента одиниці з кодом 1000 може бути покрита імплікантою А або імплікантою Е: A v E. Аналогічно 1100 може бути покрита A v С, а 1101 — диз'юнкцією В v С. Таким чином, покриття конституент одиниці спрощеної імплікантної таблиці функції f(x, у, z, t) простими імплікантами можна записати у вигляді формули покриття:
Якщо в цій формулі розкрити дужки, то отримаємо символьне зображення всіх можливих наборів простих імплікант для тупикових ДНФ, що не включає диз'юнктивні ядра:
В одержаній формулі кожна кон'юнкція буквених позначень відповідає набору імплікант у деякій тупиковій ДНФ, до якої обов'язково входять також диз'юнктивні ядра. Для того щоб одержати мінімальну ДНФ, необхідно вибрати набір з мінімальною кількістю імплікант (у даному прикладі це EC) і додати імпліканти ядра (0--1, -01-). Одержуємо мінімальну ДНФ вихідної функції f:
Таким чином, за допомогою метода Квайна — Мак-Класкі одержана мінімальна ДНФ функції f(x, у, г, t), яка містить всього лише 4 елементарні кон'юнкції замість 11 конституент одиниці ДДНФ.
Недолік методу мінімізації булевих функцій Квайна — Мак-Класкі полягає у необхідності записувати ДДНФ функції, яка вже при семи змінних може містити більше ста конституент одиниці. Наступний метод дозволяє здійснювати диз'юнктивну мінімізацію, використовуючи як вихідну довільну ДНФ функції.