所以我有

(def a (vec (range 1000000)))
(def b (vec (range 100000)))


并取其余两个向量

(time (dorun (subvec b 1 100000)))
=>"Elapsed time: 3.585556 msecs"
(time (dorun (subvec a 1 1000000)))
=>"Elapsed time: 43.088316 msecs"


医生说这个操作需要O(1)。我想念什么吗?

最佳答案

dorun正在使用该时间遍历整个矢量切片。

顺便说一下,矢量不是很懒。将它们包装在dorun / doall中是没有意义的。

关于clojure - clojure subvec O(n)而不是O(1)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16755670/

10-12 18:59