在python中比较2个字典的时间复杂度是多少

Jit*_*ddi 2 python dictionary

有人可以解释一下操作的时间复杂度是多少,d1 == d2其中 d1 和 d2 是 2 个 python 字典

Wil*_*sem 5

简短回答:如果两个字典具有相同数量的项目,则需要O(n)次等式检查,其中n是项目数。如果两个字典的项数不同,则需要O(1),因为这两个字典是不同的。请注意,相等性检查在计算上可能很昂贵。


这里估计时间复杂度的一个问题是字典可以包含列表、其他字典、树等值。

以以下两本词典为例:

{ 1: [1,4,2,5] } == { 1 : [1,4,2,6] }
Run Code Online (Sandbox Code Playgroud)

这里两个字典都有相同的键,但为了检查列表是否相同,最坏的情况是,时间与列表的大小成线性关系。

然而,我们可以根据需要进行的比较次数来说话。如果我们假设字典具有恒定的查找时间,那么这将是O(n),其中n是两个字典的元素数。

我们可以在函数中查看CPython源代码[GitHub]dict_equal(PyDictObject *a, PyDictObject *b)

该函数将首先检查两个字典是否包含相同数量的对象。如果不是这样,那么这两个字典当然不能相等。

接下来我们可以迭代两个字典之一。对于第一个字典中的每个键/值对,我们查找第二个字典中是否存在这样的键。如果不存在这样的值,那么我们知道两个字典不相等,因此我们可以返回False

如果存在这样的键,我们会在第一个字典和第二个字典的对应值之间执行相等性检查。如果比较失败,我们可以返回False,因为这意味着两个字典有一个对应值不同的键。

如果对于字典的所有键,该键都存在于另一个字典中,并且认为值相同,我们可以返回True,因为这意味着所有键都存在于另一个字典中,并且它们对应的值也是相同的.