【问题标题】:What is the complexity of Dictionary.ContainsValue?Dictionary.ContainsValue 的复杂性是什么?
【发布时间】:2021-07-24 14:10:10
【问题描述】:

谁能解释一下 Dictionary.ContainsValue?

我知道Dictionary.ContainsKey 的复杂度是 O(1)。

【问题讨论】:

标签: c# performance dictionary


【解决方案1】:

简答:O(N)

长答案:

此方法执行线性搜索;因此,平均执行时间与 Count 成正比。也就是说,这个方法是一个 O(n) 的运算,其中 n 是 Count。

Official documentation

【讨论】:

  • 为了让这个答案脱颖而出,解释为什么 ContainsValue 必须进行线性搜索会很高兴看到。
【解决方案2】:

O(n)。

此方法执行线性搜索;因此,平均执行时间与 Count 成正比。也就是说,这个方法是一个O(n)的运算,其中n是Count。

特别是,在字典结构中,密钥是在散列机制中生成的。当调用ContainsKey 函数时,它计算哈希码参数并检查该计算参数是否存在于哈希表中。

字典的值没有经过哈希处理,当调用ContainsValue 函数时,算法必须遍历存储的值,直到找到第一个匹配项(如果存在)。

请注意,如果您使用此功能,您可能需要另一种结构,该结构可以更复杂地工作。您可以将所有值存储在 HashSet<T> 中。

【讨论】:

  • 为了让这个答案脱颖而出,解释为什么 ContainsValue 必须进行线性搜索会很高兴看到。
  • @Enigmativity 感谢您的评论。我更新了我的答案。
猜你喜欢
  • 2014-08-06
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多