Вы находитесь на странице: 1из 7

Глава 1

Миними󰑬аци󰑱 булевых функций

Ранее мы вводили пон󰑱тие ди󰑬󰑫󰑧нктивной нормал󰑭ной формы (ДНФ, д. н. ф.) как


формулу специал󰑭ного вида
D = K1 ∨ K2 ∨ . . . ∨ Km ,

где все Kj 󰯹 попарно ра󰑬личные элементарные кон󰑫󰑧нкции (э. к.), формулы вида

K = xσi11 ∧ xσi22 ∧ . . . ∧ xσikk ,

где все символы переменных ра󰑬личны и xσ 󰯹 литерал (буква), который равен либо пере-
менной x (при σ = 1), либо её отрицани󰑧 x̄ (σ = 0). Число m 󰯹 на󰑬ываетс󰑱 длиной д. н. ф.,
а количество всех литералов 󰯹 её сло󰑨ност󰑭󰑧.

Пример 1. Рассмотрим д. н. ф.

D = x1 x2 ∨ x̄1 x3 ∨ x2 x̄3 x̄4 .

Д. н. ф. D состоит и󰑬 трех э. к. K1 = x1 x2 , K2 = x̄1 x3 и K3 = x2 x̄3 x̄4 и, следовател󰑭но, ее


длина D равна 3. Э. к. K1 состоит и󰑬 двух литералов x1 и x2 , K2 󰯹 и󰑬 двух литералов x̄1
и x3 , K3 󰯹 и󰑬 трех литералов x2 , x̄3 и x̄4 , поэтому сло󰑨ност󰑭 д. н. ф. D равна 7.

Как было пока󰑬ано ранее, л󰑧ба󰑱 булева функци󰑱 мо󰑨ет быт󰑭 представлена в виде
формулы (ра󰑬ло󰑨ение по переменным)
󰁢
f (x1 , . . . , xn ) = xσ1 1 ∧ xσ2 2 ∧ . . . ∧ xσnn (1)
σ̃:f (σ̃)=1

В правой части (1) 󰑬аписана совершенна󰑱 ДНФ. То󰑨дественно равна󰑱 нул󰑧 функци󰑱,
как следует и󰑬 определени󰑱 (1), мо󰑨ет быт󰑭 представлена в виде пустой ДНФ. Поэтому
л󰑧ба󰑱 булева функци󰑱 мо󰑨ет быт󰑭 представлена в виде формулы, 󰑱вл󰑱󰑧щейс󰑱 д. н. ф.,
причем, вообще говор󰑱, не единственным обра󰑬ом. Например,

x → y = x̄ȳ ∨ x̄y ∨ xy = x̄ ∨ y ,
󰁿 󰁾󰁽 󰂀 󰁿 󰁾󰁽 󰂀
D1 D2

поэтому две ра󰑬ные ДНФ D1 и D2 реали󰑬у󰑧т одну и ту 󰑨е функци󰑧.


Определение 1. ДНФ функции f (x̃) на󰑬ываетс󰑱 минимал󰑭ной д. н. ф. функции f (x̃),
если она содер󰑨ит наимен󰑭шее число литералов (другими словами, имеет наимен󰑭шу󰑧
сло󰑨ност󰑭) среди всех д. н. ф., реали󰑬у󰑧щих функци󰑧 f .

Определение 2. ДНФ функции f (x̃) на󰑬ываетс󰑱 кратчайшей д. н. ф. функции f (x̃),


если она содер󰑨ит наимен󰑭шее число кон󰑫󰑧нкций (другими словами, имеет наимен󰑭шу󰑧
длину) среди всех д. н. ф., реали󰑬у󰑧щих функци󰑧 f .

Дл󰑱 примера выше д. н. ф. D2 будет минимал󰑭ной и кратчай-


шей д. н. ф.функции x → y.

󰑪адача миними󰑬ации ДНФ 󰑬акл󰑧чаетс󰑱 в построении дл󰑱 прои󰑬вол󰑭ной 󰑬аданной


булевой функции f ее минимал󰑭ной (или кратчайшей) ДНФ. Минимал󰑭на󰑱 (кратчай-
ша󰑱) ДНФ мо󰑨ет ока󰑬ат󰑭с󰑱 не единственной. Обычно достаточно найти одну мини-
мал󰑭ну󰑧 (кратчайшу󰑧) ДНФ. Причем среди кратчайших отыскива󰑧т, как будет пока-
󰑬ано ни󰑨е, ДНФ с наимен󰑭шим числом вход󰑱щих в нее литералов.

Существует тривиал󰑭ный способ решени󰑱 󰑬адачи миними󰑬ации, 󰑬акл󰑧ча󰑧щийс󰑱 в по-


