Размер шрифта
-
+

Криптографические приключения. Таинственные шифры и математические задачи - стр. 29

Катя задумалась, потом достала свой блокнот и начала его листать. Мой взгляд упал на систему кодирования символов для телеграфа. Я вгляделся в таблицу. В памяти начали всплывать образы наведённых воспоминаний – такую же таблицу мы рисовали с Марком, когда делали шифровальную машину. А потом я придумал, как при помощи пяти монет генерировать случайные пятибитные числа.

У меня произошло что-то вроде лёгкого головокружения, и головоломка внезапно сошлась. Деление пополам при помощи бросания монеты, дерево переходов, двоичные числа и биты, и, наконец, частоты символов – всё это соединилось в идее, которая засияла у меня в голове. Я даже зажмурился от нахлынувшего потока ощущений. Мне казалось, что мысли и идеи обрели форму и заворочались у меня в голове, царапая мозг.

Я взял блокнот и выписал в порядке уменьшения частоты встречаемости все символы русского алфавита, начиная с пробела. Затем я разделил полученный ряд на две части, чтобы в каждой из них сумма частот равнялась примерно 50 %. Точно разделить не получилось, получилось вот так:

После этого я нарисовал первый уровень дерева выбора. Левая ветвь обозначала те символы, которые лежат слева от разделительной черты, а правая, соответственно, правые. Левую ветвь я обозначил символом «0», а правую – символом «1».

Затем каждую половину символов я разделил ещё на две части так, чтобы сумма частот каждой равнялась примерно 25 %. Сделать это точно оказалось ещё сложнее, так что получилось так, как получилось:

Я продолжал делить множества символов снова и снова пополам, чтобы при каждом делении получались два новых множества примерно с одинаковой суммой частот. К моему удивлению, множества, расположенные левее, быстро закончились, то есть я дошёл до отдельных символов. А вот множества с правой стороны делились несколько дольше. Соответственно, дерево выбора получилось не равномерным и симметричным, а скособоченным на правую сторону.

После этого пришло время собрать коды для каждого символа. Получилась вот такая таблица:





Очевидно, что чем чаще встречается символ в русском языке, тем короче в этой таблице его двоичное представление. Мы с Катей смотрели на результаты моих упражнений и не могли понять, что это такое и для чего может пригодиться. Но я чувствовал, что открыл что-то очень важное, полезное и интересное. Похоже, надо дождаться отца, чтобы показать ему и узнать, где это можно применять.

Катя предложила перевести двоичные числа в десятичные. Это сделать было несложно, но результат оказался какой-то странный. Пробел с очевидностью получил код 0, буква «О» получила код 1 и так далее по убыванию частоты. Дальше пошли разрывы в числах, они перестали следовать одно за другим, но порядок сохранялся. В итоге каждая буква получила соответствующее число, но я видел, что это обычный шифр одноалфавитной замены, а потому никакого смысла в переводе из двоичной системы в десятичную не было. Идея была в чём-то ином, но мы так и не смогли разобраться. Так что я отложил это до возвращения отца.

Страница 29