什么是字典的时间和空间复杂性?

时间:2013-10-25 08:32:19

标签: c# dictionary time-complexity space-complexity

假设我有大小为N的数据(即N个元素),并且字典是用容量N创建的。复杂性是什么:

  • 空间 - 整个字典
  • 时间 - 在词典中添加条目
MS透露只有条目检索接近O(1)。但其余的呢?

3 个答案:

答案 0 :(得分:3)

  

整个字典的空间复杂性是什么

Dictionary使用具有O(N)空间复杂度的associative array数据结构。

Msdn says:“Dictionary类实现为哈希表”。哈希表依次使用关联数组。

  

时间的复杂性 - 在词典中添加条目

单个添加需要摊销O(1)时间。在大多数情况下,它是O(1),当底层数据结构需要增长或缩小时,它会更改为O(N)。由于后者不经常发生,人们使用“摊销”一词。

答案 1 :(得分:2)

添加新条目的时间复杂性记录在Dictionary<T>.Add()

  

如果Count小于容量,则此方法接近O(1)操作。如果必须增加容量以容纳新元素,则此方法将成为O(n)操作,其中n为Count。

答案 2 :(得分:1)

它没有正式记录,但广泛陈述(并通过反汇编可见)底层存储是一组名称 - 值对。因此,空间复杂度为 O(n)

因为它不是规范的一部分,所以理论上可以改变;但在实践中极不可能,因为它会改变可见的各种操作(例如枚举)的性能。