【问题标题】:Is it quicker to do division batch-wise or just once?分批进行划分还是一次划分更快?
【发布时间】:2019-05-02 16:23:59
【问题描述】:

假设我有数字:1、2、4、7、12 和 18(随机选择)。在计算平均值时,这样做会更快:

mean=0
loop through [1, 2, 4, 7, 12, 18]
   for each item:
     increase mean by (item/total number of items)

mean=0
loop through [1, 2, 4, 7, 12, 18]
   for each item:
     increase mean by (item)
divide mean by 3

或者它对算法的速度没有影响?这是一个纯粹的理论问题(忽略特定选择的编译器等)

【问题讨论】:

    标签: theory


    【解决方案1】:

    这在一定程度上取决于您的编译器的智能程度 - 有些会执行大量优化,有些则不会。通常可以配置优化级别,以便您可以改变编译器转换代码的程度。

    在优化的限制下,编译器可以识别您的代码计算一个常量值并在编译期间预先计算它并将结果放入输出变量中。这绝对是可能的。

    另一种可能性是编译器识别出循环超出了固定范围,因此它删除了循环并扩展了总和。

    在没有优化的限制下,您的第一个 sn-p 执行 6 次除法运算,而第二个 snipped 仅执行一次。由于每个 sn-p 的其他操作数量相同,因此与第二个 sn-p 相比,第一个 sn-p 不可能更快,而且可能更慢。

    了解您的语言的编译器或解释器中的优化并尝试不同级别的优化以了解每个 sn-p 的性能如何变化可能会很有启发性。您可能需要更大的输入样本才能获得有用的时间测量结果。

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2012-05-19
      • 1970-01-01
      • 2015-11-02
      • 2016-05-22
      相关资源
      最近更新 更多