Булевы функции для описания систем голосования

В этом разделе будет описано использование булевых функций для формализации различ-ных правил голосования в небольших группах (совет директоров, правление банка и пр.). При-ведём пример рассматриваемой ситуации и возникающей в ней формальной задачи.

Пример 19. Комитет состоит из четырёх членов и председателя. Решения принимаются большинством голосов, однако, если председатель голосует «против», то решение не принима-ется. Требуется построить булеву функцию, зависящую от 5 переменных: x1, x2, x3, x4, y (xi = 1 тогда и только тогда, когда i-ый член комитета голосует «за» (i = 1, 2, 3, 4), y = 1 тогда и только тогда, когда председатель голосует «за»). Предполагается, что значение этой булевой функции на некотором наборе x1, x2, x3, x4, y равно 1 тогда и только тогда, когда в результате голосова-ния, соответствующего этому набору, решение принимается. Можно считать, что такая функ-ция (если она существует) описывает данную схему голосования. Её можно назвать функцией голосования ■

Из самой постановки вопроса ясно, что искомая функция является неубывающей (говорят также, монотонно неубывающей). Действительно, пусть при некотором наборе голосов x1, x2, x3, x4, y решение принимается, т.е. f(x1, x2, x3, x4, y) = 1. Если бы кто-то из тех, кто голосовал «против», проголосовал «за», решение тем более должно быть принято. Формально неубываю-щая функция f(z1, …, zn) характеризуется условием:

Булевы функции для описания систем голосования - student2.ruБулевы функции для описания систем голосования - student2.ru (i = 1, 2, …, n)→ f( Булевы функции для описания систем голосования - student2.ru , …, Булевы функции для описания систем голосования - student2.ru ) ≤ f( Булевы функции для описания систем голосования - student2.ru , …, Булевы функции для описания систем голосования - student2.ru ). (29)

Будем искать функцию голосования в виде реализующей её ДНФ, в которую все перемен-ные входят без отрицания. Существование такой ДНФ для произвольной неубывающей булевой функции является хорошо известным фактом, который здесь не доказывается.

Алгоритм построения функции голосования.

1. Составить таблицу типа таблицы 1 с заданным числом переменных (т.е. участников го-лосования). В самом левом столбце для удобства записываются числа, двоичным разложением которых служит набор нулей и единиц в данной строке. Для каждого набора значений перемен-ных в правый столбец записать 1, если по исходному словесному описанию схемы голосования, при голосовании участников, соответствующем данному набору, решение принимается. В про-тивном случае записать туда 0. Разумеется, выполнение этого шага требует содержательного анализа рассматриваемой схемы голосования, т.е. шаг не является чисто формальным.

2. Удалить из таблицы все строчки, в правой части которых записан ноль, а из оставшейся таблицы удалить правый столбец, содержащий (после удаления строк) одни единицы. В резуль-тате выполнения этого шага останутся строчки, соответствующие голосованиям, при которых решения принимаются.

3. Самый сложный шаг. Просматривая последовательно все строки таблицы, удаляем i-ую строку, если для неё существует другая строка (среди ещё не удалённых), которая содержит единицы только на тех местах, на которых есть единицы и в i-ой строке. В результате остаются все минимальные голосования, при которых решения принимаются. Минимальность означает, что при изменении позиции любого одного участника с «за» на «против» решение не будет при-нято.

4. Каждой оставшейся строке соответствует конъюнкция, содержащая те и только те пере-менные (без отрицаний), номера которых совпадают с номерами позиций, на которых в данной строке стоят единицы. Например, строке 01101 соответствует конъюнкция x2x3y (если послед-няя переменная y сопоставлена председателю).

5. Образуем дизъюнкцию всех полученных на предыдущем шаге конъюнкций. Получен-ная формула реализует искомую функцию голосования ■

