Создание перестановок массивов символов на основе частот букв в Java

1

У меня есть HashMap который хранит частоты каждой буквы в блоке зашифрованного текста в виде Character, Integer. Затем карта сортируется в LinkedHashMap по наиболее частому спуску.

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

Например, если мы возьмем:

E T A O I

как 5 наиболее распространенных букв desc, а затем буквенных частот в шифрованном тексте:

D=30 B=25 I=22 G=19 H=17

то было бы справедливо предположить, что D карты соответствуют E поскольку они являются наиболее распространенными, а затем B to T и т.д.

Если частоты букв:

D=30 B=25 I=22 G=22 H=22

Неясно, следует ли отображать I, G или H в A поскольку они являются наиболее распространенными после B

Я немного застрял и мне нужен способ создания набора массивов символов с каждой перестановкой списка частот. Что-то вроде этого потребуется для вывода в массивах char:

DBIGH
DBIHG
DBGIH
DBGHI
DBHIG
DBHGI

Любая помощь приветствуется

Теги:
arrays
cryptanalysis

1 ответ

0

Как вы уже сказали, вам нужно создать каждую перестановку строки IGH (здесь могут использоваться синтаксические символы и массив символов). Этот вопрос показывает решение этой проблемы.

Чтобы найти части на вашей карте, для которых вам нужно создать перестановки, просто перебирайте свою карту в своем частотном порядке и отслеживайте первое появление одинаковой частоты.

Изменить: добавление другой идеи, чтобы помочь с вашими комментариями. В принципе, вы можете разделить строку 26 символов на группы равной частоты. В приведенном выше примере это три группы: D, B и IGH. Чтобы создать все комбинации всей строки, вам нужно объединить все перестановки каждой группы со всеми перестановками всех других групп. Для одиночных групп char, которые тривиальны по c. Но как только вы получите больше групп из 3+ символов, он станет длинным списком...

  • 0
    Что если бы было более одного набора повторений? Полный ключ состоит из 26 букв и обычно содержит около 3 различных групп повторений
  • 0
    @JoshRoberts добавил больше информации в ответе выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню