python - 在python中比较2个字典的时间复杂度是多少
问题描述
有人可以解释一下操作的时间复杂度是多少,d1 == d2
其中 d1 和 d2 是 2 个 python 字典
解决方案
简短回答:如果两个字典的项目数相同,则需要O(n)相等性检查,其中n项目数。如果两个字典的项目数不同,则需要O(1),因为这两个字典是不同的。请注意,相等检查的计算量可能很大。
这里估计时间复杂度的一个问题是字典可以包含列表、其他字典、树等值。
以以下两个词典为例:
{ 1: [1,4,2,5] } == { 1 : [1,4,2,6] }
这里两个字典都有相同的键,但是为了检查列表是否相同,在最坏的情况下,它会花费与列表大小成线性关系的时间。
但是,我们可以根据需要进行的比较次数来说话。如果我们假设字典具有恒定的查找时间,那将是O(n),其中n是两个字典的元素数。
我们可以在函数中查看源CPython
代码[GitHub]dict_equal(PyDictObject *a, PyDictObject *b)
。
该函数将首先检查两个字典是否包含相同数量的对象。如果不是这样,那么这两个字典当然不能相等。
接下来我们可以迭代两个字典之一。对于第一个字典中的每个键/值对,我们查找第二个字典中是否存在这样的键。如果不存在这样的值,那么我们知道两个字典不相等,因此我们可以返回False
。
如果存在这样的键,我们在第一个字典和第二个字典的对应值之间执行相等性检查。如果比较失败,我们可以返回False
,因为这意味着两个字典有一个键,对应的值不同。
如果对于字典的所有键,该键都存在于另一个字典中,并且值被认为相同,我们可以返回True
,因为这意味着所有键都存在于另一个字典中,并且它们的对应值也相同.
推荐阅读
- java - Java - 在主要方法和绘图方法之间传递变量时遇到问题
- vb.net - 带变量的节点
- python - Python 如何将 collections.OrderedDict 转换为 dataFrame
- bash - 是否可以使用 bash sript 将数字的二进制表示形式写入文件?
- javascript - 如何在 Javascript 中从 JSON 中检索叶子子节点?
- shell - shell脚本中的多个条件不起作用
- django - 使用 python 3.7 版在生产环境中启动 django
- r - 通过 for-if 循环评估多个条件来生成虚拟变量
- javascript - 根据可用空间在 div 旁边排列文本
- python - 在python中逐行存储来自url的数据