Пример 20.Применим алгоритм для схемы голосования, описанной в примере 19. Соста-вим таблицу 13 в соответствии с шагом 1 алгоритма. Сначала часть таблицы, состоящая из столбцов с заголовками x1, x2, x3, x4, y заполняется в лексикографическом порядке (см. формулу (1)). Затем делается самое главное – заполняется столбец со значениями функции голосования f. По условию, если председатель против, то решение не принимается. Поэтому во всех строках, где y = 0, в столбец f записываем 0, независимо от значений всех других переменных. Поэтому 0 бу-дет в столбце f во всех строках с чётными номерами. В остальных строках, в которых y = 1, ис-пользуется правило большинства, т.е. 1 записывается в последнюю позицию во всех строках, в которых число единиц больше числа нулей, т.е. рано 3, 4 или 5 (а не 2, 1 или 0).

Шаг 2. Для большей ясности сначала подсветим удаляемые строки и столбец (см таблицу 14). После их удаления оставшиеся строки и столбцы образуют таблицу 15.

Шаг 3. Понятно, что строчки, в которых есть ровно три единицы, не могут быть удалены (в данной схеме с учётом правила большинства не может быть строк, в которых меньше трёх единиц). Строка 15 должна быть удалена, поскольку все единицы строки 13 находятся на тех местах, где есть единицы в строке 15. Строка 23 должна быть удалена, поскольку все единицы строки 21 находятся на тех местах, где есть единицы в строке 23. Строка 27 должна быть уда-лена по той же причине из-за строки 25. Строка 29 должна быть удалена по той же причине из-за строки 25. Строка 31 содержит 1 на всех позициях и, конечно, также должна быть удалена. Оставшиеся 6 строк образуют таблицу 16.

Шаг 4. В соответствии с алгоритмом по строчкам таблицы 16 образуем следующие 6 конъюнкций: x3x4y, x2x4y, x2x3y, x1x4y, x1x3y, x1x2y.

Шаг 5. В соответствии с алгоритмом образуем дизъюнкцию всех полученных на предыду-щем шаге конъюнкций. Функция f(x1, x2, x3, x4, y) = x3x4y Ú x2x4y Ú x2x3y Ú x1x4y Ú x1x3y Ú x1x2y и является в данном случае искомой функцией голосования ■

Таблица 13. Исходные данные для схемы голосования
N x1 x2 x3 x4 y
N x1 x2 x3 x4 y
Таблица 14. Удаляемые строки и столбец
N x1 x2 x3 x4 y
N x1 x2 x3 x4 y
Таблица 15. Все голосования, при которых принимаются решения
N x1 x2 x3 x4 y
Таблица 16. Минимальные голосования, при которых принимаются решения
N x1 x2 x3 x4 y

Пример 21.В правление банка входят четыре человека: председатель А, имеющий два го-лоса в своём распоряжении, и члены правления B, C и D, обладающие одним голосом каждый. Для принятия какого-либо решения при голосовании должно быть набрано хотя бы четыре го-лоса. Найдём функцию голосования для описанной схемы.

Сопоставим членам правления B, C и D переменные x1, x2 иx3, председателю А – перемен-ную y. В соответствии с описанной схемой голосования на шаге 1 заполняем таблицу 17:

Таблица 17. Исходные данные для схемы голосования
N x1 x2 x3 y
N x1 x2 x3 y

Легко видеть, что без участия председателя остальные участники могут набрать не более 3-ёх голосов, поэтому во всех строчках, где председатель «против», решение не будет принято. В то же время мнения одного председателя не достаточно для принятия решения (нужно ведь 4 голоса «за», а у него только два). Такие же очевидные соображения позволяют легко заполнить эту таблицу.

Далее в соответствии с алгоритмом построения функции голосования выполняем шаг 2, оставляя строчки, соответствующие принятию решения (см. таблицы 18 и 19).

Таблица 18. Удаляемые строки и столбец
N x1 x2 x3 y
N x1 x2 x3 y
 
  Таблица 19. Все голосования, при которых принимаются решения
N x1 x2 x3 y
Таблица 20. Минимальные голосования, при которых принимаются решения
N x1 x2 x3 y
         

В результате шага 3 получается таблица 20 минимальных голосований, поскольку лишь набор из строки 15, содержащий только единицы, не является минимальным. Объединяя прос-тые шаги 4 и 5, запишем ответ: функция голосования f(x1, x2, x3, y) = x2x3y Ú x1x3y Ú x1x2y ■

