Python与C#词典

时间:2014-05-28 13:02:30

标签: c# python dictionary

我已经在Python编写了一段时间了,我习惯于认为字典具有最坏的O(n)时间复杂度(source)。但是,在工作中我必须使用C#,我最近才发现C#中的字典具有更好的时间复杂度(source)。这是为什么? python词典比C#词汇有什么优势?

顺便说一句,哪种实现更常见?如果我不得不使用其他语言标准库中的词典,那么它们最有可能具有什么时间复杂度?

谢谢!

2 个答案:

答案 0 :(得分:5)

MSDN文档讲述了平均案例时间复杂度(更具体地说,它们表示复杂性"接近"给定函数),这些与Python文档中提供的相同。 Python还提供最坏情况的复杂性。对于某些操作,MSDN还提供最坏情况估计(例如:http://msdn.microsoft.com/en-us/library/k7z0zy8k%28v=vs.110%29.aspx)。

将平均情况与最坏情况进行比较是没有意义的。

在实践中跳过理论:平均情况描述了在执行操作时您应该期望的一般情况。最糟糕的情况通知您,有时,在某些特定条件和/或某些特定数据中,操作可能执行得较慢。

此外,最好专注于一个特定的操作。讨论"字典的复杂性"总的来说也没有多大意义。

答案 1 :(得分:1)

我认为Python和C#中的字典使用相同的实现:散列查找。

散列查找的时间顺序略大于O(1)。平均而言,一旦对密钥进行了哈希处理,就可以在一次访问中找到它或稍长一些(对于哈希冲突)。

散列查找的最坏情况性能是O(n)。如果字典中的所有键具有相同的散列值,则搜索(通常)等同于线性暴力。

所以是的,Python最糟糕的情况是O(n),而C#的平均时间复杂度为O(1+)。另一方面,Python的平均时间复杂度为O(1+),C#的最坏情况为O(n)。

换句话说,它们是相同的(对于一阶近似)。所有其他你可能会遇到的情况也是如此。

但请注意任何排序字典。他们非常不同。