Python常见操作时间复杂度
电话面试被问到了几个python常见操作的时间复杂度问题,这几年一直关注在业务逻辑的实现上这类基础反而记得不太清楚了,这里有必要重新复习一下,完整版:
列表
列表内部是由数组实现的,常见操作的时间复杂度如下:
| 操作 | 平均情况 | 最坏情况 |
|---|---|---|
| Get查找 | O(1) | O(1) |
| Set修改 | O(1) | O(1) |
| Append追加 | O(1) | O(1) |
| Len求长度 | O(1) | O(1) |
| POP弹出 | O(1) | O(1) |
| Insert插入 | O(n) | O(n) |
| Del删除 | O(n) | O(n) |
| Copy复制 | O(n) | O(n) |
| Iteration迭代 | O(n) | O(n) |
| IN查询 | O(n) | O(n) |
| Min、Max | O(n) | O(n) |
| Extend扩展 | O(k) | O(k) |
| Sort排序 | O(nlogn) | O(nlogn) |
双端队列
内部是由双向列表实现的,所以对于2端的操作效率高,而对中间数据操作的效率底。
| 操作 | 平均情况 | 最坏情况 |
|---|---|---|
| Append追加 | O(1) | O(1) |
| Appendleft头部追加 | O(1) | O(1) |
| POP弹出 | O(1) | O(1) |
| POPLeft头部弹出 | O(1) | O(1) |
| Extend扩展 | O(k) | O(k) |
| ExtendLeft扩展 | O(k) | O(k) |
字典
| 操作 | 平均情况 | 最坏情况 |
|---|---|---|
| Get查找 | O(1) | O(n) |
| Set修改 | O(1) | O(n) |
| Del删除 | O(1) | O(n) |
| IN查询 | O(1) | O(n) |
| Iteration迭代 | O(n) | O(n) |
| Copy复制 | O(n) | O(n) |
集合
内部实现和字典很像
| 操作 | 平均情况 | 最坏情况 |
|---|---|---|
| IN查询 | O(1) | O(n) |
| s&t交集 | O(min(len(s), len(t)) | O(len(s) * len(t)) |
| st 并集 | O(len(s)+len(t)) | |
| s-t差集 | O(len(s)) |