Ras*_*sto 2 .net c# collections complexity-theory dictionary
IDictionary<TK, TV>定义方法IDictionary.ContainsKey(in TK)和属性IDictionary.Keys(类型ICollection).我对(渐近)此方法的复杂性和Dictionary实现中的属性感兴趣IDictionary<TK, TV>.
考虑定义
IDictionary<int, string> dict = new Dictionary<int, string>();
int k = new Random().Next();
Run Code Online (Sandbox Code Playgroud)
并考虑到我们已经添加到字典中的dict n唯一KeyValuePairs.
什么是预期(渐近)呼叫的复杂性dict.ContainsKey(k)?我希望它在,O(1)但我没有在文档中Dictionary.ContainsKey找到它.
呼叫的复杂性是什么(渐近)dict.Keys.Contains(k)?我希望它在,O(1)但我没有在文档中Dictionary.Keys或在文档中Dictionary.KeyCollection找到它.如果是O(1)我不明白,为什么类型的IDictionary.Keys属性ICollection,而不是ISet(像Java中的例子).
由于IDictionary<K,V>它只是一个接口,而不是一个实现,因此它不提供任何性能保证.
对于内置Dictionary<K,V>类型,该ContainsKey方法应为O(1):
该Keys.Contains方法实际上调用了父类字典的ContainsKey方法,因此它也应该是O(1):
(两个引用均来自相关文档页面的"备注"部分.)