5
所以,我讀了count
操作是O(1)爲Clojure向量,列表和地圖。Clojure集上`count`的性能如何?
(count [1 2 3]) ;=> 3
但是,它也O(1)的Clojure的設置?我想它可能是,但我真的不知道如何找出。我有一個快速閱讀http://clojure.org/data_structures#Data%20Structures-Sets,但無法看到那裏的信息。
所以,我讀了count
操作是O(1)爲Clojure向量,列表和地圖。Clojure集上`count`的性能如何?
(count [1 2 3]) ;=> 3
但是,它也O(1)的Clojure的設置?我想它可能是,但我真的不知道如何找出。我有一個快速閱讀http://clojure.org/data_structures#Data%20Structures-Sets,但無法看到那裏的信息。
這是O(1)
您可以通過觀察clojure.lang.PersistentSet
保持在Java源代碼_count
現場驗證這一點:
https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentList.java
感謝您指出我找對地方了!我現在可以看到'Counted'接口指出了count()的O(1)性能,並且PersistentSet實現了它。 '(instance?clojure.lang.Counted#{:a:b::c})=> true' –
是的'計數'是一個有用的標記界面來檢查。雖然請注意它並不嚴格保證* O(1)的行爲 - 但您必須檢查實際的具體類實現以確保這一點。從理論上講,有人可能會用O(n^2)表現糟糕地執行'Counted'或者更糟.... – mikera