Юный техник 1986-03, страница 65

Юный техник 1986-03, страница 65

слова (из каждых 1000 литер в среднем около 175 являются пробелами), далее идут буквы О, Е, А, И, Н, Т и так далее. Обычно достаточно восстановить несколько самых употребительных литер, чтобы расшифровать весь текст, опираясь на предположения о его смысле.

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

ЧАСТОТНЫЙ АНАЛИЗ = процедура (ТЕКСТ)

СЧЕТЧИК - таблица (литера, число)

выполнить для К от 1 до длины (ТЕКСТ)

СЧЕТЧИК (ТЕКСТ (К:К) -СЧЕТЧИК (ТЕКСТ (K:K)J + 1

повторить

упорядочить СЧЕТЧИК по убыванию чисел

результат = СЧЕТЧИК конец описания процедуры ЧАСТОТНЫЙ АНАЛИЗ

Проследим для примера за работой процедуры ЧАСТОТНЫЙ АНАЛИЗ, когда она применяется к обычному, незашифрованному тексту «МАША ЕЛА КАШУ». Сначала берется первая литера текста — буква М — и помещается в таблицу с нулевым значением счетчика. Затем выполняется инструкция: СЧЕТЧИК («М») = СЧЕТЧИК («М») + 1