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)$
目录
相关文章
|
2月前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
76 6
|
5月前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
56 3
|
3月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
41 4
|
5月前
|
存储 监控 数据处理
💻Python高手必备!文件系统操作秘籍,让你的数据存取如臂使指
【7月更文挑战第29天】在数据驱动时代, Python以简洁语法、丰富库生态和强大跨平台能力, 成为数据科学等领域首选。本文探讨Python文件系统操作秘籍, 助力高效数据处理。
53 11
|
5月前
|
存储 算法 搜索推荐
深度剖析 Python 算法:时间复杂度与空间复杂度的爱恨情仇,你站哪边?
【7月更文挑战第23天】在Python算法设计中,时间复杂度与空间复杂度如影随形,反映算法效率与资源消耗。时间复杂度揭示算法随输入规模增长的计算趋势,空间复杂度关注额外存储需求。找最大值示例中,两种实现均具O(n)时间与O(1)空间复杂度,但在排序等复杂场景下,如冒泡排序与快速排序,或哈希表与二叉树查找,权衡变得关键。实时系统偏好低时间复杂度算法,存储受限环境则需关注空间效率。最佳选择依应用场景而定,掌握二者平衡,方能编写高效代码。
44 10
|
5月前
|
索引 Python
Python的列表操作有哪些?
Python的列表操作非常丰富,包括列表的创建、元素的访问、修改、添加、删除、切片、排序等多个方面。
50 12
|
5月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
151 3
|
5月前
|
数据挖掘 数据处理 Python
🔍深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
【7月更文挑战第29天】深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
42 3
|
5月前
|
安全 数据安全/隐私保护 Python