Код Хэмминга

В настоящем разделе рассматривается важное приложение булевых функций – помехоус-тойчивое кодирование. Его суть такова. Имеется двоичный вектор α = (α1, …, αd) некоторой фиксированной длины d, который необходимо передать (например, из узла А в узел В телеком-муникационный сети). Известно, что при передаче двоичного вектора возможно не более одной ошибки (т.е. символ 0 может быть воспринят после передачи как 1 или 1 как 0). Требуется раз-работать схему кодирования и декодирования, т.е. предложить:

1. Построение по двоичному вектору α = (α1, …, αd) его двоичного кода β = (β1, …, βn).

2. Построение по полученному при передаче вектора β = (β1, …, βn) вектору Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru n) нового вектора Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru d), такого, что Булевы функции для описания систем голосования - student2.ru = α, независимо от одной ошибки при передаче вектора β.

Данная задача имеет много решений. Например, каждый символ αi при передаче можно за-

менить тремя совпадающими символами, а при декодировании принимать решение по правилу большинства: если большинство из трёх переданных символов – 0, то αi = 0, в противном случае αi = 1. Недостатком такого рода мажоритарных схем является сильное увеличение длины кодов β (в упомянутом случае в три раза). Поэтому требуется, чтобы отношение длины кода n к длине исходного слова d было бы как можно меньше. В частности, очень желательно, чтобы с ростом d указанное отношение стремилось бы к 1. Требуемыми свойствами обладает код Хэмминга, к описанию которого сейчас и переходим.

5.1. Понятия и обозначения. Введём необходимые понятия, обозначения и утверждения, относящиеся к двоичным векторам. Рассмотрим все двоичные векторы длины k. Расположим их в лексикографическом порядке, т.е. в порядке возрастания целых чисел, двоичными разложени-ями которых являются эти векторы:

000…00

000…01

000…10 (30)

………..

111…10

111…11

(см. также формулу (1)). Вектор, стоящий на i-ом сверху месте (начиная с 0) в множестве векто-ров (16), является двоичным разложением числа i. Обозначим его через ek(i) (0 ≤ i≤ 2k – 1). На-пример, при k = 3 получаем

e3(0) = 000, e3(1) = 001, e3(2) = 010, e3(3) = 011, e3(4) = 100, e3(5) = 101, e3(6) = 110, e3(7) = 111 (31a)

при k = 4 получаем

e4(0) = 0000, e4(1) = 0001, e4(2) = 0010, e4(3) = 0011, e4(4) = 0100, e4(5) =0101, e4(6) = 0110, e4(7) = 0111,

e4(8) = 1000, e4(9) = 1001, e4(10) = 1010, e4(11) = 1011, e4(12) = 1100, e4(13) =1101, e4(14) = 1110, e4(15) = 1111. (31b)

Обозначим j-ую координату вектора ek(i) через Булевы функции для описания систем голосования - student2.ru (j = 1, …, k). Здесь координаты считаются, как обычно, слева направо. Например,e3(3) = 011, откуда Булевы функции для описания систем голосования - student2.ru = 0, Булевы функции для описания систем голосования - student2.ru = Булевы функции для описания систем голосования - student2.ru = 1.

Особую роль в построении кода Хэмминга играют векторы ek(i) для i = 2m (m= 0, 1, …, k – 1). Их координаты обладают тремя почти очевидными свойствами

1. Для любого m = 0, 1, …, k – 1 координата Булевы функции для описания систем голосования - student2.ru = 1,

2. Для любого p < 2m координата Булевы функции для описания систем голосования - student2.ru = 0.

3. Для любого q > m координата Булевы функции для описания систем голосования - student2.ru = 0.

