【问题标题】:Why is Elixir's Enum.sum so fast?为什么 Elixir 的 Enum.sum 这么快?
【发布时间】:2017-02-07 05:15:30
【问题描述】:

运行时

1..10000000000000000000 |> Enum.sum

结果是在看似恒定的时间内计算出来的 - 我假设它使用公式 1+ 2+ ... + n = n(n+1) / 2

是什么让 elixir 进行这种优化? 1..n 表示法与将普通列表声明为[1,2,3] 不同。当我检查1..100000 时,它似乎返回了一个字符串。这是怎么回事?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    1..10000000000000000000 是一个Range,Elixir 在Enum.sum 中有一个特殊情况,用于使用整数求和公式的范围:

    def sum(first..last) when last > first do
      div((last + first) * (last - first + 1), 2)
    end
    

    Source

    【讨论】:

    • 完全有道理 - 我没有意识到有一个中间范围可以允许这种优化。谢谢!
    • 模式匹配 ftw :-)
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2018-03-22
    • 2021-12-19
    • 2013-09-09
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多