следовател󰑭ном построении ДНФ, 󰑬авис󰑱щих от переменных x1 , . . . , xn , в пор󰑱дке во󰑬рас-
тани󰑱 сло󰑨ности 󰯹 суммарного числа литералов (или кон󰑫󰑧нкций). Перва󰑱 по пор󰑱дку
ДНФ, реали󰑬у󰑧ща󰑱 󰑬аданну󰑧 функци󰑧 f ∈ P2 (n) и будет 󰑱вл󰑱т󰑭с󰑱 минимал󰑭ной (крат-
чайшей).
Однако такой способ приводит к перебору огромного числа ДНФ да󰑨е при небол󰑭-
ших 󰑬начени󰑱х n. Действител󰑭но, число ра󰑬личных ДНФ, составленных и󰑬 перемен-
n
ных x1 , . . . , xn , равно 23 , поскол󰑭ку л󰑧ба󰑱 переменна󰑱 мо󰑨ет входит󰑭 в прои󰑬вол󰑭ну󰑧
кон󰑫󰑧нкци󰑧 бе󰑬 инверсии, входит󰑭 в нее с инверсией или вовсе не входит󰑭. Поэтому чис-
ло ра󰑬личных элементарных кон󰑫󰑧нкций, построенных и󰑬 n переменных, ест󰑭 3n . Далее,
ка󰑨да󰑱 кон󰑫󰑧нкци󰑱 либо входит, либо не входит в л󰑧бу󰑧 ДНФ. Поэтому число ра󰑬лич-
n
ных ДНФ так велико и равно 23 . Если в действител󰑭ности кратчайша󰑱 ДНФ функции f
имеет длину ℓ, то при нахо󰑨дении кратчайшей ДНФ этой функции тривиал󰑭ным способом
придетс󰑱 построит󰑭 не менее
ℓ−1
󰁛
C3i n −1
i=1

ра󰑬личных ДНФ длины 1, 2, . . . , ℓ − 1 выбира󰑱 ра󰑬личные сочетани󰑱 по i = 1, 2, . . . , ℓ − 1



кон󰑫󰑧нкций и󰑬 3n − 1 (искл󰑧чена пуста󰑱) кон󰑫󰑧нкций.
В течении дес󰑱тилетий математики 󰑬анималис󰑭 проблемой пони󰑨ени󰑱 об󰑫ема перебо-
ра при миними󰑬ации, отыскива󰑱 существенно более эффективные, чем полный перебор,
2
способы нахо󰑨дени󰑱 минимал󰑭ных и кратчайших ДНФ. Бол󰑭шинство и󰑬 этих способов ос-
нованы на предварител󰑭ном искл󰑧чении и󰑬 рассмотрени󰑱 кон󰑫󰑧нкций, которые 󰑬аведомо
не вход󰑱т в минимал󰑭ные (кратчайшие) ДНФ.
Особенно плодотворными при и󰑬учении проблемы миними󰑬ации ДНФ ока󰑬алис󰑭
теоретико-мно󰑨ественный подход и ре󰑬ул󰑭таты, полученные 󰑰. И. 󰑮уравлевым.

1. Грани и интервалы. Покрыти󰑱. Карты Карно

Определение 3. Гран󰑭󰑧 единичного n-мерного куба на󰑬ываетс󰑱 мно󰑨ество


󰀋 󰀌
...σk = (α1 , . . . , αn ) ∈ B | αi1 = σ1 , . . . , αik = σk .
Bσi11,...,i k n

Мно󰑨ество {i1 , . . . , ik } 󰯹 на󰑬ываетс󰑱 направлением грани, k 󰯹 рангом грани, (n − k) 󰯹


ра󰑬мерност󰑭󰑧 грани.

Одномерные грани на󰑬ыва󰑧т ребрами куба.

Определение 4. Пуст󰑭 даны два вектора α̃ и β̃ такие, что α̃ 󰃙 β̃ и ρ(α̃, β̃) = r.


Мно󰑨ество
N (α̃, β̃) = { γ̃ ∈ Bn | α̃ 󰃙 γ̃ 󰃙 β̃ }

на󰑬ываетс󰑱 интервалом куба Bn . Число r на󰑬ываетс󰑱 ра󰑬мерност󰑭󰑧 интервала,


а k = (n − r) 󰯹 рангом интервала.

Мо󰑨но дока󰑬ат󰑭, что гран󰑭 ранга (ра󰑬мерности) k 󰑱вл󰑱етс󰑱 интервалом ранга (ра󰑬-
мерности) k.1

