在 Python 中向字典添加新的键值对的时间复杂度是多少?
What is the time complexity of adding new key-value pair to a dictionary in Python?
添加一个 new 键值对的时间复杂度是多少:
d = dict()
d.update({'key':'value'})
python 字典是 hash table
下面是“大 O 表示法中的时间复杂度”的 table(取自上面相同的 link)
算法平均最坏情况
Space O(n)1 O(n)
搜索 O(1) O(n)
插入 O(1) O(n)
删除 O(1) O(n)
Python 中词典的更新功能可以通过几种不同的方式调用。第一个是作为键到值的映射,后跟可选的关键字参数。第二种方式是元组列表,后跟可选的关键字参数。第三个是作为一系列关键字参数。我们可以在 builtins.pyi:
中看到这些函数存根
@overload
def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ...
@overload
def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ...
@overload
def update(self, **kwargs: _VT) -> None: ...
还有这个更实际的例子:
d_obj = dict()
d_obj.update({'a':1},b=2)
d_obj.update([('c',3)],d=4)
d_obj.update(e=5)
print(d_obj)
对于这些实现中的每一个,Python 将遍历传入的每个参数并在常数时间内检查键是否在字典中。如果键在字典中,该函数会将键设置为其新值。如果不是,则该函数会将键添加到字典并设置其值。由于所有这些添加和设置操作都可以假设在恒定时间内完成,我们可以假设传递给 update()
的每个单独项目都在恒定时间内完成,因此我们得到 O(1 * n) 其中 n 等于传递给 update()
的单个键值对的数量。因此更新函数的时间复杂度为O(n).
由于“设置项目”被列为 O(1)
平均情况和 O(n)
最坏情况,我相信你可以假设这也是 update()
的复杂性。
添加一个 new 键值对的时间复杂度是多少:
d = dict()
d.update({'key':'value'})
python 字典是 hash table
下面是“大 O 表示法中的时间复杂度”的 table(取自上面相同的 link)
算法平均最坏情况
Space O(n)1 O(n)
搜索 O(1) O(n)
插入 O(1) O(n)
删除 O(1) O(n)
Python 中词典的更新功能可以通过几种不同的方式调用。第一个是作为键到值的映射,后跟可选的关键字参数。第二种方式是元组列表,后跟可选的关键字参数。第三个是作为一系列关键字参数。我们可以在 builtins.pyi:
中看到这些函数存根@overload
def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ...
@overload
def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ...
@overload
def update(self, **kwargs: _VT) -> None: ...
还有这个更实际的例子:
d_obj = dict()
d_obj.update({'a':1},b=2)
d_obj.update([('c',3)],d=4)
d_obj.update(e=5)
print(d_obj)
对于这些实现中的每一个,Python 将遍历传入的每个参数并在常数时间内检查键是否在字典中。如果键在字典中,该函数会将键设置为其新值。如果不是,则该函数会将键添加到字典并设置其值。由于所有这些添加和设置操作都可以假设在恒定时间内完成,我们可以假设传递给 update()
的每个单独项目都在恒定时间内完成,因此我们得到 O(1 * n) 其中 n 等于传递给 update()
的单个键值对的数量。因此更新函数的时间复杂度为O(n).
由于“设置项目”被列为 O(1)
平均情况和 O(n)
最坏情况,我相信你可以假设这也是 update()
的复杂性。