我知道列表不同于数组。但是,O(1)?这意味着访问列表中的元素与访问字典中的元素一样快,我们都知道这是不正确的。我的问题是基于 这个文件:
list ---------------------------- | Operation | Average Case | |-----------|--------------| | ... | ... | |-----------|--------------| | Get Item | O(1) | ----------------------------
这个答案:
列表中的查找是 O(n),字典中的查找是分期 O(1),关于数据结构中的项目数。
如果第一个文档为真,那么为什么在具有相同复杂性的情况下访问字典比访问列表更快?
有人可以对此给出明确的解释吗?我会说它总是取决于列表/字典的大小,但我需要对此有更多的了解。
原文由 Diego Mora Cespedes 发布,翻译遵循 CC BY-SA 4.0 许可协议
Get item 是获取特定索引中的项目,而 lookup 是搜索列表中是否存在某个元素。为此,除非列表已排序,否则您将需要迭代所有元素,并进行
O(n)
Get Item 操作,这导致 O(n) 查找。字典在底层维护着一个智能数据结构(哈希表),所以你不需要查询
O(n)
次来查找元素是否存在,而是恒定的次数(平均情况),领先到O(1)
查找。