Все три свойства непосредственно следуют из того, что двоичным разложением длины k числа 2m является вектор 0…010…0, содержащий только одну единицу на (k–m)-ом месте. Дей-ствительно, так как 1 = 20, то m = 0, k–m = k и в векторе ek(1) = 00…01 единица действительно стоит на последнем, т.е. k-ом, месте. Далее, так как 2 = 21, то m = 1, k–m = k–1, и в векторе ek(2) = 00…10 единица действительно стоит на предпоследнем, т.е. (k–1)-ом, месте. Аналогично, ek(4) = 00…100, и т.д.

Пусть β = (β1, …, βn) – двоичный вектор длины n. Определим вектор h(β) формулой

h(β) = Булевы функции для описания систем голосования - student2.ru , (32)

где число k является минимальным числом, удовлетворяющим неравенству

n < 2k. (33)

По построению, вектор h(β) имеет k координат. Он получается сложением векторов вида ek(i), умноженных на 0 или 1. В настоящем разделе под сложением понимается сложение по модулю 2: 0Å0 = 1Å1 = 0, 0Å1 = 1Å0 = 1. При покоординатной записи (32) имеет вид

hj(β) = Булевы функции для описания систем голосования - student2.ru (j = 1, …, k). (34)

Обратим внимание, что в (32) и (34) суммирование начинается с 1, а не с 0, поскольку добавле-ние вектора ek(0), состоящего из одних нулей, не изменит сумм (32) и (34) при любом β0. Из за-кона 3) дистрибутивности для функции Å (см. раздел 2) и формулы (32) непосредственно сле-дует, что для любых двух двоичных векторов β1 и β2

h(β1 Å β2) = h(β1) Å h(β2). (35)

5.2. Схема кодирования и декодирования. Прежде всего по заданной длине d исходных слов α = (α1, …, αd) определим число k как минимальное число, для которого d + k < 2k. Поло-жим n = d + k. Так как n < 2k, то любое число от 1 до d + k имеет двоичное разложение длины k (см. векторы (30) и (31)). В таблицу 21 вписаны значения k и n для нескольких небольших d. Из таблицы ясен характер отношения d ⁄n: с ростом d оно стремится к 1.

5.2.1. Кодирование. Определим кодовый вектор β = (β1, …, βn) по исходному слову α = (α1, …, αd) следующим образом. Занумеруем в порядке возрастания все координаты вектора β,

Таблица 15. Параметры кодирования

d k n=d+k 2k

номера которых не являются степенями двойки: β3, β5, β6, β7, β9, … . По конструкции, число таких координат в точности равно числу d. Далее, положим

β3 = α1, β5 = α2, β6 = α3, (36)

и т.д. В результате все координаты, номера которых не являются степенями двойки, оказывают-ся «заполненными» координатами исходного вектора α. Указанные координаты вектора β назы-ваются информационными (или информационными разрядами), как раз потому, что они со-держат подлежащую передаче информацию. Остальные разряды, номера которых равны степе-ням двойки: 1, 2, 4, …, называются контрольными.

Пример 22. Рассмотрим исходный набор α = (α1, α2, α3, α4) длины 4 (d = 4). Прежде всего определим число k из условия d + k < 2k. Имеем 4 + 2 > 22, 4 + 3 < 23. Поэтому k = 3, n = d + k = 7 (см. таблицу 21). В векторе β = (β1, β2, β3, β4, β5, β6, β7) координаты 3, 5, 6 и 7 являются информа-ционными. После присвоения им значений α1, α2, α3, α4) получаем β = (β1, β2, α1, β4, α2, α3, α4) ■

Определим теперь контрольные разряды β1, β2, β4, … формулой:

Булевы функции для описания систем голосования - student2.ru = Булевы функции для описания систем голосования - student2.ru (m = 1, …, k). (37)

В силу указанных выше свойств векторов ek(i) для i = 2m в сумму (37) входят только те слагае-мые βi, для которых

1) номер i >2m (все мéньшие координаты равны 0 по свойству 2);

2) номер i ≠ 2q для всех q > m (см. свойство 3).

Учитывая, что информационные разряды βi – это как раз те, для которых i ≠ 2q для любых q, формула (37) выражает контрольные разряды только через информационные. Другими словами, формулы (36) и (37) вместе полностью определяют кодирование, поскольку выражают кодовый вектор β = (β1, β2,…, βn) через исходный вектор α = (α1, …, αd). Таким образом, алгоритм коди-рования состоит всего из двух шагов.

