我正在寻找一种惯用的O(1)方法来提取Clojure中sorted-set
整数的最大元素。我是否必须将该组转换为seq?
答案 0 :(得分:4)
使用Clojure的内置排序集,这是O(log n):
(first (rseq the-set))
使用data.avl集合,上面也可以使用,您也可以使用nth
按等级在O(log n)时间内访问元素:
(nth the-set (dec (count the-set)))
这些数据结构中没有一个提供对极端元素的O(1)访问,但如果您希望频繁执行重复访问,您当然可以使用[the-set max-element]
捆绑(可能表示为清理操作的记录)和自定义API到最大元素。
如果您只关心快速访问最大元素而不关心有序遍历,您实际上可以使用捆绑方法" unsorted"集合 - 内置哈希集或data.int-map集。这对于重复disj
个最大元素没有用,当然,只是为了维护一个基本未排序的集合的上限信息(除非你在bundle中保留一堆max元素,此时它肯定是有意义的是简单地使用有序集合并免费获得所有相关操作。
答案 1 :(得分:0)
如果考虑到该套装的构造,(into #{} my-coll)
& (max my-set)
比(into (sorted-seq) my-coll)
& (last my-sorted-set)
。