Приложение 3
П.3. Преобразование двоичных последовательностей
П.3.1. Постановка задачи
Пусть имеются две двоичные последовательности A(a1,a2,…,an) и
B(b1,b2,…,bn), При этом ai,bi Î {0,1}, i = 1,2,3,…,n. Элементы последователь-ности B будем получать булевым преобразованием последовательности A, при этом bi будет результатом булевого преобразования, зависящего от ai и некоторых элементов из окружения ai. Максимальное число аргументов булевой преобразующей функции F равно N= 2n-1. Так для n = 3 , N = 5, для n = 4, N = 7, для n = 5, N = 9.
П.3. 2. Теорема о преобразованиях двоичных последовательностей.
Сформулируем теорему, на основании которой можно строить булевы функции, преобразующиe одну последовательность в другую. Эта теорема являeтся аналогом теоремы, доказанной в [1].
Теорема. Для того, чтобы существовала булева функция F, преобразующая произвольную последовательность А в произвольную последовательность В необходимо и достаточно, чтобы А была бы ненулевой последовательностью. Число аргументов F не превышает 2n –1.
Необходимость следует из того, что при нулевой последовательности А все элементы последовательности В будут либо нулями, либо единицами и в этом случае В не может быть произвольной последовательностью.
Для доказательства достаточности построим часть таблицы истинности функции F , в которой функция определена:
a1
a2
… an
b1
a1 a2 … an b2
a1 a2 … an b3
………………………………………………
a1 a2 … an+1 bn
Если хотя бы один элемент последовательности А не равен 0, то все наборы, на которых функция определена будут различными, поэтому не существует ни одной одинаковой пары наборов, на которой функция должна принимать одновременно значение 0 и 1.
Пример. Пусть A (101), B(011). Функция F будет зависеть от аргументов ( ai-2, ai-1,ai,ai+1,ai+2). Таблица истинности этой функции (точнее только та ее часть, на которой функция определена) будет иметь вид:
ai-2 |
ai-1 |
ai |
ai+1 |
ai+2 |
B |
|
|
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
1 |
|
|
1 |
Функция 5-и аргументов задается на 32 наборах. Однако эта функция задана в примере всего на трех наборах. На остальных 29 наборах функция неопределена и ее можно доопределить 229 способами. Диаграмма Вейча этой функции будет иметь вид:
ai-2 ai-1 ai
-- |
-- |
-- |
-- |
-- |
-- |
0 |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
1 |
-- |
-- |
-- |
-- |
1 |
-- |
-- |
-- |
-- |
-- |
-- |
ai+1
ai+2
Доопределить и минимизировать данную функцию достаточно просто:
F
= ai+2.
Действительно, применив булево
преобразование F
к A
получим B.
При длинах векторов A и B равных n, булева функция будет задаваться на
n наборах, а на 2(2n-1) – n наборах функция будет не определена. Доопределение и минимизация булевой функции не однозначны, поэтому из одной и той же диаграммы Вейча можно полчить разные решения. Однако все эти решения обеспечивают одинаковые проеобразования вектора А в вектор В.
Определение. Два набора Ai и Aj длины n будем называть связанными сдвигом, если при некотором сдвиге одного набора относительно другого у этих наборов совпадают позиции всех единиц.
Например, A = 1 0 0 1 0 1 1 0 0 0 и
B = 0 0 1 0 0 1 0 1 1 0 – наборы связанные сдвигом.
Из приведенной выше Теоремы сформулируем следствия
Следствие 1. Если Ai, i = 1,2,3,…,k – двоичные векторы не связанные сдвигом и В – произвольный вектор, то существует одна булева функция F, преобразующая любой вектор Ai в вектор В, т.е. B = F(Ai), i = 1,2,3,…,k.
Пример 1.
Пусть A1 = 1011; A2 = 1001; A3 = 0110; B = 0111.
Построим часть таблицы истинности функции F, выписывая только те наборы, на которых функция определена, при этом для удобства введем очевидные переобозначения аргументов
a
b
c
d
e
g
h
F
1 0 1 1 0
1 0 1 1 1
1 0 1 1 1
1 0 1 1 1
1 0 0 1 0
1 0 0 1 1
1 0 0 1 1
1 0 0 1 1
0 1 1 0 0
0 1 1 0 1
0 1 1 0 1
0 1 1 0 1
Упражнение.
Постройте диаграмму Вейча функции F, и убедитесь в том, что при некотором способе доопределения функция будет иметь вид:
F
= a
Ú
c
Ú
e
g
Проверьте, что эта функция из любой приведенной последовательности Ai (i = 1,2,3) строит одну и ту же последовательность В.
Следствие 2. Если Ai и Bi – произвольные векторы, причем Ai не связаны сдвигом, то существует одна булева функция F, преобразующая каждый вектор Ai в соответствующий ему вектор Bi.
Пример 2.
Пусть требуется найти одну функцию F, преобразующую векторы
A1 = 1011 в вектор B1 = 0110,
A2 = 0111 в вектор B2 = 1001,
A3 = 0101 в вектор B3 = 1110.
Построим часть таблицы истинности функции F, выписывая только те наборы, на которых функция определена.
a
b
c
d
e
g
h
F
1
0 1 1 0
1 0 1 1 1
1 0 1 1 1
1 0 1 1 0
0 1 1 1 1
0 1 1 1 0
0 1 1 1 0
0 1 1 1 1
0 1 0 1 1
0 1 0 1 1
0 1 0 1 1
0 1 0 1 0
Упражнение.
Постройте диаграмму Вейча функции F, и убедитесь в том, что при некотором способе доопределения функция будет иметь вид:
F = d Ú e g h Ú b c Ú b e
В частном случае Следствия 2 некоторые значения Bi могут совпадать с соответствующими им Ai.
Пример 3.
Пусть требуется найти функцию F, преобразующую векторы
A1 = 1011 в вектор B1 = 1011,
A2 = 0110 в вектор B2 = 1101,
A3 = 1001 в вектор B3 = 1001.
Здесь векторы B1 = A1, B3 = A3, B2 ¹A2.
Построим часть таблицы истинности функции F:
При
некотором способе доопределения F
= a
Úùbùc
Ú
bc
Ú
de.
a b c d e g h F
1 0 1 1 1
1 0 1 1 0
1 0 1 1 1
1 0 1 1 1
0 1 1 0 1
0 1 1 0 1
0 1 1 0 0
0 1 1 0 1
1 0 0 1 1
1 0 0 1 0
1 0 0 1 0
1 0 0 1 1
Следствие 3. Если Ai, i = 1,2,3,…,k – произвольные двоичные векторы, не связанные сдвигом, то существует одна булева функция F, преобразующая A1 в любой вектор Ai, т.е. A2 = F(A1), A3 = F(A2), …, Ak = F (Ak-1) и A1 = F(Ak)
Пример 4. Пусть требуется найти булеву функцию F, обеспечивающую следующие преобразования: A1 ® A2 ® A3 ® A1, где
A1 = 1101, A2 = 0110, A3 = 1001.
Упражнение.
Используя описанную выше методику, выпишите часть таблицы истинности, постройте диаграмму Вейча и найдите один из вариантов решения.
Таблица истинности этой функции будет иметь вид:
a b c d e g h F
1
1 0 1 0
1 1 0 1 1
1 1 0 1 1
1 1 0 1 0
0 1 1 0 1
0 1 1 0 0
0 1 1 0 0
0 1 1 0 1
1 0 0 1 1
1 0 0 1 1
1 0 0 1 0
1 0 0 1 1
Одно из возможных решений:
F = aù b Ú g Ú bc Ú ùeh.
Представляет интерес определить количество наборов длины n не связанных сдвигом и их долю в общем числе двоичных наборов длины n.
Расчет произведем для наборов длины n веса q (т.е.содержащих ровно q единиц). Для этого заметим, что если в младшем разряде поставить 1, а остальные q-1 единиц на оставшихся n-q-1 позициях расставить так, чтобы получить разные двоичные коды, то мы получим все наборы, не связанные сдвигом, содержащие ровно q единиц. Тогда число таких наборов будет равно
q-1
S (n,q) = P(n-q,q-1) = С
n-1
Поскольку общее число наборов длины n веса q равно
q
С, то доля наборов не связанных сдвигом составляет q/n.
n
Так, например, при n = 20, q = 10 S(20,10) = 92378.
П.3.3. Минимизация слабо определенных булевых функций.
Возьмем теперь произвольный вектор A (1 0 0 1 1 1 0 1 0 0 0 1) и некоторую функцию F = ai & ai-3 Ú ai+2 Å ai+5 . Применив преобразование F к вектору A, получим вектор: B (1 1 0 1 0 1 1 1 0 1 0 0). Для того, чтобы найти функцию, которая бы по вектору B восстанавливала бы вектор A, можно построить таблицу истинности частично определенной функции 23 аргументов вида:
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
A |
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
0 |
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
0 |
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
1 |
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
1 |
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
1 |
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
0 |
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
1 |
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
0 |
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
0 |
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
1 |