0

所以为了好玩,我决定重温我以前的大学作业,其中给出了大约 75 个字符的密文,以及一个用三个字母签名的婴儿床(我老师的姓名首字母)

我做了什么:

  1. 将结果限制在那些有部分或全部婴儿床的人身上。
  2. 然后我开始对(1)中较小的结果子集进行一些字母频率分析。

现在的任务归结为编写一些语言识别软件,但首先要处理一些问题。我选择强制所有转子设置(类型,初始位置),因此其中包含部分或全部婴儿床的结果条目仍然有一些从插件板上交换的字母。

我知道我的下一步应该是制作两个矩阵并消化一个语料库,在第一个矩阵中,我会做一个计数,所以如果第一个字母是 A,在第一个矩阵中,我会在第 0 行,并且我要增加的列将是直接跟在 A 后面的字母,说它是 B。然后我会移动到 B 并看到下一个字母是 U,所以我会转到 B 行并增加 U 列的条目。在消化整个语料库后,我会将概率放入第二个矩阵。

使用第二个矩阵,我可以为整个句子分配得分值,并且可以对输出进行评分并进一步缩小结果,因此找到消息应该像在更小的大海捞针中找到针脚一样容易。

现在我在 python 中这样做,我想知道将字符转换为整数是否更好,减去最小的 char 'A',然后将其用作我的索引,或者我是否应该使用 dict 和每个letter 将对应于一个 int 值,因此在我的矩阵中查找该位置的索引将类似于LetterTally[dict['A']][dict['B']].

强制转换减法方法如下所示:

firstChar = 'A'
secondChar = 'B'

LetterTalley[(ord(firstChar)-ord('A'))][(ord(secondChar)-ord('A'))]

在这两种不同的方法中,哪种方法更快?

4

1 回答 1

1

您是否考虑过使用字典而不是构建矩阵,以便您可以LetterTally['A']['B']直接进行查找()?

于 2012-03-14T12:37:17.040 回答