当前位置: 首页 > 面试题库 >

在检查奇数时是否&%比%快?

沈建柏
2023-03-14
问题内容

要检查奇数和偶数整数,最低位检查比使用模数检查更有效吗?

>>> def isodd(num):
        return num & 1 and True or False

>>> isodd(10)
False
>>> isodd(9)
True

问题答案:

是的 timeit标准库中的模块是检查这些内容的方式。例如:

AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x & 1' 'isodd(9)'
1000000 loops, best of 3: 0.446 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x & 1' 'isodd(10)'
1000000 loops, best of 3: 0.443 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x % 2' 'isodd(10)'
1000000 loops, best of 3: 0.453 usec per loop
AmAir:stko aleax$ python -mtimeit -s'def isodd(x): x % 2' 'isodd(9)'
1000000 loops, best of 3: 0.461 usec per loop

如您所见,在我的(第一天==旧==慢;-) Macbook Air上,该&解决方案的重复速度比该%解决方案快7到18纳秒。

timeit不仅告诉您更快的方法,而且告诉您执行速度快了多少(只需运行几次测试),这通常表明它极其重要(调用函数的开销大约为400时,您 真的
关心10纳秒的差异)吗??!-)…

自Knuth撰写以来已经有35年的时间了(使计算机更快地获得数量级的增长!),已经说服了程序员说微优化本质上是不相关的,这已被证明是不可能完成的任务。

我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。

正如他所解释的那样,这是引用自Hoare的一份更早的声明。我猜每个人都完全相信,他们的案件占剩下的3%!

因此,我们不停地重复“无关紧要”,我们(特别是蒂姆·彼得斯(Tim
Peters)应得的荣誉)放入标准的Python库模块中timeit,这使得测量此类微基准变得轻而易举,从而至少让 一些
程序员说服自己,嗯,这种情况确实属于97%的人群!-)



 类似资料:
  • 问题内容: 我正在尝试制作一个程序来检查单词是否是回文,并且到目前为止,它可以与具有偶数个数字的单词一起使用。我知道如果字母的数量为奇数时如何使它起作用,但是我只是不知道如何确定数字是否为奇数。有什么简单的方法可以找到数字是奇数还是偶数? 仅供参考,这是我的代码: 谢谢 问题答案: if num % 2 == 0: pass # Even else: pass # Odd 该符号就像除法一样,仅检

  • 问题内容: 如何确定给定数字是偶数还是奇数?我很久以来一直想弄清楚这个问题,而且还没到任何地方。 问题答案: 你可以使用模运算符,但这可能会很慢。如果是整数,则可以执行以下操作: 这是因为低位将始终设置为奇数。

  • 当页面第一次加载时,我需要检查中是否有图像,并加载最后一个图像。 否则,我禁用预览按钮,提醒用户按下新图像按钮,并创建一个空数组来放置图像; 问题是中的

  • 问题内容: AngularJs中的内联方法是否可以检查某物是否为数组? 我本以为这样可以工作: 我已经证实它实际上是一个数组。有什么我想念的东西吗? 问题答案: 您可以戴上瞄准镜… 小提琴

  • 问题内容: 我有一个嵌入了数据库的桌面应用程序。当我执行程序时,我需要检查特定的表是否存在,如果不存在则创建它。 给我的数据库一个名为conn的Connection对象,我该如何检查呢? 问题答案: 您可以使用可用的元数据: 有关更多详细信息,请参见此处。还要注意JavaDoc中的注意事项。