Определение 5. Мно󰑨ество

Nf = {x̃ ∈ Bn | f (x̃) = 1}

на󰑬ываетс󰑱 (единичным) покрытием функции f .

Ка󰑨дой функции f ∈ P2 (n) соответствует покрытие Nf и это соответствие, очевидно,


󰑱вл󰑱етс󰑱 в󰑬аимоодно󰑬начным.
Говор󰑱т, что функци󰑱 f ∈ P2 (n) поглощает функци󰑧 f1 ∈ P2 (n) (обо󰑬нача󰑧т f1 󰃑 f2 ),
если Nf1 ⊆ Nf2 .
Л󰑧ба󰑱 элементарна󰑱 кон󰑫󰑧нкци󰑱 K реали󰑬ует некотору󰑧 функци󰑧 и ей так󰑨е соот-
ветствует покрытие NK .
1Дока󰑬ат󰑭 самосто󰑱тел󰑭но.
3
Пока󰑨ем, что NK 󰑱вл󰑱етс󰑱 интервалом куба Bn . Действител󰑭но, так как
NK = {x̃ ∈ Bn | K(x̃) = 1}, K = xσi11 ∧ xσi22 ∧ . . . ∧ xσikk и NK содер󰑨ит все вектора α̃,
при которых K(α̃) = 1, то αi1 = σ1 , . . . , αik = σk (так как xσ = 1 при x = σ), то,
очевидно, NK обра󰑬ует гран󰑭 куба Bn ранга k, а следовател󰑭но 󰑱вл󰑱етс󰑱 и интервалом
куба Bn .
Очевидно, что дл󰑱 л󰑧бой ДНФ K1 ∨ . . . ∨ Km функции f выполн󰑱етс󰑱 теоретико-
мно󰑨ественное соотношение m
󰁞
Nf = N Kj ,
j=1

и обратно: ка󰑨дому покрыти󰑧 мно󰑨ества Nf интервалами, ле󰑨ащего в Nf и в об󰑫едине-


нии да󰑧щими Nf , соответствует некотора󰑱 ДНФ функции f .
В теоретико-мно󰑨ественной постановке 󰑬адача построени󰑱 минимал󰑭ной ДНФ сво-
дитс󰑱 к отыскани󰑧 такого покрыти󰑱 Nf интервалами NKj ⊆ Nf , чтобы сумма ран-
󰁓m
гов j=1 rank(Kj ) была минимал󰑭ной. При поиске кратчайшей ДНФ следует миними-

󰑬ироват󰑭 число интервалов, вход󰑱щих в покрытие.


Очевидно, что при решении 󰑬адач миними󰑬ации ну󰑨но рассматриват󰑭 тол󰑭ко те ин-
тервалы NK (и кон󰑫󰑧нкции K), дл󰑱 которых выполн󰑱етс󰑱 условие NK ⊆ Nf (K 󰃑 f ).
Такие интервалы и соответству󰑧щие им кон󰑫󰑧нкции на󰑬ыва󰑧тс󰑱 допустимыми.
Покрыти󰑱 функций и допустимые кон󰑫󰑧нкции удобнее всего строит󰑭 на картах Кар-
но. Ка󰑨да󰑱 клетка карты Карно в󰑬аимно одно󰑬начно соответствует некоторой вершине
куба Bn .
Карты Карно дл󰑱 n = 1, 2, 3 представлены на рисунке 1.

Рис. 1. Карты Карно дл󰑱 n = 1, 2, 3.

Линией с символом переменной обо󰑬нача󰑧т те 󰑱чейки таблицы, которые соответству-


󰑧т наборам со 󰑬начением 1 дл󰑱 этой переменной (см. рис. 2).
4
Рис. 2. Линии на картах Карно.

На основе испол󰑭󰑬овани󰑱 карт Карно мо󰑨но нагл󰑱дно представл󰑱т󰑭 булевы функ-


ции, ви󰑬уал󰑭но анали󰑬ироват󰑭 покрыти󰑱 функций и осуществл󰑱т󰑭 их миними󰑬аци󰑧 при
небол󰑭шом числе n переменных.
Такой подход к миними󰑬ации булевых функций на󰑬ываетс󰑱 табличным. На рисунке 3
представлено табличное 󰑬адание трех функций x1 & x2 , x1 ∨ x2 и x1 → x2 :

Рис. 3. Карты Карно дл󰑱 функций x1 & x2 , x1 ∨ x2 и x1 → x2 .

В клетку карты Карно (таблицы) ставитс󰑱 единица, если на соответству󰑧щем ей на-


