我是Python新手,我注意到有两种方法可以在字典中搜索密钥:
d={1: 'a', 2: 'b',...}
if 1 in d: ...
或
if 1 in d.keys():
我认为它们是相同的,但由于我必须在一个包含10万个元素的字典中搜索,我已经看到第二种方式需要花费太多时间。我一直在寻找并读到这是因为d.keys()
返回一个列表然后搜索元素的时间复杂度是O(n)但是字典中搜索的复杂度是O(1)。这是真的吗?
答案 0 :(得分:1)
是的,这是真的。大多数字典都是作为哈希映射实现的。所以你有O(1)进行访问。这比列表的O(n)快得多。
为什么只需要O(1)? 因为哈希映射会对每个键进行哈希处理,并将其放入生成的桶中。如果您搜索某个键,它将对您的输入进行哈希处理并查看是否存在值。如果有值则返回它,否则您会收到通知,表示没有输入。就像快速浏览一样......
如果你对这样的东西感兴趣,你应该看看"算法的介绍"通过cormen