Расшифровка текста, основанный на частотной основе (вопросы о функции стоимости)

Я хотел бы расшифровать тексты на основе частотного анализа. Программирование - это не проблема, но есть некоторые математические трудности.

(Не стоит беспокоиться, а не взломать, я хочу пойти на шифр Zodiac 340, но вопрос в целом заключается в расшифровке http://zodiackillerciphers.com/wiki/images/7/7d/340-cipher-hi-resolution.jpg, а не о других проблемах с шифрованием.)

Я сломал это до 5 кратких вопросов, связанных со стоимостью, чтобы показать мои усилия, короткие ответы - это хорошо, любая помощь оценивается. Моя проблема в том, что различия в значениях в функции стоимости очень малы.

Учитывая

  • Текст с любыми числами символов, называемый шифром. Шифр находится на английском языке. Каждый символ в шифре обозначает только одну букву, но одна буква может быть выражена через несколько символов. Мы не знаем, есть ли какие-либо пробелы (но строка, которая должна быть оценена функцией стоимости, будет разделена пробелом и имеет только буквы A-Z).
  • Частотный анализ писем (A-Z и пробел) для: букв, букв и буквенных триплетов. 4000 самых распространенных слов на английском или "все" словах, используя sowpods scrabble dictionary.

Вопросы о частотном анализе:

  • Лучше ли просто проверять наиболее распространенные слова или все слова, используя sowpods (возможно, удаление 2 и 3 буквенных слов, которые не входят в 4000 наиболее распространенных слов)?
  • Для буквенных пар и триплетов: лучше ли хранить только их частоту по всем или хранить ее в форме P (A | B) (вероятность a есть A) и P (C | AB) для тройни?

Концепция

Пропустить, если не интересно. Я не хочу вдаваться в подробности здесь, есть несколько методов, которые можно было бы использовать. Грубый эскиз:

  • Создать (полу) случайное решение
  • Локальная оптимизация решения на основе стоимости
  • Начать и передать часть приобретенных знаний.
  • После стагнации в течение некоторого времени попробуйте то же самое с введением пространств в фиксированных положениях до локальной оптимизации (в случае, если сообщение не имеет пробелов)
  • сравните два найденных решения и верните лучший

Функция затрат

Как бы выглядела функция стоимости? Общий может быть выражен как:

w1 * letterCost + w2 * pairCost + w3 * tripletCost + w4 * wordCost

и сумма всех сигналов равна единице:

w1 + w2 + w3 + w4 = 1

Вопросы о функции стоимости

  1. Теперь, когда простые частоты игнорируют слова (w4 = 0), вы можете просто подсчитать частоты и принять квадрат разницы (это то, что я сейчас делаю). Интересно вот что: разумнее ли иметь w1 = w2 = w3 или w1 = 27 * w2 = 27 * 27 * w3?

  2. Как это работает с условными вероятностями?

  3. Как вы включаете знание о словах? Просто посчитайте, сколько реальных английских слов есть, вероятно, утяжеляя их по их длине или есть более интеллектуальный способ?

Ответ 1

По-моему, ваши вопросы возникают из слишком общей концепции. Невозможно вычислить функцию стоимости, если вы не будете точно определять алгоритм. Я могу предложить подход к точной второй точке вашей концепции:

  • Рассчитать ожидаемые значения для случайных (например: если у вас есть 100 000 букв, случайный триплет должен произойти 5 раз)
  • Пусть n будет количество букв в зашифрованном тексте. Затем для каждой буквы возрастает значение Letter [y], Pair [y] [y + 1], Triplet [y] [y + 1] [y + 2]
  • Если появление некоторых данных значительно больше значений, вычисляемых в 1. Затем попытайтесь судить, насколько близко вы отвечаете.

Тем не менее, точка 3 и "судить" очень общие, но на основании этого я могу дать вам несколько ответов:

Вопросы о функции стоимости

  • Лучше использовать только самые распространенные слова, потому что это дает вам информацию об отклонении от случайных результатов. Удержание всех слов не дает вам никакой прибыли.
  • Частота - это мое одобрение. Я не могу найти применение условных вероятностей.

Функция затрат

В моем случае стоимость algortihm равна O (n) + const (для длинных слов вы можете рассмотреть использование хэш-таблиц) + "судить". Проблема продолжается, потому что многие зависят от того, как "судья" будет решена.

  1. Я не знаю, почему вы решили рассчитать такую ​​функцию стоимости, но для меня w1 = 27 * w2 = 27 * 27 * w3 звучит более разумно, потому что у него меньше вероятность появления большого числа средних слов.
  2. В моем решении нет необходимости и преимуществ в использовании условных вероятностей.
  3. И этот вопрос является еще одной большой проблемой и, на мой взгляд, имеет много общего с "Генерировать (полу) случайное решение". Допустим, вы догадались, что буквы 't', 'h', 'e', ​​'y',. Ваш алгоритм должен распознавать слова "они" , "они" , "они" , но полностью пропускают слова "и", "работа", "нет", "будет". Вы можете использовать характеристики слов, например, "общий" префикс, "воля" 3 и 4 буквы одинаковы и т.д. Это усложняет решение, но оно должно давать лучшие результаты.