gpt4 book ai didi

performance - 在clojure中添加两个整数数组的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 04:40:25 25 4
gpt4 key购买 nike

这似乎很慢:

(time (doall (map + (range 1000000) (range 1000000))))
"Elapsed time: 13951.664454 msecs"

怎么做比较快?

最佳答案

对于初学者来说,range 不是一个数组,而是一个惰性序列。

添加两个数字集合的最快方法可能是首先将它们放在数组中,然后进行迭代循环而不是映射。

user> (time (let [a (int-array (range 1000000))
b (int-array (range 1000000))]
(dotimes [i 1000000]
(aset a i (+ (aget b i) (aget a i))))
a))
"Elapsed time: 771.100395 msecs"
#<int[] [I@4233eba0>
user>

请注意,这仍然具有从两个范围调用中创建和实现惰性序列的开销,在实际性能中,您可能在进入求和步骤之前已经构建了该数据。

除非这是您代码中的性能瓶颈,否则以这种方式做事意味着您首先不应该使用 clojure。使用 clojure 的优点是您可以获得高级不可变数据结构,这导致引用透明和可并行化的代码。一旦你下降到像数组这样的原始 jvm 类型,你就失去了这些优势(以换取更好的性能)。

关于performance - 在clojure中添加两个整数数组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com