2013-05-26 14 views
2

그래서 내가 클로저 subvec O (1) 대신 O (n)?

(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). 내가 놓친 게 있니?

답변

5

그 시간은 dorun에 의해 전체 벡터 조각을 탐색하는 데 사용되고 있습니다.

벡터는 게으르지 않습니다. dorun/doall에 포장하는 것은 의미가 없습니다.

+0

나는 볼 수있다. 그래서 나는 그것의 성능을 시험하기 위해'do (subvec b 1) nil '과 같은 것을 할 수있다. – LoveProgramming

+2

정말 적절한 벤치마킹 라이브러리를 사용해야합니다. [Criterium] (https://github.com/hugoduncan/criterium)은 표준 Clojure 솔루션입니다. ('(criterium.core : as c)'),'(c/bench (subvec b 1))'). JIT 컴파일러가있는 환경에서 바로 벤치마킹을하는 것은 상당히 어렵습니다. –

관련 문제