1. По исходному слову α определяются информационные разряды вектора β по формуле (36).

2. По информационным разрядам вектора β определяются его контрольные разряды по формуле (37).

Пример 23. Построим в явном виде кодовый вектор β = (β1, β2, β3, β4, β5, β6, β7) по заданно-му вектору α = (α1, α2, α3, α4) длины 4. Поскольку при d = 4 число k = 3 (см. пример 21), то мож-но записать в явном виде (см. формулы (37)):

β1 = β3 Å β5Å β7;

β2 = β3 Å β6Å β7;

β4 = β5 Å β6Å β7.

Поскольку в данном случае по построению β3 = α1, β5 = α2, β6 = α3, β7 = α4, то вместе с предыду-щими равенствами получаем, что все координаты вектора β = (β1, β2, β3, β4, β5, β6, β7) выражают-ся (притом достаточно просто) через координаты α = (α1, α2, α3, α4) ■

Нетрудно понять и общую закономерность. При произвольном d и соответствующим ему k (напомним, что k – минимальное число, удовлетворяющее неравенству d + k < 2k) точно также получим

β1 = β3 Å β5Å β7 Å … и далее через 1 вплоть до n = d + k,

β2 = β3 Å β6Å β7 Å β10Å β11 Å … и далее через 2 вплоть до n = d + k,

β4 = β5 Å β6Å β7 Å β12Å β13 Å β14Å β15 Å … и далее через 4 вплоть до n = d + k, (38)

.……………………………………………………………………………………..

.……………………………………………………………………………………..

Для кода Хемминга имеет место следующее

Утверждение 5. Для кодового вектора β = (β1, …, βn), в котором информационные разря-ды заполнены произвольно, а контрольные выражаются через них по формулам (37), верно век-торное равенство

h(β) = 0, (39)

где h(β) определяется формулой (32)

Действительно, если к обеим частям равенства (37) прибавить его левую часть Булевы функции для описания систем голосования - student2.ru , справа получится сумма (32), а слева 0, в силу очевидного тождества АÅА = 0 при любом А ■

Пример 24. Продолжение примера 23. Положим α = 1011. Определим кодовый вектор β формулами из примера 11:

β1 = β3 Å β5Å β7 = 1 Å 0 Å 1 = 0;

β2 = β3 Å β6Å β7 = 1 Å 1 Å 1 = 1;

β4 = β5 Å β6Å β7 = 0 Å 1 Å 1 = 0.

Таким образом, β = 0110011. Имеем (см. 18) и (17а))

h(β) = 0×001Å1×010Å1×011Å0×100Å0×101Å1×110Å1×111=010Å011Å110Å111 = 000 = 0, (40)

в соответствии с утверждением 5.

5.2.2. Декодирование. Передаётся кодовый вектор β = (β1, …, βn), определяемый по вход-ному слову α = (α1, …, αd) формулами (36) для информационных разрядов и (37) для контроль-ных разрядов. В результате получен вектор Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru n), отличающийся от β не более, чем в одном разряде. В основе декодирования, т.е. построения по вектору Булевы функции для описания систем голосования - student2.ru переданного вектора β, лежит следующее

Утверждение 6. Если вектор h( Булевы функции для описания систем голосования - student2.ru ) = Булевы функции для описания систем голосования - student2.ru (см. формулу (32)) не равен 0, то он явля-ется двоичным разложением числа, равного номеру той единственной координаты вектора Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru n), которая была искажена при передаче кодового вектора β = (β1, …, βn). Если же h( Булевы функции для описания систем голосования - student2.ru ) = 0,тоошибки при передаче не произошло, т.е. Булевы функции для описания систем голосования - student2.ru = β.

