Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures Clojure中是否有允许删除O(1)或O(logn)中任意元素的数据结构?_Data Structures_Clojure - Fatal编程技术网

Data structures Clojure中是否有允许删除O(1)或O(logn)中任意元素的数据结构?

Data structures Clojure中是否有允许删除O(1)或O(logn)中任意元素的数据结构?,data-structures,clojure,Data Structures,Clojure,在代码中,我正在寻找removenth和一些coll,对于任意大的集合,它们将是O(1)或O(logn) (= (remove-nth (some-coll "a" "b" "c" "d") 2) (some-coll "a" "b" "d")) 我最好是寻找一个只使用标准库的解决方案,但我对使用外部库的解决方案感兴趣。不是在标准库中,而是(介绍它们的原始论文是)完成工作(通常是很棒的功能数据结构)。您可以通过O(logn)拆分和O(logn)连接来删除O(logn) (defn re

在代码中,我正在寻找
removenth
一些coll
,对于任意大的集合,它们将是O(1)或O(logn)

(=
  (remove-nth (some-coll "a" "b" "c" "d") 2)
  (some-coll "a" "b" "d"))

我最好是寻找一个只使用标准库的解决方案,但我对使用外部库的解决方案感兴趣。

不是在标准库中,而是(介绍它们的原始论文是)完成工作(通常是很棒的功能数据结构)。您可以通过O(logn)拆分和O(logn)连接来删除O(logn)

(defn remove-nth [xs n]
  (let [[left _ right] (ft-split-at xs n)]
    (ft-concat left right)))

(def cdl (apply counted-double-list '[a b c d e f]))

(remove-nth cdl 3)
;; => (a b c e f)
另一种选择是(使用原稿)
它还提供O(对数n)分割(通过切片)和连接。此外,在Clojure的现有向量上几乎可以透明地执行此操作。

我认为您指的是任意大的集合,而不是任意大的输入。移除或构造
n
项必须是
Omega(n)
,因为您必须逐个地完成它们。@您完全正确;这是表达我意思的更清楚的方式。为了完整起见,我要补充的是,映射支持删除元素的O(logn),并且您可以始终使用整数进行索引。您的
remove nth
表明您正在寻找一个序列,我认为这意味着您需要其他类似序列的行为(常数时间附加/线性构造),手指树和RRB树支持这些行为。