боре 󰑬начений переменных функци󰑱 принимает единичное 󰑬начение. Пустые клетки соот-
ветству󰑧т нулевым 󰑬начени󰑱м функции. Вместо единиц часто испол󰑭󰑬у󰑧т точки.

Рис. 4. Карта Карно, где единицы функции отмечены точками.

Кодирование клеток таблицы имеет ва󰑨ну󰑧 особенност󰑭: соседние (по строке или
столбцу) клетки отлича󰑧тс󰑱 󰑬начением тол󰑭ко одной переменной в соответству󰑧щих им
двоичных кодах вершин куба Bn . Наборы, име󰑧щие ра󰑬личное 󰑬начени󰑱 тол󰑭ко в одной
5
переменной, как ранее определено, на󰑬ыва󰑧т соседними. Таким обра󰑬ом, соседние (сме󰑨-
ные) клетки в таблице соответству󰑧т соседним парам вершин Bn . Клетки, наход󰑱щиес󰑱
на противополо󰑨ных концах одной и той 󰑨е строки или столбца таблицы так󰑨е 󰑱вл󰑱󰑧тс󰑱
соседними 󰯹 соответству󰑧т двум соседним вершинам Bn .
Кодирование таблиц, по󰑬вол󰑱󰑧щее получит󰑭 ука󰑬анное свойство соответстви󰑱 клеток
таблицы вершинам куба Bn , обеспечиваетс󰑱 󰑬а счет применени󰑱 циклического симметрич-
ного кода Гре󰑱.
Если двоичный набор y1 y2 . . . yn 󰑱вл󰑱етс󰑱 представлением целого числа
n
󰁛
νy = yi ·2n−i ,
i=1

то код Гре󰑱 x1 x2 . . . xn , соответству󰑧щий двоичному числу y1 y2 . . . yn определ󰑱етс󰑱 по сле-


ду󰑧щему правилу (биекцией) Γ : Bn → Bn :
󰀻
󰁁
󰀿 x1 = y1 ,
󰁁
󰀽xi = yi ⊕ yi−1 , i = 2, . . . , n.

Таблица 1. Код Гре󰑱.

Дес󰑱тичное
представление Двоичный код Код Гре󰑱 x1 x2 x3 x4
числа
0 0000 0000
1 0001 0001 |
2 0010 0011 | |
3 0011 0010 |
4 0100 0110 |
5 0101 0111 | | |
6 0110 0101 | |
7 0111 0100 |
8 1000 1100 | |
9 1001 1101 | | |
10 1010 1111 | | | |
11 1011 1110 | | |
12 1100 1010 | |
13 1101 1011 | | |
14 1110 1001 | |
15 1111 1000 |
Кодирование таблиц осуществл󰑱етс󰑱 так, что переменные ра󰑬бива󰑧тс󰑱 на две группы,
содер󰑨ащие [n/2] и n − [n/2] переменных, где [n/2] 󰯹 цела󰑱 част󰑭 числа n/2; 󰑬дес󰑭 n 󰃍 2.
Перва󰑱 группа переменных испол󰑭󰑬уетс󰑱 дл󰑱 кодировани󰑱 по строкам, втора󰑱 󰯹 по столб-
цам. Такое ра󰑬биение ви󰑬уал󰑭но гора󰑬до удобнее дл󰑱 и󰑬учени󰑱 и миними󰑬ации покрытий.
6
Дл󰑱 сравнени󰑱 на рисунке 5 приведены два варианта кодировани󰑱: с ра󰑬биением перемен-
ных на группы и бе󰑬 ра󰑬биени󰑱 (при n = 4).

Рис. 5. Варианты кодировани󰑱: а) переменные ра󰑬биты на группы; б) ра󰑬-


биение переменных на группы нет.

Испол󰑭󰑬у󰑱 таблицу 4 × 4 на рис. 5 с ра󰑬биением переменных на группы {x1 , x2 }


и {x3 , x4 }, легко 󰑬аметит󰑭, что таблично 󰑬аданна󰑱 функци󰑱 мо󰑨ет быт󰑭 реали󰑬ована ми-
нимал󰑭ной и кратчайшей ДНФ

f (x1 , x2 , x3 , x4 ) = x1 x2 ∨ x3 x4 .

На однострочной таблице 󰑬адана та 󰑨е сама󰑱 функци󰑱, но ее ви󰑬уал󰑭но анали󰑬ироват󰑭


менее удобно. Фиксаци󰑱 󰑬начений переменных при помощи линий, отмеча󰑧щих строки и
столбцы таблиц, по󰑬вол󰑱ет легко выделит󰑭 л󰑧бой интервал Bn в виде совокупности 2n−k
клеток, где k 󰯹 ранг интервала.