我注意到在Clojure中,惰性序列似乎是以链表的形式表示的(或者至少被视为只能按顺序访问元素的序列)。即使被缓存到内存中,通过nth
访问惰性序列的时间复杂度仍然是O(n),而不是像向量一样的常数时间。
;; ...created my-lazy-seq here and used the first 50,000 items
(time (nth my-lazy-seq 10000))
"Elapsed time: 1.081325 msecs"
(time (nth my-lazy-seq 20000))
"Elapsed time: 2.554563 msecs"
在Clojure中如何实现常数时间查找或逐步创建惰性向量?
想象一下,在生成惰性向量期间,每个元素都是前面所有元素的函数,因此遍历列表所花费的时间成为一个重要因素。
相关的问题只有这个不完整的Java代码片段: Designing a lazy vector: problem with const
fib
序列上使用nth
:)(nth fib 10)
- NikoNyrh