В настоящее время я пытаюсь решить шифр Цезаря, не зная ключа. Я должен подойти к проблеме, используя взаимный индекс совпадения, чтобы определить, что является ключом. Я решил проблему другими методами, используя статистические свойства английского языка, но я хотел бы попытаться решить проблему и с помощью этого метода.
Я только что узнал, что индекс совпадения и индекс взаимного совпадения - это разные вещи. Учитывая моноалфавитный шифр, индекс совпадения всегда будет возвращать ~ 0,067 (для английского языка). Однако, судя по тому, что мне дали, это не так.
Мне нужна помощь в понимании того, как создать алгоритм для определения взаимного индекса совпадения с учетом формулы
Учитывая, что где
— это появление i-й буквы в алфавите, а N — длина текста и
а>
Из того, что я понял (я ужасен в математике), мне нужно перебрать i от 0 до 25 и получить индекс максимального взаимного индекса совпадения среди 25, и это даст мне ключ для шифра. Для этого мне нужно умножить пи на qi+k. Однако, если pi примерно равно qi+k для всех i, не означает ли это, что ? При этом разве уравнение не является суммой квадратов пи?
sum(p[i] * q[(i+k)%26] for i in range(26))
в питоне. - person Paul Hankin   schedule 11.07.2020