【问题标题】:Which is faster? Casting and subtractions or dict look ups in Python哪个更快? Python中的铸造和减法或字典查找
【发布时间】:2012-03-14 12:15:56
【问题描述】:

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

我做了什么:

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

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

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

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

现在我在 python 中执行此操作,我想知道将字符转换为整数是否更好,减去最小的字符“A”,然后将其用作我的索引,或者我是否应该使用dict 并且每个字母都对应一个 int 值,因此在我的矩阵中查找该位置的索引类似于LetterTally[dict['A']][dict['B']]。

强制类型减法方法如下所示:

firstChar = 'A'
secondChar = 'B'

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

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

【问题讨论】:

  • 为什么不自己测量呢? Python为此提供了一个方便的模块timeit。

标签: python dictionary markov


【解决方案1】:

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

【讨论】:

  • 我什至没有想到。我将进一步研究这一点。尽管如此,问题仍然存在,是铸造和减去还是进行字典查找更好?
  • 事后诸葛亮.. 数组查找不会比字典查找快吗?
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多