繁体   English   中英

Python与C#字典

[英]Python vs C# dictionaries

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

顺便说一下,哪种实现更普遍? 如果我不得不使用另一种语言的标准库中的词典,那么他们最有可能会花费什么时间?

谢谢!

MSDN文档谈到平均案例时间复杂度(更具体地说,他们说这种复杂度“逼近”给定的函数),这些与Python文档中介绍的相同。 Python还提供了最坏情况的复杂性。 对于某些操作,MSDN还提供最坏情况的估计(例如: http : //msdn.microsoft.com/zh-cn/library/k7z0zy8k%28v=vs.110%29.aspx )。

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

在实践中跳过理论:一般情况描述您在执行操作时通常应该期望的内容。 最坏的情况通知您,有时在某些特定条件下和/或对于某些特定数据,该操作的执行速度可能会变慢。

另外,最好专注于一个特定的操作。 通常,讨论“字典的复杂性”也没有多大意义。

我假设Python和C#中的字典使用的实现大致相同:哈希查找。

哈希查找的时间顺序比O(1)大。 平均而言,一旦密钥被散列,就可以一次访问或更长时间(对于散列冲突)找到它。

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

因此,是的,Python具有最坏的情况O(n),而C#的平均时间复杂度为O(1+)。 另一方面,Python的平均时间复杂度为O(1+),而C#的最坏情况为O(n)。

换句话说,它们是相同的(近似一阶)。 您可能会遇到的所有其他问题也是如此。

但是请注意任何排序字典。 他们有很大的不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM