我有一个HashMap
,它以字符,整数的形式存储密文块中每个字母的频率。然后按最频繁的降序将地图分类为LinkedHashMap
。
然后我将这些频率与已知的字母频率列表进行比较,以尝试猜测密码字母是什么。我遇到的问题是2个或更多字母出现的次数相同。
例如,如果我们采取:
E T A O I
作为5个最常见的字母desc,然后是密文中的字母频率:
D=30 B=25 I=22 G=19 H=17
然后将D
映射到E
是合理的,因为它是最常见的,然后是B
到T
等。
如果字母频率为:
D=30 B=25 I=22 G=22 H=22
目前尚不清楚I
,G
或H
是否应映射到A
,因为它们是B
之后的下一个最常见的。
我有点卡住,需要一种方法来创建一组char数组,每个排列频率列表。这样的东西需要在char数组中输出:
DBIGH
DBIHG
DBGIH
DBGHI
DBHIG
DBHGI
非常感谢任何帮助
答案 0 :(得分:0)
正如您所说,您需要创建字符串IGH
的每个排列(字符串和char数组可以在此处同义使用)。 This question显示了该问题的解决方案。
要查找地图中必须为其创建排列的部分,只需按频率顺序迭代地图,并跟踪第一次出现的相同频率。
修改:添加其他想法以帮助您发表评论。
基本上你可以将26个字符串分成相同频率的组。在上面的示例中,可以是三个组:D
,B
和IGH
。要创建整个字符串的所有组合,您需要将每个组的所有排列与所有其他组的所有排列组合在一起。对于那些微不足道的单个字符组。但是一旦你获得了更多3个以上的字符组,它就会成为一个很长的名单......