clojure subvec O(n)而不是O(1)?

时间:2013-05-26 02:22:16

标签: clojure

所以我有

(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)。我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

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

顺便说一下,矢量并不是懒惰的;将它们包裹在dorun / doall中是毫无意义的。