Агафонова Ирина Витальевна, Дмитриева Оксана Михайловна
ТРОИЧНАЯ СИСТЕМА И РАВНОВЕСИЕ
ЧЕМ ТРИ МОЖЕТ БЫТЬ ЛУЧШЕ ДВУХ?
Учебники информатики рассказывают нам о двоичной системе счисления и о том, почему именно эта система, представляющая данные и команды цифрами 0 и 1, реализована в современных компьютерах.
Известно, однако, что в 60-х годах учеными Московского университета (главный конструктор — Николай Петрович Брусенцов) был спроектирован и успешно работал троичный компьютер, получивший название «Сетунь». Было выпущено несколько десятков машин, размещавшихся по большей части в высших учебных заведениях. Драматическую историю троичного компьютера и его описание можно найти в [1].
Каковы же были причины, побудившие разработчиков выбрать троичное пред-
ставление данных и использовать триты и трайты вместо битов и байтов?
Чаще всего при обсуждении достоинств троичной системы счисления говорят о ее экономичности.
Действительно, троичная система счисления экономичнее других систем, если показателем экономичности считать количество чисел, которые можно записать с помощью фиксированного количества цифр данной системы. Доказывают это так.
Обозначим N (т, х) — количество чисел, которые можно записать с помощью т разрядов системы с основанием х.
В двоичной системе счисления с помощью т разрядов можно записать 2т натуральных чисел, в троичной 3т, и вообще в системе с основанием х будет N (т, х) = хт. На эту запись уйдет тх цифр данной системы.
Зафиксировав количество используемых цифр п = тх, получаем число разрядов
п
т = п/х и количество чисел N(п/х, х) = Xх .
п
Функция х х исследуется средствами математического анализа. Ее график при любом п имеет единственный максимум при х = е = 2,718281828... (см. рисунок 1).
Наиболее близким к е является основание х = 3, оно и будет самым экономичным. Действительно, два троичных разряда (6 цифр) позволяют записать 9 чисел, в то время как три двоичных разряда (тоже 6 цифр) — только 8.
Однако название «экономичность» еще не означает выгоду во всех отношени-
ях. Сам отец «Сетуни» Н.П. Брусенцов говорил об «иллюзорной экономности троичного кода» и не ее считал главным достоинством троичной записи. Выбор троичной системы он обосновывал прежде всего тем, что с тремя цифрами возможен натуральный код чисел со знаком, а с двумя невозможен. Брусенцов отмечал, что двоичным кодом естественно представи-мы либо только неотрицательные числа, либо только неположительные. А вот в троичном коде с цифрами +1, 0, —1 (как и во всякой системе с нечетным числом цифр) имеет место естественное представление чисел со знаком. При этом нет необходимости в специальном разряде знака: если старшая значащая цифра числа положительна, то и число положительное, если отрицательна, то число отрицательное.
Привлекательна простота арифметических операций над числами со знаком в троичной симметричной системе. Важно и то, что усечение длины числа в такой системе равносильно правильному округлению, поскольку абсолютная величина отбрасываемой части числа всегда меньше половины единицы последнего сохраняемого разряда.
БАЛАНС -1, 0, 1
Поговорим об упомянутой троичной системе подробнее. Троичная система использует представление числа а в виде сум-
0123456739 Рисунок 1.
мы степеней числа 3. Для целого а это выражение
а = ап_1 • 3п—1 + ап-2 • 3п—2 + ... + а • 31 + о Цифры ак могут принимать одно из трех базовых значений и обычно берутся из набора {0, 1, 2}. Например,
11 = 9 + 2= 1 • 32 + 0 • 31 + 2, так что можно записать 11 = (102)3. Нижний индекс 3 означает, что число 102 записано в троичной системе. Если в этой системе надо представить отрицательное число, то знак потребуется указывать дополнительно.
Нас будет прежде всего интересовать троичная система, использующая базовый набор из цифр {-1, 0, 1}. Она называется симметричной, уравновешенной или сбалансированной. Чтобы цифра —1 не отличалась от 0 и 1 лишней позицией для знака, выберем для нее обозначение 1. Так как 11 = 9 + 3 — 1 = 1 • 32+ 1 • 31+ I, то запишем 11=(111) з , где нижний индекс 3 будет означать запись в уравновешенной троичной системе.
Приведем представление целых чисел от — 6 до 6 в уравновешенной троичной системе (см. таблицу 1).
Как видим, знак числа присутствует в самом его представлении: если первая цифра 1, то число отрицательное, а если 1, то положительное. Чтобы из положительного числа а получить это отрицательное число (—а), надо в уравновешенном троичном представлении числа
Таблица 1.
(а) 3
-6 11 0
-5 111
-4 И
-3 10
-2 11
-1
1 1
10
11
1 1 1
1 1 0
Таблица 2.
(a) 3 (а') 3 (а'' ) 3 a / а // а
0 0 1 1 1Т ТТ 0 1 11 -12
0 1 Т 1 1 0 1 0 1 2 6 -8
0 1 0 11 1 1 0 1 3 7 -10
0 1 1 11 1 1 0 0 4 5 -9
произвести одновременную замену всех цифр 1 на 1, а всех 1 на 1. Такую замену назовем инверсией.
Используя n троичных разрядов, можно записать 3n различные целых чисел,
3n -1 3n -1
в том числе - положительных, -
2 2
отрицательных и 0. Это будут числа от (1 1 1... 1 1)з до (111--Ц) з, наибольшее
n цифр n цифр
3n -1
из которых обозначим Q(n) = —2— =
= (1^ц11) 3 .
n цифр
Помимо операции инверсии, отметим еще одну одноместную операцию, возможную в троичной системе — операцию поразрядного циклического сдвига. Циклическим сдвигом вправо числа а, записанного посредством ровно n разрядов троичной симметричной системы (возможно, с добавлением нулей слева) назовем число а , полученное из а поразрядной заменой цифр 0 на 1, 1 на 1 и 1 на 0. Краткая схема замены 0 ® 1 ® 1 ® 0. Таким же образом от а' можно перейти к а" . Очевидно, что а" = а и что а + а' + а' = 0. Число а' получается из а заменой 0 — 1— 1 — 0, то есть двукратный циклический сдвиг вправо — это циклический сдвиг влево.
Например, для а = (11 10) 3 получим а' = (1001) 3, а''= (0111 ) 3. Десятичное представление этих чисел 15, —26 и 11.
Возьмем все Q (n — 1) положительных чисел, записываемых (n — 1) троичными разрядами. К каждому из них припишем слева 0 и для каждого найдем сдвиг вправо (положительное число) и сдвиг влево (отрицательное число). Чисел ста-
нет в 3 раза больше, то есть 30 (п - 1) = О (п) - 1, и их абсолютные величины все будут различны и охватят весь набор положительных чисел, записываемых п троичными разрядами, кроме наибольшего числа О (п), состоящего из п единиц. Это будет очень красивый набор чисел, уравновешенный по всем разрядам. Посмотрим, как он выглядит при п = 3. Исходный набор двухразрядных положительных чисел с приписанными слева нулями состоит из четырех чисел:
a (a ) 3
1 0 0 1
2 0 11
3 0 1 0
4 0 1 1
Занесем в таблицу числа а и их цик/ //
лические сдвиги а и а в троичном и в десятичном представлении и получим 12 чисел (см. таблицу 2).
Обратим внимание на поразрядную симметрию: в каждом троичном разряде поровну цифр 0, 1 и 1 (по 4 цифры).
Этот поразрядно уравновешенный набор из 12 чисел обозначим Х>12 = {+1, +2, +3, +4, +5, +6, +7, +11, -8, -9,-10,-12}. Он будет использован при решении одной из приводимых ниже задач.
Посмотрим, как в троичной уравновешенной системе выглядят основные арифметические операции сложения и умножения.
Таблица сложения в рассматриваемой системе имеет вид
1 + 1 = 11 1 + 0 = 1 1 + 1 = 0
0 + 0 = 0 0 + 1 = 1 1 + 1 = 11
Суммы 1 + 1 и 1 + 1 образуются переносом соответствующей цифры в следующий разряд и добавлением цифры противоположного знака, а остальные суммы получаются еще проще.
Таблица умножения совсем проста:
1 • 1 = 1 1 0 = 0 1 1 =1
00 = 0 01 = 0 11 = 1
Приведем пример умножения «столбиком» (умножаем 39 на 2 в троичной уравновешенной системе): х 1 1 1 0
11
1 1 1
1 1 1
1 0 0 I 0
Положительное целое число можно перевести из обычной десятичной формы записи в уравновешенную троичную слегка измененным обычным алгоритмом последовательного деления с остатком [2]. Изменение заключается в том, что деление на 3 с остатком иногда заменяется делением на 3 «с избытком». А именно: данное число а делят на 3 по правилу деления с остатком. Если остаток 0 или 1, запоминают его, а если остаток 2, то вместо него запоминают остаток, равный 1, и в каче-
а +1
стве частного принимают ^ . По этому
правилу полученное частное снова делят на 3 и т. д., пока частное не станет равно 1. Записывают это частное, а за ним остатки от деления в обратном порядке.
Например, для числа 15 получается последовательность остатков 0, 1, 1 и последнее частное 1 (см. рисунок 2). Это дает представление 15 = (11 10) 3.
НА РАЗНЫХ ЧАШАХ ВЕСОВ
Рассмотрим две задачи о взвешивании, изящно решаемые с помощью симметричного троичного представления чисел.
I. Задача о выборе системы гирь для взвешивания на рычажных весах.
Эта задача, кратко называемая «задачей о гирях» и предложенная в XIII веке итальянским математиком Леонардо Пи-занским (Фибоначчи), формулируется так:
Рисунок 2.
Какой минимальный набор гирь, по одной гире каждого веса, позволяет взвесить на двухчашевых весах всевозможные грузы в 1 кг, 2 кг и т. д. до N кг?
Решение этой задачи известно в двух вариантах:
1) груз находится на одной чаше весов, а все гири должны помещаться на другую;
2) гири разрешается помещать на обе чаши весов, то есть и на ту, где находится груз.
В [3] приведены решения для обоих вариантов, опирающиеся на запись чисел в двоичной и троичной системах счисления, соответственно. Нам представляется интересным показать, как красиво выглядит решение, если прибегнуть к уравновешенной троичной системе. Более того, можно сказать, что эта задача естественно порождает такую систему счисления.
Поместим груз, скажем, на левую чашу весов. Расположение гирь будем отмечать записями из цифр 0, 1 и 1. В этой записи 1 будет означать, что гиря кладется на левую чашу, 1 — что на правую, а 0 — что данная гиря на весы не кладется. Позиция цифры 1 или 1 будет определять вес гири: к-я позиция (при отсчете справа налево) соответствует гире весом 3к-1 кг.
Таблица 3.
число взвешиваний и 2 3 4 5 6
число монет тп 3 12 39 120 363
(тп) з 10 110 1110 11110 111110
Набор гирь, таким образом, состоит из гирь весом 1, 3, 9, 27 и так далее килограммов, а количество используемых гирь зависит от N.
Например, запись 1110 будет означать, что на правую чашу весов кладется гиря в 27 кг, а на левую гири в 9 и 3 кг. Гиря в 1 кг на весы не кладется. Таким образом, взвешен груз в 15 кг, что естественно, так как (см.выше) 15 = (11 10) 3.
27 кг 9 кг 3 кг 1 кг
1 I I 0
В уравновешенной троичной системе можно записать любое натуральное число и немедленно получить расположение гирь для груза соответствующего веса. Самый большой вес будет, как мы уже виде-3й -1
ли, равен О (п) = —^— , то есть О (1) =1,
О (2) = 4, О (3) = 13, О (4) = 40, О (5) = 121, О (6) = 364 и так далее.
Итак, для взвешивания грузов, например, от 1 до 300 кг достаточно 6 гирь весом в 1, 3, 9, 27, 81, 243 кг, а пяти гирь не хватит, так как О (5) < 300 < О (6). Размещение гирь для веса # производится согласно троичному представлению числа
II. Задача об обнаружении фальшивой монеты.
Имеется N одинаковых с виду монет. Одна из них фальшивая, что можно определить по весу: она легче или тяжелее других. Требуется взвешиванием на двухчашевых весах (без гирь) выявить за минимальное число взвешиваний, какая из монет фальшивая и будет ли она легче или тяжелее остальных?
Эта задача известна в литературе как задача о 12 монетах. Названа она так потому, что, как мы увидим ниже, решается за 3 взвешивания, если монет 12 или меньше, и вообще за п взвешиваний, если чис-
3й - 3
ло монет N <-. Чем
2
больше N, тем сильнее впечатляет приведенный результат: достаточно, например, всего пяти взвешиваний, чтобы обнаружить фальшивую монету среди набора в 120 монет.
3й - 3
Обозначим тп =-и взглянем на
п 2
этот результат в свете троичной уравновешенной системы. Имеем следующее соответствие (таблица 3).
Из нижней строки таблицы видно: число тп есть наибольшее из чисел, которые можно записать с помощью п разрядов троичной уравновешенной системы, если потребовать дополнительно, чтобы не все цифры в записи были одинаковыми.
Метод решения задачи II, использующий троичную нумерацию монет, назовем методом Дайсона, следуя [4].
Покажем, как работает этот метод при N =12 (классический случай).
Припишем каждой из 12-ти монет номер, снабженный знаком и взятый из поразрядно уравновешенного набора Я12= {+1, +2, +3, +4, +5, +6, +7,-8,-9, -Щ+11,-12} ={001, 01 1 , 010,011, 1 11 , 1 11 , 1 1 0, 1 1 1, 1 01, 1 00, 1 0 1 , 11 1 , 1 1 0} 3.
Порядок взвешивания определяется троичными номерами монет. При /-м взвешивании (/ = 1, 2, 3) на одну чашу весов (назовем ее чаша 1) кладутся монеты, номера которых имеют /-ю цифру 1, на пра-
вую, которую назовем чашей 1, — номера с /-й цифрой 1. Обратим внимание, что каждое из взвешиваний проводится независимо от результатов предыдущих.
Результат каждого взвешивания обозначим троичной цифрой аг- = 1 , если перевесила чаша 1, аг =1, если перевесила чаша 1, и аг = 0, если весы остались в равновесии.
Цифры а, записанные в порядке взвешиваний, образуют троичное число а = а1 • 3п-1 + а2 • 3п-2 + ... + ап-1 • 31 + ап.
Число а — либо номер какой-то монеты, либо его инверсия (тогда номер будет — а). Эта монета фальшивая. Если ее номер а, то она тяжелее других, а если номер — а, то эта монета легче других .
Этот вывод сделан из следующих соображений.
• Результат а} = 0 говорит о том, что при /-м взвешивании фальшивой монеты на весах не было. В этом случае 0 — /-я цифра в номере монеты.
• Если фальшивая монета была тяжелее других, то результат а} = 1 говорит о том, что при 1-м взвешивании она была на чаше 1, результат а1 = 1 — о том, что при /-м взвешивании она была на чаше 1. Цифра аг — /-я цифра в номере монеты.
• Если фальшивая монета была легче других, то результат а} = 1 говорит о том, что при /-м взвешивании она была на чаше 1, результат а1 = 1 — о том, что при /-м взвешивании она была на чаше 1. Цифра аг — инверсия /-й цифры в номере монеты.
Приведем пример, как за 3 взвешивания определить фальшивую монету среди 12-ти монет, которые пронумеруем числами из набора ^12.
1-е взвешивание: на чаше 1 монеты —8, —9, —10, —12, на чаше 1 монеты 5, 6, 7, 11.
2-е взвешивание: на чаше 1 монеты 5, 6, 7, —12, на чаше 1 монеты 2, 3, 4, 11.
3-е взвешивание: на чаше 1 монеты 2, 5, —10, 11 на чаше 1 монеты 1, 4, 7, 8.
а) Допустим, получилось, что в первый раз тяжелее чаша 1, во второй чаша 1, в третий наборы монет равны по весу.
Результат 11 0 дает число (11 0) 3 = = —6 и показывает, что фальшивой является монета с номером 6 и что эта монета легче других.
Ь) Допустим, получилось, что в первый раз тяжелее чаша 1, во второй и в третий наборы монет равны по весу.
Результат 1 0 0 дает число (1 0 0) 3 = = 9 и показывает, что фальшивой является монета с номером —9 и что эта монета легче других.
НЕ ТОЛЬКО «ДА» И «НЕТ»
О троичной логике слышали многие. Это частный случай конечнозначной логики. Мы лишь слегка коснемся этой обширной темы, рассмотрев известные задачи о задуманном числе [5].
Некто задумал число от 1 до N. Вы должны отгадать это число, задав наименьшее количество вопросов, на которые задумавший обязан правдиво отвечать
1) «да» или «нет»;
2) «да», «нет» или «не знаю».
Решение первой задачи сводится к
записи числа в двоичной системе счисления. Число вопросов зависит от N и для N < 2т не превышает т. Например, для N = 100 < 128 < 27 достаточно семи вопросов, первым из которых может быть вопрос «Будет ли задуманное число больше 40?» Дальнейшие вопросы зависят от ранее полученных ответов и каждый раз делят область отгадывания пополам или почти пополам. Шести вопросов не хватит, так как 100 > 64 = 26.
Можно построить схему вопросов и иначе. Двоичная запись числа 0 < N < 2т содержит не более т цифр. Дополнив, если нужно, эту запись нулями слева, получаем ровно т цифр, каждую из которых можно отгадать за 1 вопрос «Является ли эта цифра единицей?». Так как 0 не задумывается, то при N = 2т в двоичный код можно переводить N—1, чтобы и в этом случае хватило т вопросов, надо только не забыть прибавить 1 к ответу. Придется еще предоставить задумавшему табличку двоичных представлений всех чисел от 1 до N.
Нас больше интересует вторая задача, связанная с троичной системой счисления. При N = 3 ее можно решить за один вопрос, например, такой: «Если я задумал число, отличающееся от твоего, то будет ли оно меньше, чем твое?» Ответ «да» будет означать, что задумано число 3, ответ «нет» — что задумано число 1, а ответ «не знаю» соответствует числу 2.
В таком случае мы можем ожидать, что за один вопрос отгадывается один разряд троичного представления числа и что за т вопросов мы можем отгадать число
из диапазона от 1 до 3т (включая 3т, если не забыть сделанное выше замечание и переводить в этом случае в троичный код не N а N—1). Отрицательные числа не задумываются, так что уравновешенная система здесь не нужна. Число будет записываться в стандартной троичной системе с набором цифр {0, 1, 2}. Будут использоваться все т разрядов, слева при необходимости будут добавлены нули. Вопрос может звучать примерно так: «Если я задумал число, /-я цифра которого отличается от /-й цифры твоего числа, то будет ли она меньше, чем у тебя?» При ответе «да» записываем цифру 2, при ответе «нет» — цифру 0, при ответе «не знаю» — цифру 1.
Если, например, N = 200, то т = 5, так как 34 < 200 < 35. Если на 5 вопросов получена последовательность ответов «не знаю», «да», «не знаю», «нет», «да», то задумано число (12102)3 = 146.
Более естественной выглядит система вопросов, не так явно прибегающая к троичной системе. Ее можно связать с делением диапазона поиска на три части. Формулировки вопросов предоставляются читателю.
Литература
1. Малиновский История вычислительной техники в лицах. Киев: Фирма КИТ, ПТОО «АСК», 1995.
2. Жоуцукова ^.3. Основы информатики в вопросах и ответах. Учебное пособие. Нальчик: Издательский центр «ЭЛЬ-ФА», 1994.
3. Лшановскии Черкасова Л.Л Наборы из нулей и единиц: Заочная школа современного программирования. Занятие 2: Учебное пособие. СПб.: Изд-во ЦПО «Информатизация образования», 1999.
4. Жестоиал Л Как обнаружить фальшивую монету. «Квант», № 10, 1979.
5. Лл$утова Устинов Алгебра и теория чисел. Сборник задач для математических школ. М.: МЦНМО, 2002.
Агафонова Ирина Витальевна, доцент кафедры математики Санкт-Петербургского Морского Технического университета,
Дмитриева Оксана Михайловна, доцент кафедры математики Санкт-Петербургского государственного университета Телекоммуникаций.
© Наши авторы, 2004. Our authors, 2004.