Изменения

Перейти к: навигация, поиск

Сокращённая и минимальная ДНФ

139 байт добавлено, 22:02, 29 февраля 2012
Нет описания правки
Сначала мы рисуем куб в системе отсчёта <tex>Oxyz</tex> (названия координатных осей соответствуют названиям переменных). Затем каждую вершину обрабатываем следующим образом:
{| border="0"
|*'''Описание алгоритма''' |'''Пример''' |- |Если у нас конъюнкт, переменные в котором равны соответствующим координатам вершины, то в эту вершину мы помещаем закрашенный чёрным кружок. |*dершине Вершине с координатами <tex>(0,1,1) </tex>соответствует конъюнкт <tex>(\neg X \wedge Y \wedge Z)</tex>, он равен единице при <tex>X=0, Y=1</tex> и <tex>Z=1</tex>) |}-* |В противном случае мы помещаем в вершину закрашенный белый кружок.
Например, для |Для такой ДНФ: <tex>(X \wedge \neg Y \wedge Z) \vee </tex> <tex> (X \wedge Y \wedge Z) \vee </tex><tex> (\neg X \wedge Y \wedge Z) \vee </tex><tex> (\neg X \wedge Y \wedge \neg Z) \vee </tex><tex>( X \wedge Y \wedge \neg Z)</tex> мы получим следующий гиперкуб (см. рисунок) |- |Далее обработка гиперкуба идёт следующим образом:
пока у нас есть незакрашенные вершины, мы выбираем грань, либо вершину, либо ребро, на которых больше всего закрашенных чёрным вершин и ещё не обработанных вершин.
* |- |Если в данном гиперкубе есть грань, все вершины на которой закрашены чёрным, то мы можем записать её в качестве конъюнкта, где будет только переменная с неизменяющейся соответствующей ей координатой, например, грань. |Грань, на которой лежат закрашенные вершины <tex>(0,1,1), (0,1,0), (1,1,0)</tex> и <tex>(1,1,1)</tex> мы можем записать как конъюнкт <tex>Y</tex>.* |-  |Теперь мы смотрим, остались ли на рёбрах куба закрашенные и не отмеченные нами в ДНФ вершины. Если — да, то рёбра с такими вершинами мы можем записать в качестве конъюнкта, где будут только переменные с неизменяющимися соответствующим им координатами, например, ребро |Ребро, соединяющее закрашенные вершины (<tex>(0,1,1)</tex> и <tex>(1,1,1)</tex> мы можем записать как конъюнкт <tex>(Y \wedge Z)</tex>.* |- |И если после такой обработки у нас остались свободные вершины, мы просто переписываем координаты каждой такой вершины в отдельный конъюнкт, равный <tex>1</tex>. Например, вершину |Вершину <tex>(1,0,1)</tex> мы бы переписали как конъюнкт <tex>(X \wedge \neg Y \wedge Z)</tex>. |}
В итоге нашу изначальную ДНФ можно записать как <tex>(Y) \vee (X \wedge Z)</tex>.
|
|}
Теперь для каждого конъюнкта мы помечаем соответствующую ему ячейку таблицы.  Например, ДНФ
<br>
<br>
|}
<br>
Теперь покрываем прямоугольниками (длины сторон которых {{---}} степени двойки (1, 2, 4)) те ячейки карт Карно, которые содержат в себе единицу (на каждом ходу мы выбираем такой прямоугольник, чтобы он покрывал наибольшее количество ещё не покрытых клеток) до тех пор, пока не покроем все такие ячейки (для . Для карт Карно на примере это выглядело бы так):
<br>
{| border="1"
|}
<br>
После этого записываем каждый прямоугольник в виде конъюнкта, в котором будут указаны только те переменные, которые одинаковы для всех ячеек этого прямоугольника. То есть, в этом примере получаем:&nbsp;<tex>(\neg Z \wedge \neg X) \vee (\neg W \wedge \neg Y)</tex>
===Метод Квайна===
20
правок

Навигация