20
правок
Изменения
Нет описания правки
== Сокращенная ДНФ ==
Запишем известную [[Определение булевой функции|функцию]] <tex>\left<x, y, z\right> </tex> (медиана) в [[СДНФ]]:
<tex>(x \land y \land z) \lor (x \land y \land \lnot z) \lor (x \land \lnot y \land z) \lor (\neg x \land y \land z)</tex>.
Известно, что это выражение равносильно следующему:
#Никакие два слагаемых нельзя объединить по рассмотренному выше правилу.
#Ни один из конъюнктов не является подмножеством другогосодержится в другом. Например, <tex>(x \land y)</tex> — подмножество содержится в <tex>(x \land y \land z)</tex>.
}}
Функцию можно записать с помощью сокращенной ДНФ не единственным способом.
== Минимальная ДНФ ==
{{Определение
|definition =
Минимальная ДНФ {{---}} та такая сокращенная ДНФ, в которой содержится минимальное количество вхождений переменных.
}}
Каждая минимальная ДНФ является сокращенной, но не каждая сокращенная {{---}} минимальна.
Например, запись <tex>(x \land y) \lor (y \land z) \lor (x \land z)</tex> является минимальной ДНФ для медианы (она же сокращенная, как видно в примере выше); а запись <tex>(x \land y \land \lnot z) \lor (\neg x \land y \land z) \lor (x \land z)</tex> - не минимальная, но сокращенная ДНФ.<br>
== Минимизация ДНФ ==
=== Визуализация гиперкубами ===
[[Файл:Гиперкуб.PNG||right|рис. 1]]
Этот способ работает при количестве переменных не больше трёх (в противном необходимо вводить четвёртое или следующие за ним измерения для представления фигур).
Сначала мы рисуем куб в системе отсчёта Oxyz (названия координатных осей должны соответствовать соответствуют названиям переменных). Затем каждую вершину обрабатываем следующим образом:
*Если у нас конъюнкт, переменные в котором равны соответствующим координатам вершины (пример: вершине с координатами (0,1,1) соответствует конъюнкт <tex>(\neg X \wedge Y \wedge Z)</tex>, он равен единице при X=0, Y=1 и Z=1), то в эту вершину мы помещаем закрашенный чёрным кружок.
*В противном случае мы помещаем в вершину закрашенный белый кружок.
Например, для такой ДНФ: <tex>(X \wedge \neg Y \wedge Z) \vee (X \wedge Y \wedge Z) \vee (\neg X \wedge Y \wedge Z) \vee (\neg X \wedge Y \wedge \neg Z) \vee ( X \wedge Y \wedge \neg Z)</tex> мы получим такой следующий гиперкуб:<br><br> [[Файл:Гиперкуб.PNG|Гиперкуб, полученый нами(рис.]]1)Далее обработка гиперкуба идёт следующим образом:<br>Пока пока у нас есть незакрашенные вершины, мы выбираем грань, либо вершину, либо ребро, на которых больше всего закрашенных чёрным вершин и ещё не обработанных вершин.
*Если в данном гиперкубе есть грань, все вершины на которой закрашены чёрным, то мы можем записать её в качестве конъюнкта, где будет только переменная с неизменяющейся соответствующей ей координатой, например, грань, на которой лежат закрашенные вершины (0,1,1), (0,1,0), (1,1,0) и (1,1,1) мы можем записать как конъюнкт <tex>Y</tex>.
*Теперь мы смотрим, остались ли на рёбрах куба закрашенные и не отмеченные нами в ДНФ вершины. Если — да, то рёбра с такими вершинами мы можем записать в качестве конъюнкта, где будут только переменные с неизменяющимися соответствующим им координатами, например, ребро, соединяющее закрашенные вершины (0,1,1) и (1,1,1) мы можем записать как конъюнкт <tex>(Y \wedge Z)</tex>.
=== Карты Карно ===
{| border="1"
|
|}
<br>
*Теперь мы покрываем прямоугольниками (длины сторон которых — {{---}} степени двойки (1, 2, 4)) те ячейки карт Карно, которые содержат в себе единицу (на каждом ходу мы выбираем такой прямоугольник, чтобы он покрывал наибольшее количество ещё не покрытых клеток) до тех пор, пока не покроем все такие ячейки (для карт Карно на примере это выглядело бы так):
<br>
{| border="1"
===Метод Квайна===
Этот метод основан на применении двух основных соотношений:
:<tex>A x \lor A \neg x = A x \lor A \neg x \lor A</tex>
:<tex>A \tilde x \lor A = A </tex>
====Описание алгоритма====
Алгоритм завершается, когда подмножество является пустым, либо нельзя выполнить ни одной операции неполного попарного склеивания.
После выполнения алгоритма будет получена сокращенная минимальная форма
Импликанты, не подлежащие исключению, образуют ядро. Такие импликанты определяются по вышеуказанной матрице. Для каждой из них имеется хотя бы один столбец, перекрываемый только этой импликантой.
Для получения минимальной формы достаточно выбрать из импликантов, не входящих в ядро, такое минимальное их число с минимальным количеством букв в каждом из этих импликант, которое обеспечит перекрытие всех столбцов, не перекрытых членами ядра.
==Ссылки==
<references/>
*[http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D0%9A%D1%83%D0%B0%D0%B9%D0%BD%D0%B0 Минимизация логических функций методом Куайна — Википедия]
*http://matrixcalc.org/pf1.html
*[http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%B0%D1%80%D0%BD%D0%BE Карта Карно — Википедия]
*http://vuz.exponenta.ru/PDF/book/kv.html
*http://tablica-istinnosti.ru/minimizatsiya-dnf-metodom-kvayna.html