Python常见操作的时间复杂度

简介: 本文整理了Python中常见数据结构操作的时间复杂度,旨在帮助大家了解Python操作的性能,协助运行更快的代码。

Python常见操作的时间复杂度

本文整理了Python中常见数据结构操作的时间复杂度,旨在帮助大家了解Python操作的性能,协助大家写出更快的代码。

标注方法

程序时间复杂度一般用"大O表示法(Big-O notation)"来表示。假如有如下代码:

def list_check(to_check, the_list):
    for item in the_list:
        if to_check == item:
            return True
    return False

上面代码功能很简单,就是检查to_check是否在列表the_list中。我们称这个函数的时间复杂度为 $O(n)$,其中 $n$ 指列表the_list中的元素个数,$O(n)$的意思是算法所需时间的上限随列表中的元素个数线性增长。

在我们描述时间复杂度时,通常会涉及2个数量:

  • $O(n)$ 中的 $n$ 通常表示容器中元素个数
  • $O(k)$ 中的 $k$ 通常表示参数或传入容器中元素个数

常见复杂度表

Big-O 复杂度 解释
$O(1)$ 常量复杂度 无论输入的大小,运行时间始终保持一个常数。
例如从哈希表中取值的时间复杂度就是$O(1)$。
$O(n)$ 线性复杂度 运行时间随输入大小线性增长。
遍历列表就是一个时间复杂度为$O(n)$的操作。
$O(n^{2})$ 平方复杂度 运行时间与输入大小呈平方关系。
比如冒泡排序、插入排序的时间复杂度为$O(n^2)$。
$O(2^{n})$ 指数复杂度 运行时间与输入大小呈指数关系。指数复杂度的算法性能非常低。
例如图论中的三色问题就是指数复杂度。
$O(\log_{n})$ 对数复杂度 当输入呈指数增长是,运行时间按线性增长。
二分法查找就是典型的对数复杂度。

常见复杂度的图像展示

Complexities-Graph1.png

List操作

List是Python中使用最多的数据结构,熟悉List中各操作的时间复杂度对我们优化程序性能有很大帮助

操作 时间复杂度(平均情况)
追加 append() $O(1)$
拷贝 copy() $O(n)$
删除元素 remove() $O(n)$
删除切片 del lst[2:4] $O(n)$
插入 insert() $O(n)$
获取元素 lst[0] $O(1)$
设置元素 lst[0] = 1 $O(1)$
迭代 $O(n)$
获取切片 lst[0:3] $O(k)$
设置切片 lst[0:3] = [4, 5] $O(n+k)$
扩展 extend() $O(k)$
排序 lst.sort() $O(n \log_n)$
获取长度 len() $O(1)$
in $O(n)$
min()``max() $O(n)$

Set操作

操作 时间复杂度(平均情况) 时间复杂度(最差情况)
in $O(1)$
差集 s-t $O(\text{len}(s))$
交集 s&t $O(\text{min}(\text{len}(s), \text{len}(t)))$ $O(\text{len}(s) \times \text{len}(t))$
并集 `s\ t` $O(\text{len}(s) + \text{len}(t))$
对称差集 s^t $O(\text{len}(s))$ $O(\text{len}(s) \times \text{len}(t))$
多重交集 s1&s2&s3&...&sn $(n-1) * O(l)$ 其中 $l = \text{max}( \text{len}(s_1),\dots,\text{len}(s_n))$
s.difference_update(t) $O(\text{len}(t) \times \text{len}(s))$
s.symetric_difference_update(t) $O(\text{len}(t))$

Deque操作

deque是python标准库提供的双向队列

操作 时间复杂度(平均情况)
队尾追加 append() $O(1)$
队首追加 appendleft() $O(1)$
队尾扩展 extend() $O(k)$
队首扩展 extendleft() $O(k)$
队尾移除 pop() $O(1)$
队首移除 popleft() $O(1)$
拷贝 copy() $O(n)$
删除 remove() $O(n)$
轮转 rotate(k) $O(k)$
目录
相关文章
|
23小时前
|
Python
【Python操作基础】——帮助文档
【Python操作基础】——帮助文档
|
23小时前
|
Python
【Python操作基础】——包
【Python操作基础】——包
|
1天前
|
Python
【Python操作基础】——函数
【Python操作基础】——函数
|
1天前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
1天前
|
Python
【Python操作基础】——集合
【Python操作基础】——集合
|
1天前
|
索引 Python
【Python操作基础】——序列
【Python操作基础】——序列
|
1天前
|
Python
【Python操作基础】——字符串
【Python操作基础】——字符串
|
1天前
|
Python
【Python操作基础】——元组
【Python操作基础】——元组
|
1天前
|
Python
【Python操作基础】——列表操作
【Python操作基础】——列表操作
|
1天前
|
Python
【Python操作基础】——while语句用法和pass语句
【Python操作基础】——while语句用法和pass语句