Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Відповіді - Дискретна математика.doc
Скачиваний:
25
Добавлен:
18.09.2019
Размер:
9.65 Mб
Скачать
  1. Методи мінімізації булевих функцій: карти та куб Карно, метод Квайн-Мак-Класкі, метод Борецького-Блейка.

Может ну его нах?

Мінімізація булевих функцій методом карт Карно (діаграм Вейча)

Ціллю мінімізації є знаходження мінімальної з тупикових ДНФ (КНФ), тобто знаходження мінімального покриття даної функції. Для цього необхідно побудувати всі можливі тупикові ДНФ (КНФ), використовуючи операції склеювання та погли­нання для даної функції. Методика Карно і Вейча дозволяє виконати зазначені операції графічно.

Карта Карно для ДНФ (діаграма Вейча — для КНФ) є ана­логом таблиці істинності, зображеній у спеціальній формі. Зна­чення змінних розташовані у заголовках рядків і стовпців карти. Кожній конституенті одиниці функції відповідає одна клітка (комірка) таблиці. Нуль або одиниця в клітці визначає значення функції на даній інтерпретації. Значення змінних розташовані так, щоб сусідні (що мають спільну межу) рядки і стовпці таблиці відрізнялись значенням тільки однієї змін­ної. Тому запис інтерпретацій двох змінних у порядку (0, 0), (0, 1), (1, 0), (1, 1) неприпустимий, оскільки сусідні набори

(0, 1) і (1, 0) відрізняються значеннями обох змінних. У кар­тах Карно інтерпретації двох змінних розташовуються у такій послідовності: (0, 0), (0, 1), (1, 1), (1,0). У цій послідовності перша та остання інтерпретації також відрізняються значенням тільки однієї змінної, тому перший і останній рядки (стовпці) таблиці вважаються сусідніми (протилежні границі таблиці вважаються співпадаючими). При такому розташуванні мінтер-ми, до яких застосовна операція склеювання, розташовуються у сусідніх клітках карти, і склеювання проводиться графічно за допомогою об єднання кліток у групи.

Карти Карно для функцій двох змін­них мають вид таблиці 2х2, де стовпці відповідають значенням першої змінної, а рядки — значенням другої змінної. На рис. 4.1 зображено структури карти Кар­но, в клітках вказано відповідні мінтерми у виді формул з абстрактними змінними.

Структура карти Карно для функцій трьох змінних має вид таблиці 2 х 4, де стовпці відповідають всіляким наборам значень перших двох змінних, а рядки — значенням Oil третьої змінної (рис. 4.2). В клітках структури вказано відповідні мінтерми з абстрактни­ми змінними.

Для конкретної булевої функції карта Карно заповнюєть­ся таким чином. У клітках, що відповідні інтерпретаціям, на яких функція дорівнює одиниці, записують одиниці. Ці клітки відповідають конституентам одиниці, що присутні у ДДНФ функції. В інші клітки записують нулі.

Розв'язок. Побудова карти Карно для заданої функції: поміщаємо одиниці до кліток, що відповідають мінтермам, які присутні в даній ДДНФ, і нулі — в решту кліток (рис. 4.3).

До конституентів одиниці, що відповідають будь-яким двом сусіднім кліткам, можна застосувати операцію склею­вання, оскільки вони відрізняються тільки однією змінною. Зауважимо, що на карті Карно для функції трьох змінних кожна клітка має три сусідні клітки, на карті Карно для функ­ції чотирьох змінних — чотири, на карті Карно для функції п'яти змінних — п'ять тощт. При цьому для кліток на кар­ті Карно функції трьох змінних, розташованих у крайньому правому або у крайньому лівому стовпцях, сусідніми є кліт­ки, що розташовані безпосередньо зліва (або справа), вище (або нижче) у сусідньому рядку, і крайня ліва (або права) у тому ж рядку. Як приклад на рис. 4.4 відзначено клітки, сусідні з клітками А і В.

. Мінімізація функцій методом Квайна Мак-Класкі

Метод мінімізації Квайна — Мак-Класкі також реалізує перехід від ДДНФ до мінімальної ДНФ з використовуванням операцій склеювання та поглинання. Він був запропонований В. Квайном, а потім удосконалений Мак-Класкі.

Алгоритм Квайна складається з таких кроків:

  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 конституент одиниці ДДНФ.

Недолік методу мінімізації булевих функцій Квайна — Мак-Класкі полягає у необхідності записувати ДДНФ функції, яка вже при семи змінних може містити більше ста конституент одиниці. Наступний метод дозволяє здійснювати диз'юнкти­вну мінімізацію, використовуючи як вихідну довільну ДНФ функції.

Мінімізація функцій методом Порецького — Блейка

Метод мінімізації Порецького — Блейка реалізує перехід від довільної ДНФ функції до скороченої ДНФ за допомогою операцій узагальненого склеювання і поглинання.

Метод Порецького — Блейка полягає у застосуванні різних операцій узагальненого склеювання до ДНФ функції. Потім у одержаній формулі здійснюються всі можливі операції поглинання.

Очевидно, диз'юнкція лівих частин співпадає з функцією /". До знову одержаних імплікант може бути застосована опе­рація повного диз'юнктивного склеювання (п. 4.11.1):