Доказательство. Предположим, что при передаче вектора β = (β1, …, βn) получен вектор Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru n), и при этом произошло искажение в одном разряде: вместо числа βs было передано ошибочное число βs Å 1 (0 вместо 1 или 1 вместо 0). Определим вектор δ, все координаты которого, кроме s-ой, равны 0, а s-ая координата δs = 1. Тогда Булевы функции для описания систем голосования - student2.ru = β + δ. В силу линейности функции h и равенства (39) имеем h( Булевы функции для описания систем голосования - student2.ru ) = h(β) Å h(δ) = h(δ) = ek(s). По построению, вектор ek(s) представ-ляет собой двоичное разложение числа s длины k, что и доказывает утверждение в случае h( Булевы функции для описания систем голосования - student2.ru ) ≠ 0. В случае h( Булевы функции для описания систем голосования - student2.ru ) = 0имеем Булевы функции для описания систем голосования - student2.ru = β, поскольку они могут отличаться только в одном разряде,что и доказывает утверждение в случае h( Булевы функции для описания систем голосования - student2.ru ) = 0 ■

Доказательство утверждения 6 фактически содержит в себе

Алгоритм декодирования кодов Хэмминга.

1. По вектору Булевы функции для описания систем голосования - student2.ru = ( Булевы функции для описания систем голосования - student2.ru 1, …, Булевы функции для описания систем голосования - student2.ru n) и формуле (32) определяем вектор h( Булевы функции для описания систем голосования - student2.ru ).

2. Если h( Булевы функции для описания систем голосования - student2.ru ) = 0,то переходим к шагу 4; в противном случае – к шагу 3.

3. По вектору ek(s) = h( Булевы функции для описания систем голосования - student2.ru ) ≠ 0 определяем число s, двоичным разложением которого явля-ется ek(s), и изменяем s-ую координату вектора Булевы функции для описания систем голосования - student2.ru на противоположное значение.

4. Вектор Булевы функции для описания систем голосования - student2.ru совпадает с передающимся вектором β. Поэтому компоненты β, находящиеся на местах 1, 3, 5, 6, и т.д., не являющимися степенями 2, как раз и образуют исходное слово α = (α1, …, αd) ■

Пример 25. Продолжение примера 24. При передаче кода β = 0110011 произошёл сбой в 3-ьем разряде, т.е. оказался получен вектор Булевы функции для описания систем голосования - student2.ru = 0100011 вместо β = 0110011. В соответствии с алгоритмом декодирования прежде всего подсчитаем вектор h( Булевы функции для описания систем голосования - student2.ru ). Имеем (см. для сравнения формулу (40)):

h( Булевы функции для описания систем голосования - student2.ru ) = 0×001Å1×010Å0×011Å0×100Å0×101Å1×110Å1×111 = 010Å110Å111 = 011 = 3,

что и означает – в силу утверждения 6 – что ошибка действительна произошла в 3-ем разряде. Заменяя 0 в 3-ьем разряде на 1, получаем из ошибочного кода Булевы функции для описания систем голосования - student2.ru = 0100011 правильный код β = 0110011 ■

Пример 26. Пусть получен вектор Булевы функции для описания систем голосования - student2.ru = 01001001. Так как его длина n = 9, то из таблицы 15 видно, что k = 4 и длина d исходного сообщения равна 5. Воспользуемся алгоритмом декодиро-вания. Получаем (см. (17b) для векторов e4(i)):

h( Булевы функции для описания систем голосования - student2.ru ) = 0010 Å 0101 Å 1001 = 1110 = 14

(в сумму вошли те слагаемые, которые соответствуют координатам Булевы функции для описания систем голосования - student2.ru , равным 1). Это означает,

что сбой произошёл в 14-ом разряде. Но 14-го разряда в данном случае просто нет – вектор Булевы функции для описания систем голосования - student2.ru содержит только 9 координат. В чём же ошибка?

Никакой ошибки нет. Алгоритм декодирования относится только к двоичным векторам, полученных при кодировании методом Хэмминга, или отличающимся от них только в одном разряде. Это означает, что данный вектор 01001001 таковым не является. Если взять все вектора α длины 4, закодировать их описанным в разделе 4.2.1 методом и затем ещё менять все полу-чившиеся векторы ровно в одном разряде, мы никогда не получим данного вектора ■

Задания

Наши рекомендации