Юный техник 1986-03, страница 65слова (из каждых 1000 литер в среднем около 175 являются пробелами), далее идут буквы О, Е, А, И, Н, Т и так далее. Обычно достаточно восстановить несколько самых употребительных литер, чтобы расшифровать весь текст, опираясь на предположения о его смысле. Итак, напишем процедуру, которая определит, сколько раз встречается в тексте каждая из литер, и упорядочит литеры по убыванию полученных чисел. Как, вероятно, стал бы решать подобную задачу человек? Сначала он подсчитал бы, сколько раз входит в текст первая литера, затем вторая, третья и так далее. Нам будет проще, однако, научить «Поиск» действовать по-другому. «Поиск» будет читать текст литера за литерой, а информацию о частотах хранить в отдельной таблице. Прочитана очередная литера — и «Поиск» увеличит счетчик в соответствующей строке таблицы на 1. Первоначально таблица пуста. Встретилась в тексте новая литера — к таблице автоматически добавится новая строка с нулевым счетчиком. Так что в конце работы процедуры в таблицу войдут все литеры текста и останется только упорядочить ее по убыванию частот. ЧАСТОТНЫЙ АНАЛИЗ = процедура (ТЕКСТ) СЧЕТЧИК - таблица (литера, число) выполнить для К от 1 до длины (ТЕКСТ) СЧЕТЧИК (ТЕКСТ (К:К) -СЧЕТЧИК (ТЕКСТ (K:K)J + 1 повторить упорядочить СЧЕТЧИК по убыванию чисел результат = СЧЕТЧИК конец описания процедуры ЧАСТОТНЫЙ АНАЛИЗ Проследим для примера за работой процедуры ЧАСТОТНЫЙ АНАЛИЗ, когда она применяется к обычному, незашифрованному тексту «МАША ЕЛА КАШУ». Сначала берется первая литера текста — буква М — и помещается в таблицу с нулевым значением счетчика. Затем выполняется инструкция: СЧЕТЧИК («М») = СЧЕТЧИК («М») + 1 |