以下是assoc
的代码:
(def assoc
(fn assoc
([map key val] (. clojure.lang.RT (assoc map key val)))))
clojure.lang.RT
是什么意思?
在矢量/地图上调用assoc
的复杂性是什么?
访问由assoc
创建的结构的复杂性是什么?
答案 0 :(得分:4)
clojure.lang.RT
是主要的Clojure RunTime类。它有大多数方法构成语言的核心。
assoc
为O(1)。 array-map
从前几个项开始线性,然后将自己提升为hash-map
,因此它也是O(1)。当然,如果需要,您可以使用非O(1)的东西实现关联接口。
从技术上讲,通过在另一个地图上调用assoc
创建的地图或矢量中的项目的访问时间是O(log32 N)。因为这些数据结构的大小为~2 ^ 32项的上限,所以最大树深度为6,实际上是恒定时间
Clojure的关联数据结构在空间中都是O(nLog n)(因为它们是树)。