Расшифровка текста, основанный на частотной основе (вопросы о функции стоимости)
Я хотел бы расшифровать тексты на основе частотного анализа. Программирование - это не проблема, но есть некоторые математические трудности.
(Не стоит беспокоиться, а не взломать, я хочу пойти на шифр 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
Вопросы о функции стоимости
-
Теперь, когда простые частоты игнорируют слова (w4 = 0), вы можете просто подсчитать частоты и принять квадрат разницы (это то, что я сейчас делаю). Интересно вот что: разумнее ли иметь w1 = w2 = w3 или w1 = 27 * w2 = 27 * 27 * w3?
-
Как это работает с условными вероятностями?
-
Как вы включаете знание о словах? Просто посчитайте, сколько реальных английских слов есть, вероятно, утяжеляя их по их длине или есть более интеллектуальный способ?
Ответы
Ответ 1
По-моему, ваши вопросы возникают из слишком общей концепции. Невозможно вычислить функцию стоимости, если вы не будете точно определять алгоритм. Я могу предложить подход к точной второй точке вашей концепции:
- Рассчитать ожидаемые значения для случайных (например: если у вас есть 100 000 букв, случайный триплет должен произойти 5 раз)
- Пусть n будет количество букв в зашифрованном тексте. Затем для каждой буквы возрастает значение Letter [y], Pair [y] [y + 1], Triplet [y] [y + 1] [y + 2]
- Если появление некоторых данных значительно больше значений, вычисляемых в 1. Затем попытайтесь судить, насколько близко вы отвечаете.
Тем не менее, точка 3 и "судить" очень общие, но на основании этого я могу дать вам несколько ответов:
Вопросы о функции стоимости
- Лучше использовать только самые распространенные слова, потому что это дает вам информацию об отклонении от случайных результатов. Удержание всех слов не дает вам никакой прибыли.
- Частота - это мое одобрение. Я не могу найти применение условных вероятностей.
Функция затрат
В моем случае стоимость algortihm равна O (n) + const (для длинных слов вы можете рассмотреть использование хэш-таблиц) + "судить". Проблема продолжается, потому что многие зависят от того, как "судья" будет решена.
- Я не знаю, почему вы решили рассчитать такую функцию стоимости, но для меня w1 = 27 * w2 = 27 * 27 * w3 звучит более разумно, потому что у него меньше вероятность появления большого числа средних слов.
- В моем решении нет необходимости и преимуществ в использовании условных вероятностей.
- И этот вопрос является еще одной большой проблемой и, на мой взгляд, имеет много общего с "Генерировать (полу) случайное решение". Допустим, вы догадались, что буквы 't', 'h', 'e', 'y',. Ваш алгоритм должен распознавать слова "они" , "они" , "они" , но полностью пропускают слова "и", "работа", "нет", "будет". Вы можете использовать характеристики слов, например, "общий" префикс, "воля" 3 и 4 буквы одинаковы и т.д. Это усложняет решение, но оно должно давать лучшие результаты.