为什么ImmutableList在其add方法中具有复杂度O(logN)?

时间:2016-05-18 15:37:06

标签: c# immutable-collections

我认为创建了一个新的N + 1项的ImmutableList。因此,它的复杂性应该是O(N)。

1 个答案:

答案 0 :(得分:3)

解释了ImmutableList具有O(log n)复杂度的原因here

  

为什么不可变类型更容易出现可变的O(log n)时间   类型是O(1)?这是内部数据结构的结果   允许在集合的实例之间共享。比如一个   mutable HashSet分配一个数组,并存储元素   索引处的数组由其哈希码确定。这个提供者   O(1)查找和存储时间。如果ImmutableHashSet使用了这个   相同类型的数据存储,然后每个突变都需要   重新分配和复制整个数组只是为了改变一个条目,   这将快速坦克性能和GC压力   收藏量增长很大。相反,这些不可变集合使用   不可变的平衡二叉树来存储他们的数据,允许非常   跨集合的变异实例的高效数据共享。如   但是,每次查找或更改都需要树遍历   (最坏的情况下)具有O(log n)的算法复杂度。

MSDN documentation for ImmutableArray提供了一些见解并显示了ImmutableArray和ImmutableList之间的复杂性差异:

enter image description here