【问题标题】:What is the performance of `count` on a Clojure set?`count` 在 Clojure 集上的性能如何?
【发布时间】:2014-04-15 09:32:43
【问题描述】:

所以,我读到count 操作对于 Clojure 向量、列表和映射来说是 O(1)

(count [1 2 3]) ;=> 3

但是对于 Clojure 集,它也是 O(1) 吗?我想它可能是,但我不确定如何找出答案。我快速阅读了http://clojure.org/data_structures#Data%20Structures-Sets,但看不到那里的信息。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    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
    • 是的 Counted 是一个有用的标记界面来检查。虽然请注意,它并不严格 保证 O(1) 行为 - 您必须检查实际的具体类实现以确保这一点。从理论上讲,有人可以以 O(n^2) 或更差的性能糟糕地实现Counted....
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2013-10-16
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多